@tricoteuses/assemblee 1.5.0 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bugs/acteur-00010.js +3 -3
- package/lib/bugs/agenda-00002.js +3 -3
- package/lib/bugs/agenda-00002.mjs +2 -2
- package/lib/bugs/agenda-00008.js +3 -3
- package/lib/bugs/agenda-00011.js +3 -3
- package/lib/bugs/agenda-00011.mjs +2 -2
- package/lib/bugs.js +3 -3
- package/lib/bugs.mjs +2 -2
- package/lib/datasets.js +1 -2
- package/lib/datasets.mjs +1 -2
- package/lib/dates.js +16 -20
- package/lib/dates.mjs +5 -7
- package/lib/dossiers_legislatifs.mjs +1 -2
- package/lib/file_systems.js +3 -3
- package/lib/file_systems.mjs +3 -3
- package/lib/inserters.js +1 -3
- package/lib/inserters.mjs +1 -3
- package/lib/parsers/documents.js +1 -2
- package/lib/parsers/documents.mjs +1 -2
- package/lib/parsers/recherche_amendements.js +9 -10
- package/lib/parsers/recherche_amendements.mjs +4 -6
- package/lib/raw_types/acteurs_et_organes.js +2 -2
- package/lib/raw_types/agendas.js +2 -2
- package/lib/raw_types/amendements.js +2 -2
- package/lib/raw_types/debats.js +2 -2
- package/lib/raw_types/dossiers_legislatifs.d.ts +1 -0
- package/lib/raw_types/dossiers_legislatifs.js +5 -4
- package/lib/raw_types/dossiers_legislatifs.mjs +3 -2
- package/lib/raw_types/questions.js +2 -2
- package/lib/raw_types/scrutins.js +2 -2
- package/lib/scripts/bugs_helper.js +3 -3
- package/lib/scripts/bugs_helper.mjs +2 -2
- package/lib/scripts/clean_reorganized_data.js +1 -1
- package/lib/scripts/clean_reorganized_data.mjs +1 -1
- package/lib/scripts/document_dossiers_legislatifs.js +3 -3
- package/lib/scripts/document_dossiers_legislatifs.mjs +2 -2
- package/lib/scripts/parse_textes_lois.js +2 -1
- package/lib/scripts/reorganize_data.js +1 -1
- package/lib/scripts/reorganize_data.mjs +1 -1
- package/lib/scripts/retrieve_senateurs_photos.js +1 -2
- package/lib/scripts/retrieve_senateurs_photos.mjs +1 -2
- package/lib/scripts/retrieve_textes_lois.js +3 -3
- package/lib/scripts/retrieve_textes_lois.mjs +1 -1
- package/lib/scripts/validate_json.js +3 -3
- package/lib/scripts/validate_json.mjs +2 -2
- package/lib/types/acteurs_et_organes.d.ts +32 -32
- package/lib/types/acteurs_et_organes.js +3 -3
- package/lib/types/acteurs_et_organes.mjs +1 -1
- package/lib/types/agendas.d.ts +5 -5
- package/lib/types/agendas.js +3 -3
- package/lib/types/agendas.mjs +1 -1
- package/lib/types/amendements.d.ts +1 -1
- package/lib/types/amendements.js +3 -3
- package/lib/types/amendements.mjs +1 -1
- package/lib/types/debats.js +3 -3
- package/lib/types/debats.mjs +1 -1
- package/lib/types/dossiers_legislatifs.js +3 -3
- package/lib/types/dossiers_legislatifs.mjs +1 -1
- package/lib/types/questions.js +3 -3
- package/lib/types/questions.mjs +1 -1
- package/lib/types/scrutins.js +3 -3
- package/lib/types/scrutins.mjs +1 -1
- package/package.json +3 -3
|
@@ -707,4 +707,4 @@ if (process.argv[1].endsWith("reorganize_data.ts")) {
|
|
|
707
707
|
const options = commandLineArgs(optionsDefinitions);
|
|
708
708
|
process.exit(reorganizeData(options));
|
|
709
709
|
}
|
|
710
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImdpdCIsIndhbGtEaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInBhdGhGcm9tU2NydXRpblVpZCIsInBhdGhGcm9tVWlkIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIlF1ZXN0aW9uc1Jhd0NvbnZlcnQiLCJDb21wdGVzUmVuZHVzUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9uIiwicmV1bmlvbnMiLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXIiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsIlF1ZXN0aW9ucyIsInF1ZXN0aW9ucyIsInF1ZXN0aW9uU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCIsInF1ZXN0aW9uT3JpZ2luYWxKc29uIiwicXVlc3Rpb25PcmlnaW5hbCIsInRvUXVlc3Rpb25XcmFwcGVyIiwicXVlc3Rpb24iLCJ3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbiIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1U2VhbmNlIiwiY29tcHRlUmVuZHUiLCJ3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJyZXVuaW9uc0RpciIsInNjcnV0aW5zRGlyIiwicXVlc3Rpb25zRGlyIiwicXVlc3Rpb25VaWRSZWdleCIsImNvbXB0ZXNSZW5kdXNEaXIiLCJjb21wdGVSZW5kdVVpZFJlZ2V4IiwiYXJndiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlLCBFbmFibGVkRGF0YXNldHMsIGZpbHRlckJ5TGVnaXNsYXR1cmUgfSBmcm9tIFwiLi4vZGF0YXNldHNcIlxuaW1wb3J0IHsgZXhpc3RpbmdEYXRlVG9Kc29uLCBwYXRjaGVkRGF0ZVRvSnNvbiB9IGZyb20gXCIuLi9kYXRlc1wiXG5pbXBvcnQgKiBhcyBnaXQgZnJvbSBcIi4uL2dpdFwiXG5pbXBvcnQgeyB3YWxrRGlyIH0gZnJvbSBcIi4uL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBwYXRoRnJvbURvY3VtZW50VWlkLFxuICBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkLFxuICBwYXRoRnJvbVJldW5pb25VaWQsXG4gIHBhdGhGcm9tU2NydXRpblVpZCxcbiAgcGF0aEZyb21VaWQsXG59IGZyb20gXCIuLi9sb2FkZXJzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hZ2VuZGFzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQW1lbmRlbWVudHNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9hbWVuZGVtZW50c1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kb3NzaWVyc19sZWdpc2xhdGlmc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFNjcnV0aW5zUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvc2NydXRpbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBRdWVzdGlvbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9xdWVzdGlvbnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBDb21wdGVzUmVuZHVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvZGViYXRzXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwiQ1wiLFxuICAgIGhlbHA6IFwiY2xvbmUgcmVwb3NpdG9yaWVzIGZyb20gZ2l2ZW4gZ3JvdXAgKG9yIG9yZ2FuaXphdGlvbikgZ2l0IFVSTFwiLFxuICAgIG5hbWU6IFwiY2xvbmVcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJjXCIsXG4gICAgaGVscDogXCJjb21taXQgc3BsaXQgZmlsZXNcIixcbiAgICBuYW1lOiBcImNvbW1pdFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJrXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBbXCJBbGxcIl0sXG4gICAgaGVscDogXCJjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJlb3JnYW5pemVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImNhdGVnb3JpZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJsXCIsXG4gICAgaGVscDogXCJsZWdpc2xhdHVyZXMgb2YgY2F0ZWdvcmllcyBvZiBkYXRhc2V0cyB0byByZXRyaWV2ZTsgbGVhdmUgZW1wdHkgb3IgdXNlIDAgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwibGVnaXNsYXR1cmVcIixcbiAgICB0eXBlOiBOdW1iZXIsXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJwXCIsXG4gICAgaGVscDogXCJwdWxsIHJlcG9zaXRvcmllcyBiZWZvcmUgcHJvY2VlZGluZ1wiLFxuICAgIG5hbWU6IFwicHVsbFwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJyXCIsXG4gICAgaGVscDogXCJwdXNoIGNvbW1pdCB0byBnaXZlbiByZW1vdGVcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcInJlbW90ZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcIlZcIixcbiAgICBoZWxwOiBcImRvbid0IHZhbGlkYXRlIHJhdyBkYXRhXCIsXG4gICAgbmFtZTogXCJuby12YWxpZGF0ZS1yYXdcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cblxuZnVuY3Rpb24gcmVvcmdhbml6ZURhdGEob3B0aW9uczogYW55KTogbnVtYmVyIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBwYXRjaGVkRGF0ZVRvSnNvblxuXG4gIGxldCBleGl0Q29kZSA9IDEwIC8vIE5vdGhpbmcgdG8gY29tbWl0XG4gIGNvbnN0IGdpdEdyb3VwVXJsID0gb3B0aW9ucy5jbG9uZVxuICAgID8gb3B0aW9ucy5jbG9uZS50cmltKCkucmVwbGFjZSgvXFwvKyQvLCBcIlwiKVxuICAgIDogdW5kZWZpbmVkXG4gIGNvbnN0IHZhbGlkYXRlUmF3RGF0YSA9ICFvcHRpb25zW1wibm8tdmFsaWRhdGUtcmF3XCJdXG5cbiAgb3B0aW9ucy5jYXRlZ29yaWVzLm1hcCgoZGF0YXNldE5hbWU6IHN0cmluZykgPT5cbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAoRW5hYmxlZERhdGFzZXRzIGFzIGFueSBhcyB7IFtuYW1lOiBzdHJpbmddOiBFbmFibGVkRGF0YXNldHMgfSlbXG4gICAgICAgIGRhdGFzZXROYW1lXG4gICAgICBdLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYFVua25vd24gbmFtZSBvZiBkYXRhc2V0OiAke2RhdGFzZXROYW1lfWAsXG4gICAgKSxcbiAgKVxuICBjb25zdCBlbmFibGVkRGF0YXNldHMgPSBvcHRpb25zLmNhdGVnb3JpZXMucmVkdWNlKFxuICAgIChlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cywgZGF0YXNldE5hbWU6IHN0cmluZyk6IEVuYWJsZWREYXRhc2V0cyA9PlxuICAgICAgZW5hYmxlZERhdGFzZXRzIHxcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgRW5hYmxlZERhdGFzZXRzLk5vbmUsXG4gIClcblxuICBsZXQgY2hvc2VuRGF0YXNldHMgPSBmaWx0ZXJCeUxlZ2lzbGF0dXJlKGRhdGFzZXRzLCBvcHRpb25zLmxlZ2lzbGF0dXJlKTtcblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBpZiAob3B0aW9ucy5wdWxsKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgcmVzZXQgLS1oYXJkIG9yaWdpbi9tYXN0ZXJgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgICBleGVjU3luYyhgZ2l0IHB1bGwgLS1yZWJhc2VgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjdGV1cnNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiYWN0ZXVyc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKGFjdGV1cnNSZW9yZ2FuaXplZERpcilcbiAgICAgIGNvbnN0IG9yZ2FuZXNSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwib3JnYW5lc1wiKVxuICAgICAgZnMubWtkaXJTeW5jKG9yZ2FuZXNSZW9yZ2FuaXplZERpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXJzRXRPcmdhbmVzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBhY3RldXIgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC5hY3RldXJzLmFjdGV1cikge1xuICAgICAgICAgICAgICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIGFjdGV1cnNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBhY3RldXIudWlkW1wiI3RleHRcIl0gKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShhY3RldXIsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQub3JnYW5lcy5vcmdhbmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRlcG9ydHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiZGVwb3J0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcImRlcG9ydFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIGRlcG9ydFNwbGl0UGF0aFtkZXBvcnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIWRlcG9ydEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4uZGVwb3J0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcImRlcG9ydFwiIGZpbGU6ICR7ZGVwb3J0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIGRlcG9ydE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IGRlcG9ydE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9EZXBvcnQoZGVwb3J0T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnQgPSBkZXBvcnRPcmlnaW5hbC5kZXBvcnRcbiAgICAgICAgICAgICAgICBsZXQgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFtkZXBvcnQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChkZXBvcnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZXBvcnRzLnB1c2goZGVwb3J0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBkZXBvcnRzIG9mIE9iamVjdC52YWx1ZXMoZGVwb3J0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIGRlcG9ydHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG1hbmRhdHNCeUFjdGV1clVpZDoge1xuICAgICAgICAgICAgICBbYWN0ZXVyVWlkOiBzdHJpbmddOiB7IHVpZDogc3RyaW5nIH1bXVxuICAgICAgICAgICAgfSA9IHt9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGZzLmV4aXN0c1N5bmMoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwibWFuZGF0XCIpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIFtcIm1hbmRhdFwiXSxcbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICAgIG1hbmRhdFNwbGl0UGF0aFttYW5kYXRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgICBpZiAoIW1hbmRhdEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAgLi4ubWFuZGF0U3BsaXRQYXRoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgYCAgTG9hZGluZyBcIm1hbmRhdFwiIGZpbGU6ICR7bWFuZGF0T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IG1hbmRhdE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9NYW5kYXRXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgIG1hbmRhdE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG1hbmRhdE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXQgPSBtYW5kYXRPcmlnaW5hbC5tYW5kYXRcbiAgICAgICAgICAgICAgICBsZXQgbWFuZGF0cyA9IG1hbmRhdHNCeUFjdGV1clVpZFttYW5kYXQuYWN0ZXVyUmVmXVxuICAgICAgICAgICAgICAgIGlmIChtYW5kYXRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgIG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl0gPSBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYW5kYXRzLnB1c2gobWFuZGF0KVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBtYW5kYXRzIG9mIE9iamVjdC52YWx1ZXMobWFuZGF0c0J5QWN0ZXVyVWlkKSkge1xuICAgICAgICAgICAgICAgIG1hbmRhdHMuc29ydCgoYSwgYikgPT5cbiAgICAgICAgICAgICAgICAgIGEudWlkLmxlbmd0aCA9PT0gYi51aWQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gYS51aWQubG9jYWxlQ29tcGFyZShiLnVpZClcbiAgICAgICAgICAgICAgICAgICAgOiBhLnVpZC5sZW5ndGggLSBiLnVpZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImFjdGV1clwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyRmlsZW5hbWUgPSBhY3RldXJTcGxpdFBhdGhbYWN0ZXVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghYWN0ZXVyRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFjdGV1clNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJhY3RldXJcIiBmaWxlOiAke2FjdGV1ck9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydC50b0FjdGV1cihhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFjdGV1ck9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyID0gYWN0ZXVyT3JpZ2luYWwuYWN0ZXVyXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clVpZCA9IGFjdGV1ci51aWRbXCIjdGV4dFwiXVxuICAgICAgICAgICAgICBjb25zdCBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKGRlcG9ydHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIuZGVwb3J0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5kZXBvcnRzID0geyBkZXBvcnQ6IGRlcG9ydHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbYWN0ZXVyVWlkXVxuICAgICAgICAgICAgICBpZiAobWFuZGF0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGFjdGV1ci5tYW5kYXRzLCB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgYWN0ZXVyLm1hbmRhdHMgPSB7IG1hbmRhdDogbWFuZGF0cyB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyVWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJvcmdhbmVcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZUZpbGVuYW1lID0gb3JnYW5lU3BsaXRQYXRoW29yZ2FuZVNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIW9yZ2FuZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5vcmdhbmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwib3JnYW5lXCIgZmlsZTogJHtvcmdhbmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9PcmdhbmUob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmdhbmVPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZSA9IG9yZ2FuZU9yaWdpbmFsLm9yZ2FuZVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVSZW9yZ2FuaXplZEpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yZ2FuZXNSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICBvcmdhbmUudWlkICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3JnYW5lLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFnZW5kYXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9BZ2VuZGFzKG9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIG9yaWdpbmFsRGF0YS5yZXVuaW9ucy5yZXVuaW9uKSB7XG4gICAgICAgICAgICAgIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wicmV1bmlvblwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5yZXVuaW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInJldW5pb25cIiBmaWxlOiAke3JldW5pb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZXVuaW9uT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWdlbmRhc1Jhd0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHJldW5pb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb24gPSByZXVuaW9uT3JpZ2luYWwucmV1bmlvblxuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50cyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdGV4dGVMZWdpc2xhdGlmIG9mIG9yaWdpbmFsRGF0YS50ZXh0ZXNFdEFtZW5kZW1lbnRzXG4gICAgICAgICAgICAgIC50ZXh0ZWxlZykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYW1lbmRlbWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmFtZW5kZW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYW1lbmRlbWVudFwiIGZpbGU6ICR7YW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQudG9BbWVuZGVtZW50V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgYW1lbmRlbWVudE9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoYW1lbmRlbWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudCA9IGFtZW5kZW1lbnRPcmlnaW5hbC5hbWVuZGVtZW50XG4gICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGFtZW5kZW1lbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuZG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuICAgICAgY29uc3QgZG9jdW1lbnRzRGlyID0gcGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgXCJkb2N1bWVudHNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb2N1bWVudHNEaXIpXG4gICAgICBjb25zdCBkb3NzaWVyc0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9zc2llcnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhkb3NzaWVyc0RpcilcblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyc0xlZ2lzbGF0aWZzKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKG9yaWdpbmFsSnNvbilcblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBvcmlnaW5hbERhdGEuZXhwb3J0LnRleHRlc0xlZ2lzbGF0aWZzXG4gICAgICAgICAgICAgIC5kb2N1bWVudCkge1xuICAgICAgICAgICAgICB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKGRvY3VtZW50c0RpciwgZG9jdW1lbnQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgeyBkb3NzaWVyUGFybGVtZW50YWlyZSB9IG9mIG9yaWdpbmFsRGF0YS5leHBvcnRcbiAgICAgICAgICAgICAgLmRvc3NpZXJzTGVnaXNsYXRpZnMuZG9zc2llcikge1xuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvY3VtZW50U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvY3VtZW50XCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb2N1bWVudFNwbGl0UGF0aFtkb2N1bWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9jdW1lbnRTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9jdW1lbnRcIiBmaWxlOiAke2RvY3VtZW50T3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudE9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9jdW1lbnQoZG9jdW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudCA9IGRvY3VtZW50T3JpZ2luYWwuZG9jdW1lbnRcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcImRvc3NpZXJQYXJsZW1lbnRhaXJlXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aFtcbiAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIGlmICghZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5kb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiIGZpbGU6ICR7ZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShcbiAgICAgICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbC5kb3NzaWVyUGFybGVtZW50YWlyZVxuICAgICAgICAgICAgICB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJzRGlyLFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlNjcnV0aW5zKSB7XG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TaW5nbGVGaWxlOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxEYXRhOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGlucyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpbiBvZiBvcmlnaW5hbERhdGEuc2NydXRpbnMuc2NydXRpbikge1xuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY3J1dGluU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgc2NydXRpblNwbGl0UGF0aFtzY3J1dGluU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uc2NydXRpblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJzY3J1dGluXCIgZmlsZTogJHtzY3J1dGluT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgc2NydXRpbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFNjcnV0aW5zUmF3Q29udmVydC50b1NjcnV0aW5XcmFwcGVyKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW4gPSBzY3J1dGluT3JpZ2luYWwuc2NydXRpblxuICAgICAgICAgICAgICB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBzY3J1dGluKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5RdWVzdGlvbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMucXVlc3Rpb25zKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcXVlc3Rpb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcXVlc3Rpb25TcGxpdFBhdGhbcXVlc3Rpb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFxdWVzdGlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnF1ZXN0aW9uU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcInF1ZXN0aW9uXCIgZmlsZTogJHtxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IFF1ZXN0aW9uc1Jhd0NvbnZlcnQudG9RdWVzdGlvbldyYXBwZXIocXVlc3Rpb25PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHF1ZXN0aW9uT3JpZ2luYWwucXVlc3Rpb25cbiAgICAgICAgICAgICAgd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsIFwiLnhtbFwiKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiY29tcHRlUmVuZHVTZWFuY2VcIiBmaWxlOiAke2NvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0LnRvQ29tcHRlUmVuZHVXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2UoY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2UgPSBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsLmNvbXB0ZVJlbmR1XG4gICAgICAgICAgICAgIHdyaXRlQ29tcHRlc1JlbmR1c1Jlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2UsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc3RvcmUgc3RhbmRhcmQgY29udmVyc2lvbiBvZiBkYXRlcyB0byBKU09OLlxuICBEYXRlLnByb3RvdHlwZS50b0pTT04gPSBleGlzdGluZ0RhdGVUb0pzb25cblxuICByZXR1cm4gZXhpdENvZGVcbn1cblxuZnVuY3Rpb24gd3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkYXRhc2V0UmVvcmdhbml6ZWREaXI6IHN0cmluZyxcbiAgYW1lbmRlbWVudDoge1xuICAgIHVpZDogc3RyaW5nXG4gICAgdGV4dGVMZWdpc2xhdGlmUmVmOiBzdHJpbmdcbiAgfSxcbik6IHZvaWQge1xuICBjb25zdCB1aWRUZXh0ZUxlZ2lzbGF0aWYgPSBhbWVuZGVtZW50LnRleHRlTGVnaXNsYXRpZlJlZlxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwodWlkVGV4dGVMZWdpc2xhdGlmLCB1bmRlZmluZWQpXG4gIGNvbnN0IHRleHRlTGVnaXNsYXRpZkRpciA9IHBhdGguam9pbihcbiAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgdWlkVGV4dGVMZWdpc2xhdGlmLFxuICApXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVMZWdpc2xhdGlmRGlyKVxuICBjb25zdCByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICB0ZXh0ZUxlZ2lzbGF0aWZEaXIsXG4gICAgYW1lbmRlbWVudC51aWQgKyBcIi5qc29uXCIsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICBKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50LCBudWxsLCAyKSxcbiAgICB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSxcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURvY3VtZW50UmVvcmdhbml6ZWRKc29uKFxuICBkb2N1bWVudHNEaXI6IHN0cmluZyxcbiAgZG9jdW1lbnQ6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tRG9jdW1lbnRVaWQoZG9jdW1lbnRzRGlyLCBkb2N1bWVudC51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShkb2N1bWVudCwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG9zc2llclBhcmxlbWVudGFpcmVSZW9yZ2FuaXplZEpzb24oXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIGRvc3NpZXJQYXJsZW1lbnRhaXJlOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvc3NpZXJQYXJsZW1lbnRhaXJlVWlkKFxuICAgIGRvc3NpZXJzRGlyLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlLnVpZCxcbiAgKVxuICBmcy53cml0ZUZpbGVTeW5jKFxuICAgIGAke2Jhc2VuYW1lfS5qc29uYCxcbiAgICBKU09OLnN0cmluZ2lmeShkb3NzaWVyUGFybGVtZW50YWlyZSwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKFxuICByZXVuaW9uc0Rpcjogc3RyaW5nLFxuICByZXVuaW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVJldW5pb25VaWQocmV1bmlvbnNEaXIsIHJldW5pb24udWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocmV1bmlvbiwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHdyaXRlU2NydXRpblJlb3JnYW5pemVkSnNvbihcbiAgc2NydXRpbnNEaXI6IHN0cmluZyxcbiAgc2NydXRpbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyLCBzY3J1dGluLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHNjcnV0aW4sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbihcbiAgcXVlc3Rpb25zRGlyOiBzdHJpbmcsXG4gIHF1ZXN0aW9uOiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgcXVlc3Rpb25VaWRSZWdleDogUmVnRXhwID0gL15RQU4oUlxcZCspKExcXGQrKVEoRXxHfE9TRCkoXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKHF1ZXN0aW9uc0RpciwgcXVlc3Rpb24udWlkLCBxdWVzdGlvblVpZFJlZ2V4KVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkocXVlc3Rpb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gIGNvbXB0ZXNSZW5kdXNEaXI6IHN0cmluZyxcbiAgY29tcHRlUmVuZHU6IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAgIC9eQ1JTQU4oUlxcZCspKExcXGQrKShTXFxkKykoT3xFKShcXGQrKShOXFxkKykkL1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tVWlkKFxuICAgIGNvbXB0ZXNSZW5kdXNEaXIsXG4gICAgY29tcHRlUmVuZHUudWlkLFxuICAgIGNvbXB0ZVJlbmR1VWlkUmVnZXgsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KGNvbXB0ZVJlbmR1LCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIGlmICovXG5pZiAocHJvY2Vzcy5hcmd2WzFdLmVuZHNXaXRoKFwicmVvcmdhbml6ZV9kYXRhLnRzXCIpKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG4gIHByb2Nlc3MuZXhpdChyZW9yZ2FuaXplRGF0YShvcHRpb25zKSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsUUFBUSxRQUFRLGVBQWU7QUFDeEMsT0FBT0MsZUFBZSxNQUFNLG1CQUFtQjtBQUMvQyxPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLFFBQVEsRUFBRUMsZ0JBQWdCLEVBQUVDLGVBQWUsRUFBRUMsbUJBQW1CO0FBQUEsU0FDaEVDLGtCQUFrQixFQUFFQyxpQkFBaUI7QUFBQSxPQUN2QyxLQUFLQyxHQUFHO0FBQUEsU0FDTkMsT0FBTztBQUFBLFNBRWRDLG1CQUFtQixFQUNuQkMsK0JBQStCLEVBQy9CQyxrQkFBa0IsRUFDbEJDLGtCQUFrQixFQUNsQkMsV0FBVztBQUFBLFNBRUpDLE9BQU8sSUFBSUMsMEJBQTBCO0FBQUEsU0FDckNELE9BQU8sSUFBSUUsaUJBQWlCO0FBQUEsU0FDNUJGLE9BQU8sSUFBSUcscUJBQXFCO0FBQUEsU0FDaENILE9BQU8sSUFBSUksNkJBQTZCO0FBQUEsU0FDeENKLE9BQU8sSUFBSUssa0JBQWtCO0FBQUEsU0FDN0JMLE9BQU8sSUFBSU0sbUJBQW1CO0FBQUEsU0FDOUJOLE9BQU8sSUFBSU8sdUJBQXVCO0FBRTNDLE1BQU1DLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQUFHO0VBQ1ZDLElBQUksRUFBRSwrREFBK0Q7RUFDckVDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRUM7QUFDUixDQUFDLEVBQ0Q7RUFDRUosS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFF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
|
|
710
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJleGVjU3luYyIsImNvbW1hbmRMaW5lQXJncyIsImZzIiwicGF0aCIsImRhdGFzZXRzIiwiRGF0YXNldFN0cnVjdHVyZSIsIkVuYWJsZWREYXRhc2V0cyIsImZpbHRlckJ5TGVnaXNsYXR1cmUiLCJleGlzdGluZ0RhdGVUb0pzb24iLCJwYXRjaGVkRGF0ZVRvSnNvbiIsImdpdCIsIndhbGtEaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwicGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZCIsInBhdGhGcm9tUmV1bmlvblVpZCIsInBhdGhGcm9tU2NydXRpblVpZCIsInBhdGhGcm9tVWlkIiwiQ29udmVydCIsIkFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0IiwiQWdlbmRhc1Jhd0NvbnZlcnQiLCJBbWVuZGVtZW50c1Jhd0NvbnZlcnQiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydCIsIlNjcnV0aW5zUmF3Q29udmVydCIsIlF1ZXN0aW9uc1Jhd0NvbnZlcnQiLCJDb21wdGVzUmVuZHVzUmF3Q29udmVydCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwiQm9vbGVhbiIsImRlZmF1bHRWYWx1ZSIsIm11bHRpcGxlIiwiTnVtYmVyIiwiZGVmYXVsdE9wdGlvbiIsInJlb3JnYW5pemVEYXRhIiwib3B0aW9ucyIsImRhdGFEaXIiLCJEYXRlIiwicHJvdG90eXBlIiwidG9KU09OIiwiZXhpdENvZGUiLCJnaXRHcm91cFVybCIsImNsb25lIiwidHJpbSIsInJlcGxhY2UiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZVJhd0RhdGEiLCJjYXRlZ29yaWVzIiwibWFwIiwiZGF0YXNldE5hbWUiLCJub3RTdHJpY3RFcXVhbCIsImVuYWJsZWREYXRhc2V0cyIsInJlZHVjZSIsIk5vbmUiLCJjaG9zZW5EYXRhc2V0cyIsImxlZ2lzbGF0dXJlIiwiQWN0ZXVyc0V0T3JnYW5lcyIsImRhdGFzZXQiLCJhY3RldXJzRXRPcmdhbmVzIiwib3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCIsImpvaW4iLCJmaWxlbmFtZSIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJiYXNlbmFtZSIsImN3ZCIsImVudiIsInByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiZGF0YXNldFJlb3JnYW5pemVkRGlyIiwicHVsbCIsImVuc3VyZURpclN5bmMiLCJyZWFkZGlyU3luYyIsInJlbW92ZVN5bmMiLCJhY3RldXJzUmVvcmdhbml6ZWREaXIiLCJta2RpclN5bmMiLCJvcmdhbmVzUmVvcmdhbml6ZWREaXIiLCJzdHJ1Y3R1cmUiLCJTaW5nbGVGaWxlIiwib3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwib3JpZ2luYWxEYXRhIiwidG9BY3RldXJzRXRPcmdhbmVzIiwiSlNPTiIsInBhcnNlIiwiYWN0ZXVyIiwiZXhwb3J0IiwiYWN0ZXVycyIsInJlb3JnYW5pemVkSnNvbkZpbGVQYXRoIiwidWlkIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsIm9yZ2FuZSIsIm9yZ2FuZXMiLCJTZWdtZW50ZWRGaWxlcyIsImRlcG9ydHNCeUFjdGV1clVpZCIsImV4aXN0c1N5bmMiLCJkZXBvcnRTcGxpdFBhdGgiLCJkZXBvcnRGaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwiZGVwb3J0T3JpZ2luYWxGaWxlUGF0aCIsInZlcmJvc2UiLCJkZXBvcnRPcmlnaW5hbEpzb24iLCJkZXBvcnRPcmlnaW5hbCIsInRvRGVwb3J0IiwiZGVwb3J0IiwiZGVwb3J0cyIsImFjdGV1clJlZiIsInB1c2giLCJPYmplY3QiLCJ2YWx1ZXMiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWFuZGF0c0J5QWN0ZXVyVWlkIiwibWFuZGF0U3BsaXRQYXRoIiwibWFuZGF0RmlsZW5hbWUiLCJtYW5kYXRPcmlnaW5hbEZpbGVQYXRoIiwibWFuZGF0T3JpZ2luYWxKc29uIiwibWFuZGF0T3JpZ2luYWwiLCJ0b01hbmRhdFdyYXBwZXIiLCJtYW5kYXQiLCJtYW5kYXRzIiwiYWN0ZXVyU3BsaXRQYXRoIiwiYWN0ZXVyRmlsZW5hbWUiLCJhY3RldXJPcmlnaW5hbEZpbGVQYXRoIiwiYWN0ZXVyT3JpZ2luYWxKc29uIiwiYWN0ZXVyT3JpZ2luYWwiLCJ0b0FjdGV1ciIsImFjdGV1clVpZCIsInN0cmljdEVxdWFsIiwiYWN0ZXVyUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJvcmdhbmVTcGxpdFBhdGgiLCJvcmdhbmVGaWxlbmFtZSIsIm9yZ2FuZU9yaWdpbmFsRmlsZVBhdGgiLCJvcmdhbmVPcmlnaW5hbEpzb24iLCJvcmdhbmVPcmlnaW5hbCIsInRvT3JnYW5lIiwib3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGgiLCJjb21taXQiLCJlcnJvckNvZGUiLCJjb21taXRBbmRQdXNoIiwicmVtb3RlIiwiQWdlbmRhcyIsImFnZW5kYXMiLCJ0b0FnZW5kYXMiLCJyZXVuaW9uIiwicmV1bmlvbnMiLCJ3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24iLCJyZXVuaW9uU3BsaXRQYXRoIiwicmV1bmlvbkZpbGVuYW1lIiwicmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgiLCJyZXVuaW9uT3JpZ2luYWxKc29uIiwicmV1bmlvbk9yaWdpbmFsIiwidG9SZXVuaW9uIiwiQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudHMiLCJ0ZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZXNFdEFtZW5kZW1lbnRzIiwidGV4dGVsZWciLCJhbWVuZGVtZW50Iiwid3JpdGVBbWVuZGVtZW50UmVvcmdhbml6ZWRKc29uIiwiYW1lbmRlbWVudFNwbGl0UGF0aCIsImFtZW5kZW1lbnRGaWxlbmFtZSIsImFtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiYW1lbmRlbWVudE9yaWdpbmFsSnNvbiIsImFtZW5kZW1lbnRPcmlnaW5hbCIsInRvQW1lbmRlbWVudFdyYXBwZXIiLCJEb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50c0RpciIsImRvc3NpZXJzRGlyIiwidG9Eb3NzaWVyc0xlZ2lzbGF0aWZzIiwiZG9jdW1lbnQiLCJ0ZXh0ZXNMZWdpc2xhdGlmcyIsIndyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24iLCJkb3NzaWVyUGFybGVtZW50YWlyZSIsImRvc3NpZXIiLCJ3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uIiwiZG9jdW1lbnRTcGxpdFBhdGgiLCJkb2N1bWVudEZpbGVuYW1lIiwiZG9jdW1lbnRPcmlnaW5hbEZpbGVQYXRoIiwiZG9jdW1lbnRPcmlnaW5hbEpzb24iLCJkb2N1bWVudE9yaWdpbmFsIiwidG9Eb2N1bWVudCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlU3BsaXRQYXRoIiwiZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCIsImRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uIiwiZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbCIsInRvRG9zc2llclBhcmxlbWVudGFpcmUiLCJTY3J1dGlucyIsInNjcnV0aW5zIiwidG9TY3J1dGlucyIsInNjcnV0aW4iLCJ3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24iLCJzY3J1dGluU3BsaXRQYXRoIiwic2NydXRpbkZpbGVuYW1lIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwic2NydXRpbk9yaWdpbmFsIiwidG9TY3J1dGluV3JhcHBlciIsIlF1ZXN0aW9ucyIsInF1ZXN0aW9ucyIsInF1ZXN0aW9uU3BsaXRQYXRoIiwicXVlc3Rpb25GaWxlbmFtZSIsInF1ZXN0aW9uT3JpZ2luYWxGaWxlUGF0aCIsInF1ZXN0aW9uT3JpZ2luYWxKc29uIiwicXVlc3Rpb25PcmlnaW5hbCIsInRvUXVlc3Rpb25XcmFwcGVyIiwicXVlc3Rpb24iLCJ3cml0ZVF1ZXN0aW9uc1Jlb3JnYW5pemVkSnNvbiIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlc1JlbmR1c1NlYW5jZXMiLCJjb21wdGVSZW5kdVNlYW5jZVNwbGl0UGF0aCIsImNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgiLCJjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsSnNvbiIsImNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWwiLCJ0b0NvbXB0ZVJlbmR1V3JhcHBlciIsImNvbXB0ZVJlbmR1U2VhbmNlIiwiY29tcHRlUmVuZHUiLCJ3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24iLCJ1aWRUZXh0ZUxlZ2lzbGF0aWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZSZWYiLCJ0ZXh0ZUxlZ2lzbGF0aWZEaXIiLCJyZXVuaW9uc0RpciIsInNjcnV0aW5zRGlyIiwicXVlc3Rpb25zRGlyIiwicXVlc3Rpb25VaWRSZWdleCIsImNvbXB0ZXNSZW5kdXNEaXIiLCJjb21wdGVSZW5kdVVpZFJlZ2V4IiwiYXJndiIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZW9yZ2FuaXplX2RhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIlxuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7XG4gIGRhdGFzZXRzLFxuICBEYXRhc2V0U3RydWN0dXJlLFxuICBFbmFibGVkRGF0YXNldHMsXG4gIGZpbHRlckJ5TGVnaXNsYXR1cmUsXG59IGZyb20gXCIuLi9kYXRhc2V0c1wiXG5pbXBvcnQgeyBleGlzdGluZ0RhdGVUb0pzb24sIHBhdGNoZWREYXRlVG9Kc29uIH0gZnJvbSBcIi4uL2RhdGVzXCJcbmltcG9ydCAqIGFzIGdpdCBmcm9tIFwiLi4vZ2l0XCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcbmltcG9ydCB7XG4gIHBhdGhGcm9tRG9jdW1lbnRVaWQsXG4gIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQsXG4gIHBhdGhGcm9tUmV1bmlvblVpZCxcbiAgcGF0aEZyb21TY3J1dGluVWlkLFxuICBwYXRoRnJvbVVpZCxcbn0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBY3RldXJzRXRPcmdhbmVzUmF3Q29udmVydCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQWdlbmRhc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FnZW5kYXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBBbWVuZGVtZW50c1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgU2NydXRpbnNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc1Jhd0NvbnZlcnQgfSBmcm9tIFwiLi4vcmF3X3R5cGVzL3F1ZXN0aW9uc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIENvbXB0ZXNSZW5kdXNSYXdDb252ZXJ0IH0gZnJvbSBcIi4uL3Jhd190eXBlcy9kZWJhdHNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBhbGlhczogXCJDXCIsXG4gICAgaGVscDogXCJjbG9uZSByZXBvc2l0b3JpZXMgZnJvbSBnaXZlbiBncm91cCAob3Igb3JnYW5pemF0aW9uKSBnaXQgVVJMXCIsXG4gICAgbmFtZTogXCJjbG9uZVwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImNcIixcbiAgICBoZWxwOiBcImNvbW1pdCBzcGxpdCBmaWxlc1wiLFxuICAgIG5hbWU6IFwiY29tbWl0XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImtcIixcbiAgICBkZWZhdWx0VmFsdWU6IFtcIkFsbFwiXSxcbiAgICBoZWxwOiBcImNhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwiY2F0ZWdvcmllc1wiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcImxcIixcbiAgICBoZWxwOiBcImxlZ2lzbGF0dXJlcyBvZiBjYXRlZ29yaWVzIG9mIGRhdGFzZXRzIHRvIHJldHJpZXZlOyBsZWF2ZSBlbXB0eSBvciB1c2UgMCBmb3IgYWxsXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJsZWdpc2xhdHVyZVwiLFxuICAgIHR5cGU6IE51bWJlcixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInBcIixcbiAgICBoZWxwOiBcInB1bGwgcmVwb3NpdG9yaWVzIGJlZm9yZSBwcm9jZWVkaW5nXCIsXG4gICAgbmFtZTogXCJwdWxsXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInJcIixcbiAgICBoZWxwOiBcInB1c2ggY29tbWl0IHRvIGdpdmVuIHJlbW90ZVwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwicmVtb3RlXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwiVlwiLFxuICAgIGhlbHA6IFwiZG9uJ3QgdmFsaWRhdGUgcmF3IGRhdGFcIixcbiAgICBuYW1lOiBcIm5vLXZhbGlkYXRlLXJhd1wiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJ2XCIsXG4gICAgaGVscDogXCJ2ZXJib3NlIGxvZ3NcIixcbiAgICBuYW1lOiBcInZlcmJvc2VcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgZGVmYXVsdE9wdGlvbjogdHJ1ZSxcbiAgICBoZWxwOiBcImRpcmVjdG9yeSBjb250YWluaW5nIEFzc2VtYmzDqWUgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuXG5mdW5jdGlvbiByZW9yZ2FuaXplRGF0YShvcHRpb25zOiBhbnkpOiBudW1iZXIge1xuICBjb25zdCBkYXRhRGlyID0gb3B0aW9ucy5kYXRhRGlyXG4gIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IHBhdGNoZWREYXRlVG9Kc29uXG5cbiAgbGV0IGV4aXRDb2RlID0gMTAgLy8gTm90aGluZyB0byBjb21taXRcbiAgY29uc3QgZ2l0R3JvdXBVcmwgPSBvcHRpb25zLmNsb25lXG4gICAgPyBvcHRpb25zLmNsb25lLnRyaW0oKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsaWRhdGVSYXdEYXRhID0gIW9wdGlvbnNbXCJuby12YWxpZGF0ZS1yYXdcIl1cblxuICBvcHRpb25zLmNhdGVnb3JpZXMubWFwKChkYXRhc2V0TmFtZTogc3RyaW5nKSA9PlxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIChFbmFibGVkRGF0YXNldHMgYXMgYW55IGFzIHsgW25hbWU6IHN0cmluZ106IEVuYWJsZWREYXRhc2V0cyB9KVtcbiAgICAgICAgZGF0YXNldE5hbWVcbiAgICAgIF0sXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBgVW5rbm93biBuYW1lIG9mIGRhdGFzZXQ6ICR7ZGF0YXNldE5hbWV9YCxcbiAgICApLFxuICApXG4gIGNvbnN0IGVuYWJsZWREYXRhc2V0cyA9IG9wdGlvbnMuY2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgKGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLCBkYXRhc2V0TmFtZTogc3RyaW5nKTogRW5hYmxlZERhdGFzZXRzID0+XG4gICAgICBlbmFibGVkRGF0YXNldHMgfFxuICAgICAgKEVuYWJsZWREYXRhc2V0cyBhcyBhbnkgYXMgeyBbbmFtZTogc3RyaW5nXTogRW5hYmxlZERhdGFzZXRzIH0pW1xuICAgICAgICBkYXRhc2V0TmFtZVxuICAgICAgXSxcbiAgICBFbmFibGVkRGF0YXNldHMuTm9uZSxcbiAgKVxuXG4gIGxldCBjaG9zZW5EYXRhc2V0cyA9IGZpbHRlckJ5TGVnaXNsYXR1cmUoZGF0YXNldHMsIG9wdGlvbnMubGVnaXNsYXR1cmUpXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgaWYgKG9wdGlvbnMucHVsbCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IHJlc2V0IC0taGFyZCBvcmlnaW4vbWFzdGVyYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBwdWxsIC0tcmViYXNlYCwge1xuICAgICAgICAgIGN3ZDogZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG4gICAgICBjb25zdCBhY3RldXJzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImFjdGV1cnNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhhY3RldXJzUmVvcmdhbml6ZWREaXIpXG4gICAgICBjb25zdCBvcmdhbmVzUmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcIm9yZ2FuZXNcIilcbiAgICAgIGZzLm1rZGlyU3luYyhvcmdhbmVzUmVvcmdhbml6ZWREaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvQWN0ZXVyc0V0T3JnYW5lcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIG9yaWdpbmFsRGF0YS5leHBvcnQuYWN0ZXVycy5hY3RldXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBhY3RldXJzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgYWN0ZXVyLnVpZFtcIiN0ZXh0XCJdICsgXCIuanNvblwiLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYWN0ZXVyLCBudWxsLCAyKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9yZ2FuZSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0Lm9yZ2FuZXMub3JnYW5lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JnYW5lc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIG9yZ2FuZS51aWQgKyBcIi5qc29uXCIsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhcbiAgICAgICAgICAgICAgICByZW9yZ2FuaXplZEpzb25GaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcmdhbmUsIG51bGwsIDIpLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBkZXBvcnRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcImRlcG9ydFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJkZXBvcnRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBkZXBvcnRTcGxpdFBhdGhbZGVwb3J0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFkZXBvcnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLmRlcG9ydFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJkZXBvcnRcIiBmaWxlOiAke2RlcG9ydE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBkZXBvcnRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBkZXBvcnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvRGVwb3J0KGRlcG9ydE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkZXBvcnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgZGVwb3J0ID0gZGVwb3J0T3JpZ2luYWwuZGVwb3J0XG4gICAgICAgICAgICAgICAgbGV0IGRlcG9ydHMgPSBkZXBvcnRzQnlBY3RldXJVaWRbZGVwb3J0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAoZGVwb3J0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBkZXBvcnRzID0gZGVwb3J0c0J5QWN0ZXVyVWlkW2RlcG9ydC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVwb3J0cy5wdXNoKGRlcG9ydClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZGVwb3J0cyBvZiBPYmplY3QudmFsdWVzKGRlcG9ydHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBkZXBvcnRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBtYW5kYXRzQnlBY3RldXJVaWQ6IHtcbiAgICAgICAgICAgICAgW2FjdGV1clVpZDogc3RyaW5nXTogeyB1aWQ6IHN0cmluZyB9W11cbiAgICAgICAgICAgIH0gPSB7fVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBmcy5leGlzdHNTeW5jKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIm1hbmRhdFwiKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0U3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICBbXCJtYW5kYXRcIl0sXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgICBtYW5kYXRTcGxpdFBhdGhbbWFuZGF0U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgICAgaWYgKCFtYW5kYXRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgIC4uLm1hbmRhdFNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgIGAgIExvYWRpbmcgXCJtYW5kYXRcIiBmaWxlOiAke21hbmRhdE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0T3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBjb25zdCBtYW5kYXRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvTWFuZGF0V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgICBtYW5kYXRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShtYW5kYXRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgICAgY29uc3QgbWFuZGF0ID0gbWFuZGF0T3JpZ2luYWwubWFuZGF0XG4gICAgICAgICAgICAgICAgbGV0IG1hbmRhdHMgPSBtYW5kYXRzQnlBY3RldXJVaWRbbWFuZGF0LmFjdGV1clJlZl1cbiAgICAgICAgICAgICAgICBpZiAobWFuZGF0cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW21hbmRhdC5hY3RldXJSZWZdID0gW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFuZGF0cy5wdXNoKG1hbmRhdClcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbWFuZGF0cyBvZiBPYmplY3QudmFsdWVzKG1hbmRhdHNCeUFjdGV1clVpZCkpIHtcbiAgICAgICAgICAgICAgICBtYW5kYXRzLnNvcnQoKGEsIGIpID0+XG4gICAgICAgICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFjdGV1clNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJhY3RldXJcIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ckZpbGVuYW1lID0gYWN0ZXVyU3BsaXRQYXRoW2FjdGV1clNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIWFjdGV1ckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hY3RldXJTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiYWN0ZXVyXCIgZmlsZTogJHthY3RldXJPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ck9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1ck9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgYWN0ZXVyT3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQWN0ZXVyc0V0T3JnYW5lc1Jhd0NvbnZlcnQudG9BY3RldXIoYWN0ZXVyT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShhY3RldXJPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1ciA9IGFjdGV1ck9yaWdpbmFsLmFjdGV1clxuICAgICAgICAgICAgICBjb25zdCBhY3RldXJVaWQgPSBhY3RldXIudWlkW1wiI3RleHRcIl1cbiAgICAgICAgICAgICAgY29uc3QgZGVwb3J0cyA9IGRlcG9ydHNCeUFjdGV1clVpZFthY3RldXJVaWRdXG4gICAgICAgICAgICAgIGlmIChkZXBvcnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYWN0ZXVyLmRlcG9ydHMsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBhY3RldXIuZGVwb3J0cyA9IHsgZGVwb3J0OiBkZXBvcnRzIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBtYW5kYXRzID0gbWFuZGF0c0J5QWN0ZXVyVWlkW2FjdGV1clVpZF1cbiAgICAgICAgICAgICAgaWYgKG1hbmRhdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChhY3RldXIubWFuZGF0cywgdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGFjdGV1ci5tYW5kYXRzID0geyBtYW5kYXQ6IG1hbmRhdHMgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgYWN0ZXVyc1Jlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGFjdGV1clVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGFjdGV1clJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGFjdGV1ciwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgW1wib3JnYW5lXCJdLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ub3JnYW5lU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcIm9yZ2FuZVwiIGZpbGU6ICR7b3JnYW5lT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmVPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBvcmdhbmVPcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IG9yZ2FuZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFjdGV1cnNFdE9yZ2FuZXNSYXdDb252ZXJ0LnRvT3JnYW5lKG9yZ2FuZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JnYW5lT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBvcmdhbmUgPSBvcmdhbmVPcmlnaW5hbC5vcmdhbmVcbiAgICAgICAgICAgICAgY29uc3Qgb3JnYW5lUmVvcmdhbml6ZWRKc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmdhbmVzUmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgICAgICAgb3JnYW5lLnVpZCArIFwiLmpzb25cIixcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIG9yZ2FuZVJlb3JnYW5pemVkSnNvbkZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG9yZ2FuZSwgbnVsbCwgMiksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBjaG9zZW5EYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgXCIuanNvblwiLFxuICAgICAgKVxuICAgICAgaWYgKGdpdEdyb3VwVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXhlY1N5bmMoYGdpdCBjbG9uZSAke2dpdEdyb3VwVXJsfS8ke2RhdGFzZXROYW1lfS5naXRgLCB7XG4gICAgICAgICAgY3dkOiBkYXRhRGlyLFxuICAgICAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmLThcIixcbiAgICAgICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwiaWdub3JlXCIsIFwicGlwZVwiXSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldFJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIGRhdGFzZXROYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpXG4gICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZzLnJlYWRkaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcikpIHtcbiAgICAgICAgaWYgKGZpbGVuYW1lWzBdID09PSBcIi5cIikge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMucmVtb3ZlU3luYyhwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBmaWxlbmFtZSkpXG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvQWdlbmRhcyhvcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmV1bmlvbiBvZiBvcmlnaW5hbERhdGEucmV1bmlvbnMucmV1bmlvbikge1xuICAgICAgICAgICAgICB3cml0ZVJldW5pb25SZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCByZXVuaW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXVuaW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIFtcInJldW5pb25cIl0sXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25GaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgcmV1bmlvblNwbGl0UGF0aFtyZXVuaW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghcmV1bmlvbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJldW5pb25PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4ucmV1bmlvblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJyZXVuaW9uXCIgZmlsZTogJHtyZXVuaW9uT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcmV1bmlvbk9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgcmV1bmlvbk9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IEFnZW5kYXNSYXdDb252ZXJ0LnRvUmV1bmlvbihyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShyZXVuaW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCByZXVuaW9uID0gcmV1bmlvbk9yaWdpbmFsLnJldW5pb25cbiAgICAgICAgICAgICAgd3JpdGVSZXVuaW9uUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudHMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBvcmlnaW5hbERhdGEudGV4dGVzRXRBbWVuZGVtZW50c1xuICAgICAgICAgICAgICAudGV4dGVsZWcpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBhbWVuZGVtZW50IG9mIHRleHRlTGVnaXNsYXRpZi5hbWVuZGVtZW50cykge1xuICAgICAgICAgICAgICAgIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnQsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudEZpbGVuYW1lID1cbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50U3BsaXRQYXRoW2FtZW5kZW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFhbWVuZGVtZW50RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgYW1lbmRlbWVudE9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5hbWVuZGVtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImFtZW5kZW1lbnRcIiBmaWxlOiAke2FtZW5kZW1lbnRPcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBhbWVuZGVtZW50T3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBhbWVuZGVtZW50T3JpZ2luYWw6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICAgID8gQW1lbmRlbWVudHNSYXdDb252ZXJ0LnRvQW1lbmRlbWVudFdyYXBwZXIoXG4gICAgICAgICAgICAgICAgICAgIGFtZW5kZW1lbnRPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGFtZW5kZW1lbnRPcmlnaW5hbEpzb24pXG4gICAgICAgICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBhbWVuZGVtZW50T3JpZ2luYWwuYW1lbmRlbWVudFxuICAgICAgICAgICAgICB3cml0ZUFtZW5kZW1lbnRSZW9yZ2FuaXplZEpzb24oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBhbWVuZGVtZW50KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGNob3NlbkRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRvY3VtZW50c0RpciA9IHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIFwiZG9jdW1lbnRzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9jdW1lbnRzRGlyKVxuICAgICAgY29uc3QgZG9zc2llcnNEaXIgPSBwYXRoLmpvaW4oZGF0YXNldFJlb3JnYW5pemVkRGlyLCBcImRvc3NpZXJzXCIpXG4gICAgICBmcy5ta2RpclN5bmMoZG9zc2llcnNEaXIpXG5cbiAgICAgIHN3aXRjaCAoZGF0YXNldC5zdHJ1Y3R1cmUpIHtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNpbmdsZUZpbGU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbERhdGE6IGFueSA9IHZhbGlkYXRlUmF3RGF0YVxuICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhcbiAgICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbixcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIDogSlNPTi5wYXJzZShvcmlnaW5hbEpzb24pXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9jdW1lbnQgb2Ygb3JpZ2luYWxEYXRhLmV4cG9ydC50ZXh0ZXNMZWdpc2xhdGlmc1xuICAgICAgICAgICAgICAuZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihkb2N1bWVudHNEaXIsIGRvY3VtZW50KVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHsgZG9zc2llclBhcmxlbWVudGFpcmUgfSBvZiBvcmlnaW5hbERhdGEuZXhwb3J0XG4gICAgICAgICAgICAgIC5kb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXIpIHtcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgICAge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb2N1bWVudFwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9jdW1lbnRTcGxpdFBhdGhbZG9jdW1lbnRTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudEZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50T3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmRvY3VtZW50U3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImRvY3VtZW50XCIgZmlsZTogJHtkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBkb2N1bWVudE9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBEb3NzaWVyc0xlZ2lzbGF0aWZzUmF3Q29udmVydC50b0RvY3VtZW50KGRvY3VtZW50T3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb2N1bWVudE9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBkb2N1bWVudE9yaWdpbmFsLmRvY3VtZW50XG4gICAgICAgICAgICAgIHdyaXRlRG9jdW1lbnRSZW9yZ2FuaXplZEpzb24oZG9jdW1lbnRzRGlyLCBkb2N1bWVudClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICBbXCJkb3NzaWVyUGFybGVtZW50YWlyZVwiXSxcbiAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVGaWxlbmFtZSA9XG4gICAgICAgICAgICAgICAgZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGhbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZVNwbGl0UGF0aC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICBpZiAoIWRvc3NpZXJQYXJsZW1lbnRhaXJlRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVPcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgLi4uZG9zc2llclBhcmxlbWVudGFpcmVTcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwiZG9zc2llclBhcmxlbWVudGFpcmVcIiBmaWxlOiAke2Rvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aH3igKZgLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsOiBhbnkgPSB2YWxpZGF0ZVJhd0RhdGFcbiAgICAgICAgICAgICAgICA/IERvc3NpZXJzTGVnaXNsYXRpZnNSYXdDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUoXG4gICAgICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWxKc29uLFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShkb3NzaWVyUGFybGVtZW50YWlyZU9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmUgPVxuICAgICAgICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlT3JpZ2luYWwuZG9zc2llclBhcmxlbWVudGFpcmVcbiAgICAgICAgICAgICAgd3JpdGVEb3NzaWVyUGFybGVtZW50YWlyZVJlb3JnYW5pemVkSnNvbihcbiAgICAgICAgICAgICAgICBkb3NzaWVyc0RpcixcbiAgICAgICAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5jb21taXQpIHtcbiAgICAgICAgY29uc3QgZXJyb3JDb2RlID0gZ2l0LmNvbW1pdEFuZFB1c2goXG4gICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgIFwiTm91dmVsbGUgbW9pc3NvblwiLFxuICAgICAgICAgIG9wdGlvbnMucmVtb3RlLFxuICAgICAgICApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDEwICYmIGVycm9yQ29kZSAhPT0gMTApIHx8XG4gICAgICAgICAgKGV4aXRDb2RlID09PSAwICYmIGVycm9yQ29kZSAhPT0gMCAmJiBlcnJvckNvZGUgIT09IDEwKVxuICAgICAgICApIHtcbiAgICAgICAgICBleGl0Q29kZSA9IGVycm9yQ29kZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgY2hvc2VuRGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZSxcbiAgICAgIClcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coYFJlb3JnYW5pemluZyAke29yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGh9YClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGF0YXNldE5hbWUgPSBwYXRoLmJhc2VuYW1lKFxuICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICBcIi5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZ2l0R3JvdXBVcmwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBleGVjU3luYyhgZ2l0IGNsb25lICR7Z2l0R3JvdXBVcmx9LyR7ZGF0YXNldE5hbWV9LmdpdGAsIHtcbiAgICAgICAgICBjd2Q6IGRhdGFEaXIsXG4gICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGYtOFwiLFxuICAgICAgICAgIHN0ZGlvOiBbXCJpZ25vcmVcIiwgXCJpZ25vcmVcIiwgXCJwaXBlXCJdLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0UmVvcmdhbml6ZWREaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldE5hbWUpXG4gICAgICBmcy5lbnN1cmVEaXJTeW5jKGRhdGFzZXRSZW9yZ2FuaXplZERpcilcbiAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZnMucmVhZGRpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKSkge1xuICAgICAgICBpZiAoZmlsZW5hbWVbMF0gPT09IFwiLlwiKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy5yZW1vdmVTeW5jKHBhdGguam9pbihkYXRhc2V0UmVvcmdhbml6ZWREaXIsIGZpbGVuYW1lKSlcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChkYXRhc2V0LnN0cnVjdHVyZSkge1xuICAgICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2luZ2xlRmlsZTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGF0YTogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgID8gU2NydXRpbnNSYXdDb252ZXJ0LnRvU2NydXRpbnMob3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICA6IEpTT04ucGFyc2Uob3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygb3JpZ2luYWxEYXRhLnNjcnV0aW5zLnNjcnV0aW4pIHtcbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSBEYXRhc2V0U3RydWN0dXJlLlNlZ21lbnRlZEZpbGVzOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc2NydXRpblNwbGl0UGF0aCBvZiB3YWxrRGlyKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHNjcnV0aW5TcGxpdFBhdGhbc2NydXRpblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICBpZiAoIXNjcnV0aW5GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgICAgICAgYCAgUmVvcmdhbml6aW5nIFwic2NydXRpblwiIGZpbGU6ICR7c2NydXRpbk9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBTY3J1dGluc1Jhd0NvbnZlcnQudG9TY3J1dGluV3JhcHBlcihzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShzY3J1dGluT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgICAgd3JpdGVTY3J1dGluUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgc2NydXRpbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29tbWl0KSB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IGdpdC5jb21taXRBbmRQdXNoKFxuICAgICAgICAgIGRhdGFzZXRSZW9yZ2FuaXplZERpcixcbiAgICAgICAgICBcIk5vdXZlbGxlIG1vaXNzb25cIixcbiAgICAgICAgICBvcHRpb25zLnJlbW90ZSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV4aXRDb2RlID09PSAxMCAmJiBlcnJvckNvZGUgIT09IDEwKSB8fFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMCAmJiBlcnJvckNvZGUgIT09IDAgJiYgZXJyb3JDb2RlICE9PSAxMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXhpdENvZGUgPSBlcnJvckNvZGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLnF1ZXN0aW9ucykge1xuICAgICAgY29uc3Qgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLFxuICAgICAgKVxuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVvcmdhbml6aW5nICR7b3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aH1gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhc2V0TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgIFwiLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uU3BsaXRQYXRoW3F1ZXN0aW9uU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICAgIGlmICghcXVlc3Rpb25GaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbk9yaWdpbmFsRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxKc29uRGlyZWN0b3J5T3JGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAuLi5xdWVzdGlvblNwbGl0UGF0aCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICBgICBSZW9yZ2FuaXppbmcgXCJxdWVzdGlvblwiIGZpbGU6ICR7cXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRofeKApmAsXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25PcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBRdWVzdGlvbnNSYXdDb252ZXJ0LnRvUXVlc3Rpb25XcmFwcGVyKHF1ZXN0aW9uT3JpZ2luYWxKc29uKVxuICAgICAgICAgICAgICAgIDogSlNPTi5wYXJzZShxdWVzdGlvbk9yaWdpbmFsSnNvbilcbiAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb24gPSBxdWVzdGlvbk9yaWdpbmFsLnF1ZXN0aW9uXG4gICAgICAgICAgICAgIHdyaXRlUXVlc3Rpb25zUmVvcmdhbml6ZWRKc29uKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgcXVlc3Rpb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmNvbXB0ZXNSZW5kdXNTZWFuY2VzKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUsXG4gICAgICApXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZW9yZ2FuaXppbmcgJHtvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRofWApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXROYW1lID0gcGF0aC5iYXNlbmFtZShvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLCBcIi54bWxcIilcbiAgICAgIGlmIChnaXRHcm91cFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGV4ZWNTeW5jKGBnaXQgY2xvbmUgJHtnaXRHcm91cFVybH0vJHtkYXRhc2V0TmFtZX0uZ2l0YCwge1xuICAgICAgICAgIGN3ZDogZGF0YURpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGFzZXRSZW9yZ2FuaXplZERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0TmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmMoZGF0YXNldFJlb3JnYW5pemVkRGlyKVxuICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmcy5yZWFkZGlyU3luYyhkYXRhc2V0UmVvcmdhbml6ZWREaXIpKSB7XG4gICAgICAgIGlmIChmaWxlbmFtZVswXSA9PT0gXCIuXCIpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLnJlbW92ZVN5bmMocGF0aC5qb2luKGRhdGFzZXRSZW9yZ2FuaXplZERpciwgZmlsZW5hbWUpKVxuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICAgIGNhc2UgRGF0YXNldFN0cnVjdHVyZS5TZWdtZW50ZWRGaWxlczpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoIG9mIHdhbGtEaXIoXG4gICAgICAgICAgICAgIG9yaWdpbmFsSnNvbkRpcmVjdG9yeU9yRmlsZVBhdGgsXG4gICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlRmlsZW5hbWUgPVxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoW1xuICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VTcGxpdFBhdGgubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgaWYgKCFjb21wdGVSZW5kdVNlYW5jZUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXJlY3RvcnlPckZpbGVQYXRoLFxuICAgICAgICAgICAgICAgIC4uLmNvbXB0ZVJlbmR1U2VhbmNlU3BsaXRQYXRoLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgIGAgIFJlb3JnYW5pemluZyBcImNvbXB0ZVJlbmR1U2VhbmNlXCIgZmlsZTogJHtjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICAgICAgICBjb21wdGVSZW5kdVNlYW5jZU9yaWdpbmFsRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgY29uc3QgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbDogYW55ID0gdmFsaWRhdGVSYXdEYXRhXG4gICAgICAgICAgICAgICAgPyBDb21wdGVzUmVuZHVzUmF3Q29udmVydC50b0NvbXB0ZVJlbmR1V3JhcHBlcihcbiAgICAgICAgICAgICAgICAgICAgY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbEpzb24sXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgOiBKU09OLnBhcnNlKGNvbXB0ZVJlbmR1U2VhbmNlT3JpZ2luYWxKc29uKVxuXG4gICAgICAgICAgICAgIGNvbnN0IGNvbXB0ZVJlbmR1U2VhbmNlID0gY29tcHRlUmVuZHVTZWFuY2VPcmlnaW5hbC5jb21wdGVSZW5kdVxuICAgICAgICAgICAgICB3cml0ZUNvbXB0ZXNSZW5kdXNSZW9yZ2FuaXplZEpzb24oXG4gICAgICAgICAgICAgICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgICAgICAgICAgICAgIGNvbXB0ZVJlbmR1U2VhbmNlLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmNvbW1pdCkge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSBnaXQuY29tbWl0QW5kUHVzaChcbiAgICAgICAgICBkYXRhc2V0UmVvcmdhbml6ZWREaXIsXG4gICAgICAgICAgXCJOb3V2ZWxsZSBtb2lzc29uXCIsXG4gICAgICAgICAgb3B0aW9ucy5yZW1vdGUsXG4gICAgICAgIClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChleGl0Q29kZSA9PT0gMTAgJiYgZXJyb3JDb2RlICE9PSAxMCkgfHxcbiAgICAgICAgICAoZXhpdENvZGUgPT09IDAgJiYgZXJyb3JDb2RlICE9PSAwICYmIGVycm9yQ29kZSAhPT0gMTApXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXRDb2RlID0gZXJyb3JDb2RlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZXN0b3JlIHN0YW5kYXJkIGNvbnZlcnNpb24gb2YgZGF0ZXMgdG8gSlNPTi5cbiAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZXhpc3RpbmdEYXRlVG9Kc29uXG5cbiAgcmV0dXJuIGV4aXRDb2RlXG59XG5cbmZ1bmN0aW9uIHdyaXRlQW1lbmRlbWVudFJlb3JnYW5pemVkSnNvbihcbiAgZGF0YXNldFJlb3JnYW5pemVkRGlyOiBzdHJpbmcsXG4gIGFtZW5kZW1lbnQ6IHtcbiAgICB1aWQ6IHN0cmluZ1xuICAgIHRleHRlTGVnaXNsYXRpZlJlZjogc3RyaW5nXG4gIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgdWlkVGV4dGVMZWdpc2xhdGlmID0gYW1lbmRlbWVudC50ZXh0ZUxlZ2lzbGF0aWZSZWZcbiAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHVpZFRleHRlTGVnaXNsYXRpZiwgdW5kZWZpbmVkKVxuICBjb25zdCB0ZXh0ZUxlZ2lzbGF0aWZEaXIgPSBwYXRoLmpvaW4oXG4gICAgZGF0YXNldFJlb3JnYW5pemVkRGlyLFxuICAgIHVpZFRleHRlTGVnaXNsYXRpZixcbiAgKVxuICBmcy5lbnN1cmVEaXJTeW5jKHRleHRlTGVnaXNsYXRpZkRpcilcbiAgY29uc3QgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGggPSBwYXRoLmpvaW4oXG4gICAgdGV4dGVMZWdpc2xhdGlmRGlyLFxuICAgIGFtZW5kZW1lbnQudWlkICsgXCIuanNvblwiLFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgcmVvcmdhbml6ZWRKc29uRmlsZVBhdGgsXG4gICAgSlNPTi5zdHJpbmdpZnkoYW1lbmRlbWVudCwgbnVsbCwgMiksXG4gICAge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0sXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEb2N1bWVudFJlb3JnYW5pemVkSnNvbihcbiAgZG9jdW1lbnRzRGlyOiBzdHJpbmcsXG4gIGRvY3VtZW50OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgZG9jdW1lbnQudWlkKVxuICBmcy53cml0ZUZpbGVTeW5jKGAke2Jhc2VuYW1lfS5qc29uYCwgSlNPTi5zdHJpbmdpZnkoZG9jdW1lbnQsIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvc3NpZXJQYXJsZW1lbnRhaXJlUmVvcmdhbml6ZWRKc29uKFxuICBkb3NzaWVyc0Rpcjogc3RyaW5nLFxuICBkb3NzaWVyUGFybGVtZW50YWlyZTogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21Eb3NzaWVyUGFybGVtZW50YWlyZVVpZChcbiAgICBkb3NzaWVyc0RpcixcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZS51aWQsXG4gIClcbiAgZnMud3JpdGVGaWxlU3luYyhcbiAgICBgJHtiYXNlbmFtZX0uanNvbmAsXG4gICAgSlNPTi5zdHJpbmdpZnkoZG9zc2llclBhcmxlbWVudGFpcmUsIG51bGwsIDIpLFxuICAgIHtcbiAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICB9LFxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlUmV1bmlvblJlb3JnYW5pemVkSnNvbihcbiAgcmV1bmlvbnNEaXI6IHN0cmluZyxcbiAgcmV1bmlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IGJhc2VuYW1lID0gcGF0aEZyb21SZXVuaW9uVWlkKHJldW5pb25zRGlyLCByZXVuaW9uLnVpZClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHJldW5pb24sIG51bGwsIDIpLCB7XG4gICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICB9KVxufVxuXG5mdW5jdGlvbiB3cml0ZVNjcnV0aW5SZW9yZ2FuaXplZEpzb24oXG4gIHNjcnV0aW5zRGlyOiBzdHJpbmcsXG4gIHNjcnV0aW46IHsgdWlkOiBzdHJpbmcgfSxcbik6IHZvaWQge1xuICBjb25zdCBiYXNlbmFtZSA9IHBhdGhGcm9tU2NydXRpblVpZChzY3J1dGluc0Rpciwgc2NydXRpbi51aWQpXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShzY3J1dGluLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVRdWVzdGlvbnNSZW9yZ2FuaXplZEpzb24oXG4gIHF1ZXN0aW9uc0Rpcjogc3RyaW5nLFxuICBxdWVzdGlvbjogeyB1aWQ6IHN0cmluZyB9LFxuKTogdm9pZCB7XG4gIGNvbnN0IHF1ZXN0aW9uVWlkUmVnZXg6IFJlZ0V4cCA9IC9eUUFOKFJcXGQrKShMXFxkKylRKEV8R3xPU0QpKFxcZCspJC9cbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVVpZChxdWVzdGlvbnNEaXIsIHF1ZXN0aW9uLnVpZCwgcXVlc3Rpb25VaWRSZWdleClcbiAgZnMud3JpdGVGaWxlU3luYyhgJHtiYXNlbmFtZX0uanNvbmAsIEpTT04uc3RyaW5naWZ5KHF1ZXN0aW9uLCBudWxsLCAyKSwge1xuICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgfSlcbn1cblxuZnVuY3Rpb24gd3JpdGVDb21wdGVzUmVuZHVzUmVvcmdhbml6ZWRKc29uKFxuICBjb21wdGVzUmVuZHVzRGlyOiBzdHJpbmcsXG4gIGNvbXB0ZVJlbmR1OiB7IHVpZDogc3RyaW5nIH0sXG4pOiB2b2lkIHtcbiAgY29uc3QgY29tcHRlUmVuZHVVaWRSZWdleDogUmVnRXhwID1cbiAgICAvXkNSU0FOKFJcXGQrKShMXFxkKykoU1xcZCspKE98RSkoXFxkKykoTlxcZCspJC9cbiAgY29uc3QgYmFzZW5hbWUgPSBwYXRoRnJvbVVpZChcbiAgICBjb21wdGVzUmVuZHVzRGlyLFxuICAgIGNvbXB0ZVJlbmR1LnVpZCxcbiAgICBjb21wdGVSZW5kdVVpZFJlZ2V4LFxuICApXG4gIGZzLndyaXRlRmlsZVN5bmMoYCR7YmFzZW5hbWV9Lmpzb25gLCBKU09OLnN0cmluZ2lmeShjb21wdGVSZW5kdSwgbnVsbCwgMiksIHtcbiAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gIH0pXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuaWYgKHByb2Nlc3MuYXJndlsxXS5lbmRzV2l0aChcInJlb3JnYW5pemVfZGF0YS50c1wiKSkge1xuICBjb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuICBwcm9jZXNzLmV4aXQocmVvcmdhbml6ZURhdGEob3B0aW9ucykpXG59XG4iXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLE1BQU0sTUFBTSxRQUFRO0FBQzNCLFNBQVNDLFFBQVEsUUFBUSxlQUFlO0FBQ3hDLE9BQU9DLGVBQWUsTUFBTSxtQkFBbUI7QUFDL0MsT0FBT0MsRUFBRSxNQUFNLFVBQVU7QUFDekIsT0FBT0MsSUFBSSxNQUFNLE1BQU07QUFBQSxTQUdyQkMsUUFBUSxFQUNSQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsbUJBQW1CO0FBQUEsU0FFWkMsa0JBQWtCLEVBQUVDLGlCQUFpQjtBQUFBLE9BQ3ZDLEtBQUtDLEdBQUc7QUFBQSxTQUNOQyxPQUFPO0FBQUEsU0FFZEMsbUJBQW1CLEVBQ25CQywrQkFBK0IsRUFDL0JDLGtCQUFrQixFQUNsQkMsa0JBQWtCLEVBQ2xCQyxXQUFXO0FBQUEsU0FFSkMsT0FBTyxJQUFJQywwQkFBMEI7QUFBQSxTQUNyQ0QsT0FBTyxJQUFJRSxpQkFBaUI7QUFBQSxTQUM1QkYsT0FBTyxJQUFJRyxxQkFBcUI7QUFBQSxTQUNoQ0gsT0FBTyxJQUFJSSw2QkFBNkI7QUFBQSxTQUN4Q0osT0FBTyxJQUFJSyxrQkFBa0I7QUFBQSxTQUM3QkwsT0FBTyxJQUFJTSxtQkFBbUI7QUFBQSxTQUM5Qk4sT0FBTyxJQUFJTyx1QkFBdUI7QUFFM0MsTUFBTUMsa0JBQWtCLEdBQUcsQ0FDekI7RUFDRUMsS0FBSyxFQUFFLEdBQUc7RUFDVkMsSUFBSSxFQUFFLCtEQUErRDtFQUNyRUMsSUFBSSxFQUFFLE9BQU87RUFDYkMsSUFBSSxFQUFFQztBQUNSLENBQUMsRUFDRDtFQUNFSixLQUFLLEVBQUUsR0FBRztF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
|