@oflow-ai/oflow-cli 0.1.0 → 0.1.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.
@@ -87,6 +87,10 @@ async function executeSlashCommand(input, context) {
87
87
  return reviewCode(context);
88
88
  case '/thinking':
89
89
  return toggleThinking(context);
90
+ case '/summary':
91
+ return true; // Handled in cli.ts
92
+ case '/update':
93
+ return true; // Handled in cli.ts
90
94
  default:
91
95
  console.log(chalk_1.default.yellow(`Unknown command: ${command}`));
92
96
  console.log(chalk_1.default.gray('Type /help for available commands.'));
@@ -104,6 +108,8 @@ function showHelp() {
104
108
  { cmd: '/init', desc: 'Analyze and initialize current project' },
105
109
  { cmd: '/model [name]', desc: 'Show or set the current model' },
106
110
  { cmd: '/thinking', desc: 'Toggle thinking process display (ON/OFF)' },
111
+ { cmd: '/summary', desc: 'Show task summary for current session' },
112
+ { cmd: '/update', desc: 'Update oflow CLI to latest version' },
107
113
  { cmd: '/config', desc: 'Show current configuration' },
108
114
  { cmd: '/reset', desc: 'Reset configuration to defaults' },
109
115
  { cmd: '/history', desc: 'Show conversation history' },
@@ -464,4 +470,4 @@ function toggleThinking(context) {
464
470
  }
465
471
  return true;
466
472
  }
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSx3Q0FFQztBQUVELGtEQXFFQztBQXJGRCxrREFBMEI7QUFDMUIseUNBQXFIO0FBRXJILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFRN0IsU0FBZ0IsY0FBYyxDQUFDLEtBQWE7SUFDMUMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLEtBQWEsRUFDYixPQUF1QjtJQUV2QixNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpDLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDOUIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxRQUFRLEVBQUUsQ0FBQztRQUVwQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxJQUFJO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFFZixLQUFLLFFBQVE7WUFDWCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLEtBQUssT0FBTztZQUNWLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLEtBQUssUUFBUTtZQUNYLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1QyxLQUFLLFNBQVM7WUFDWixPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixLQUFLLFFBQVE7WUFDWCxPQUFPLFdBQVcsQ0FBQyxP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LENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uLCBDb25maWdNYW5hZ2VyLCBBZ2VudEZhY3RvcnksIEFHRU5UX0RFRklOSVRJT05TLCBjcmVhdGVTYW5kYm94RXhlY3V0b3IgfSBmcm9tICdAb2Zsb3ctYWkvY29yZSc7XG5pbXBvcnQgKiBhcyByZWFkbGluZSBmcm9tICdyZWFkbGluZSc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRDb250ZXh0IHtcbiAgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb247XG4gIHJsOiByZWFkbGluZS5JbnRlcmZhY2U7XG4gIGNvbmZpZ01hbmFnZXI6IENvbmZpZ01hbmFnZXI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NsYXNoQ29tbWFuZChpbnB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBpbnB1dC5zdGFydHNXaXRoKCcvJyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjdXRlU2xhc2hDb21tYW5kKFxuICBpbnB1dDogc3RyaW5nLFxuICBjb250ZXh0OiBDb21tYW5kQ29udGV4dFxuKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5hcmdzXSA9IGlucHV0LnNwbGl0KCcgJyk7XG4gIGNvbnN0IGFyZ1N0cmluZyA9IGFyZ3Muam9pbignICcpO1xuXG4gIHN3aXRjaCAoY29tbWFuZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnL2hlbHAnOlxuICAgICAgcmV0dXJuIHNob3dIZWxwKCk7XG4gICAgXG4gICAgY2FzZSAnL2V4aXQnOlxuICAgIGNhc2UgJy9xdWl0JzpcbiAgICBjYXNlICcvcSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgY2FzZSAnL2NsZWFyJzpcbiAgICAgIHJldHVybiBjbGVhckNvbnZlcnNhdGlvbihjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvaW5pdCc6XG4gICAgICByZXR1cm4gaW5pdFByb2plY3QoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL21vZGVsJzpcbiAgICAgIHJldHVybiBzaG93T3JTZXRNb2RlbChhcmdTdHJpbmcsIGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy9jb25maWcnOlxuICAgICAgcmV0dXJuIHNob3dDb25maWcoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL3Jlc2V0JzpcbiAgICAgIHJldHVybiByZXNldENvbmZpZyhjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvaGlzdG9yeSc6XG4gICAgICByZXR1cm4gc2hvd0hpc3RvcnkoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL3Rvb2xzJzpcbiAgICAgIHJldHVybiBzaG93VG9vbHMoKTtcbiAgICBcbiAgICBjYXNlICcvdmVyc2lvbic6XG4gICAgICByZXR1cm4gc2hvd1ZlcnNpb24oKTtcbiAgICBcbiAgICBjYXNlICcvYWdlbnRzJzpcbiAgICAgIHJldHVybiBzaG93QWdlbnRzKCk7XG4gICAgXG4gICAgY2FzZSAnL3NhbmRib3gnOlxuICAgICAgcmV0dXJuIHNob3dTYW5kYm94SW5mbygpO1xuICAgIFxuICAgIGNhc2UgJy9za2lsbHMnOlxuICAgICAgcmV0dXJuIHNob3dTa2lsbHMoYXJnU3RyaW5nKTtcbiAgICBcbiAgICBjYXNlICcvbWNwJzpcbiAgICAgIHJldHVybiBzaG93TUNQSW5mbygpO1xuICAgIFxuICAgIGNhc2UgJy9tZW1vcnknOlxuICAgICAgcmV0dXJuIHNob3dNZW1vcnkoKTtcbiAgICBcbiAgICBjYXNlICcvY29tbWl0JzpcbiAgICAgIHJldHVybiBnZW5lcmF0ZUNvbW1pdChjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvcmV2aWV3JzpcbiAgICAgIHJldHVybiByZXZpZXdDb2RlKGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy90aGlua2luZyc6XG4gICAgICByZXR1cm4gdG9nZ2xlVGhpbmtpbmcoY29udGV4dCk7XG4gICAgXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCkpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVHlwZSAvaGVscCBmb3IgYXZhaWxhYmxlIGNvbW1hbmRzLicpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dIZWxwKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0F2YWlsYWJsZSBDb21tYW5kczonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgIHsgY21kOiAnL2hlbHAnLCBkZXNjOiAnU2hvdyB0aGlzIGhlbHAgbWVzc2FnZScgfSxcbiAgICB7IGNtZDogJy9leGl0LCAvcXVpdCwgL3EnLCBkZXNjOiAnRXhpdCBvZmxvdyBDTEknIH0sXG4gICAgeyBjbWQ6ICcvY2xlYXInLCBkZXNjOiAnQ2xlYXIgY29udmVyc2F0aW9uIGhpc3RvcnknIH0sXG4gICAgeyBjbWQ6ICcvaW5pdCcsIGRlc2M6ICdBbmFseXplIGFuZCBpbml0aWFsaXplIGN1cnJlbnQgcHJvamVjdCcgfSxcbiAgICB7IGNtZDogJy9tb2RlbCBbbmFtZV0nLCBkZXNjOiAnU2hvdyBvciBzZXQgdGhlIGN1cnJlbnQgbW9kZWwnIH0sXG4gICAgeyBjbWQ6ICcvdGhpbmtpbmcnLCBkZXNjOiAnVG9nZ2xlIHRoaW5raW5nIHByb2Nlc3MgZGlzcGxheSAoT04vT0ZGKScgfSxcbiAgICB7IGNtZDogJy9jb25maWcnLCBkZXNjOiAnU2hvdyBjdXJyZW50IGNvbmZpZ3VyYXRpb24nIH0sXG4gICAgeyBjbWQ6ICcvcmVzZXQnLCBkZXNjOiAnUmVzZXQgY29uZmlndXJhdGlvbiB0byBkZWZhdWx0cycgfSxcbiAgICB7IGNtZDogJy9oaXN0b3J5JywgZGVzYzogJ1Nob3cgY29udmVyc2F0aW9uIGhpc3RvcnknIH0sXG4gICAgeyBjbWQ6ICcvdG9vbHMnLCBkZXNjOiAnTGlzdCBhdmFpbGFibGUgdG9vbHMnIH0sXG4gICAgeyBjbWQ6ICcvYWdlbnRzJywgZGVzYzogJ0xpc3QgYXZhaWxhYmxlIHN1Yi1hZ2VudHMnIH0sXG4gICAgeyBjbWQ6ICcvc2FuZGJveCcsIGRlc2M6ICdTaG93IHNhbmRib3ggc3RhdHVzJyB9LFxuICAgIHsgY21kOiAnL3NraWxscyBbbGlzdHxyZWZyZXNoXScsIGRlc2M6ICdNYW5hZ2Ugc2tpbGxzJyB9LFxuICAgIHsgY21kOiAnL21jcCcsIGRlc2M6ICdTaG93IE1DUCBzZXJ2ZXIgc3RhdHVzJyB9LFxuICAgIHsgY21kOiAnL21lbW9yeScsIGRlc2M6ICdTaG93IHNhdmVkIG1lbW9yaWVzJyB9LFxuICAgIHsgY21kOiAnL2NvbW1pdCcsIGRlc2M6ICdHZW5lcmF0ZSBjb21taXQgbWVzc2FnZScgfSxcbiAgICB7IGNtZDogJy9yZXZpZXcnLCBkZXNjOiAnUmV2aWV3IHJlY2VudCBjb2RlIGNoYW5nZXMnIH0sXG4gICAgeyBjbWQ6ICcvdmVyc2lvbicsIGRlc2M6ICdTaG93IHZlcnNpb24gaW5mb3JtYXRpb24nIH1cbiAgXTtcblxuICBjb21tYW5kcy5mb3JFYWNoKCh7IGNtZCwgZGVzYyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKGNtZC5wYWRFbmQoMjApKX0gJHtjaGFsay5ncmF5KGRlc2MpfWApO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1NwZWNpYWwgU3ludGF4OicpKTtcbiAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKCchY29tbWFuZCcpfSAgICAke2NoYWxrLmdyYXkoJ0V4ZWN1dGUgYSBzaGVsbCBjb21tYW5kJyl9YCk7XG4gIGNvbnNvbGUubG9nKGAgICR7Y2hhbGsuY3lhbignQGZpbGVwYXRoJyl9ICAgJHtjaGFsay5ncmF5KCdSZWZlcmVuY2UgYSBmaWxlIGluIHlvdXIgbWVzc2FnZScpfWApO1xuICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4oJyRhZ2VudCcpfSAgICAgICR7Y2hhbGsuZ3JheSgnQ2FsbCBhIHN1Yi1hZ2VudCAoZS5nLiwgJGV4cGxvcmUtYWdlbnQgXCJ0YXNrXCIpJyl9YCk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjbGVhckNvbnZlcnNhdGlvbihjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb250ZXh0LmNvbnZlcnNhdGlvbi5jbGVhcigpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIENvbnZlcnNhdGlvbiBoaXN0b3J5IGNsZWFyZWQuJykpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5pdFByb2plY3QoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qgd29ya2luZ0RpciA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IHByb2plY3ROYW1lID0gcGF0aC5iYXNlbmFtZSh3b3JraW5nRGlyKTtcbiAgXG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFxcbkFuYWx5emluZyBwcm9qZWN0OiAke3Byb2plY3ROYW1lfVxcbmApKTtcbiAgXG4gIC8vIENoZWNrIGZvciBjb21tb24gcHJvamVjdCBmaWxlc1xuICBjb25zdCBjaGVja3MgPSBbXG4gICAgeyBmaWxlOiAncGFja2FnZS5qc29uJywgdHlwZTogJ05vZGUuanMnIH0sXG4gICAgeyBmaWxlOiAndHNjb25maWcuanNvbicsIHR5cGU6ICdUeXBlU2NyaXB0JyB9LFxuICAgIHsgZmlsZTogJ3B5cHJvamVjdC50b21sJywgdHlwZTogJ1B5dGhvbiAobW9kZXJuKScgfSxcbiAgICB7IGZpbGU6ICdyZXF1aXJlbWVudHMudHh0JywgdHlwZTogJ1B5dGhvbicgfSxcbiAgICB7IGZpbGU6ICdDYXJnby50b21sJywgdHlwZTogJ1J1c3QnIH0sXG4gICAgeyBmaWxlOiAnZ28ubW9kJywgdHlwZTogJ0dvJyB9LFxuICAgIHsgZmlsZTogJ3BvbS54bWwnLCB0eXBlOiAnSmF2YSAoTWF2ZW4pJyB9LFxuICAgIHsgZmlsZTogJ2J1aWxkLmdyYWRsZScsIHR5cGU6ICdKYXZhIChHcmFkbGUpJyB9LFxuICAgIHsgZmlsZTogJy5naXQnLCB0eXBlOiAnR2l0IHJlcG9zaXRvcnknIH1cbiAgXTtcblxuICBjb25zdCBkZXRlY3RlZDogc3RyaW5nW10gPSBbXTtcbiAgXG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4od29ya2luZ0RpciwgY2hlY2suZmlsZSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZmlsZVBhdGgpKSB7XG4gICAgICBkZXRlY3RlZC5wdXNoKGNoZWNrLnR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZXRlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnRGV0ZWN0ZWQgcHJvamVjdCB0eXBlczonKSk7XG4gICAgZGV0ZWN0ZWQuZm9yRWFjaCh0ID0+IGNvbnNvbGUubG9nKGAgIOKAoiAke3R9YCkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm8gcmVjb2duaXplZCBwcm9qZWN0IHR5cGUgZGV0ZWN0ZWQuJykpO1xuICB9XG5cbiAgLy8gTGlzdCB0b3AtbGV2ZWwgZmlsZXMgYW5kIGRpcmVjdG9yaWVzXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcblByb2plY3Qgc3RydWN0dXJlOicpKTtcbiAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKHdvcmtpbmdEaXIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcbiAgZW50cmllcy5zbGljZSgwLCAyMCkuZm9yRWFjaChlbnRyeSA9PiB7XG4gICAgY29uc3QgcHJlZml4ID0gZW50cnkuaXNEaXJlY3RvcnkoKSA/ICfwn5OBICcgOiAn8J+ThCAnO1xuICAgIGNvbnNvbGUubG9nKGAgICR7cHJlZml4fSR7ZW50cnkubmFtZX1gKTtcbiAgfSk7XG5cbiAgaWYgKGVudHJpZXMubGVuZ3RoID4gMjApIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGAgIC4uLiBhbmQgJHtlbnRyaWVzLmxlbmd0aCAtIDIwfSBtb3JlIGl0ZW1zYCkpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJycpO1xuXG4gIC8vIEFkZCBpbml0IGNvbnRleHQgdG8gY29udmVyc2F0aW9uXG4gIGNvbnN0IGluaXRNZXNzYWdlID0gYFBsZWFzZSBhbmFseXplIHRoZSBjdXJyZW50IHByb2plY3Qgc3RydWN0dXJlIGFuZCBwcm92aWRlOlxuMS4gQSBicmllZiBvdmVydmlldyBvZiB0aGUgcHJvamVjdCB0eXBlIGFuZCBwdXJwb3NlXG4yLiBLZXkgZmlsZXMgYW5kIHRoZWlyIHJvbGVzXG4zLiBTdWdnZXN0aW9ucyBmb3IgaW1wcm92ZW1lbnRzIG9yIGJlc3QgcHJhY3RpY2VzXG5cbldvcmtpbmcgZGlyZWN0b3J5OiAke3dvcmtpbmdEaXJ9XG5EZXRlY3RlZCB0eXBlczogJHtkZXRlY3RlZC5qb2luKCcsICcpfWA7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBjb250ZXh0LmNvbnZlcnNhdGlvbi5zZW5kTWVzc2FnZShpbml0TWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdFcnJvciBkdXJpbmcgYW5hbHlzaXMuJykpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dPclNldE1vZGVsKG1vZGVsTmFtZTogc3RyaW5nLCBjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBpZiAobW9kZWxOYW1lKSB7XG4gICAgY29udGV4dC5jb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChtb2RlbE5hbWUpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgTW9kZWwgc2V0IHRvOiAke21vZGVsTmFtZX1gKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY3VycmVudE1vZGVsID0gY29udGV4dC5jb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYEN1cnJlbnQgbW9kZWw6ICR7Y3VycmVudE1vZGVsfWApKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgY29uc29sZS5sb2coJ0F2YWlsYWJsZSBtb2RlbHM6Jyk7XG4gICAgY29uc3QgbW9kZWxzID0gWydncHQtNG8nLCAnZ3B0LTRvLW1pbmknLCAnZ3B0LTQtdHVyYm8nLCAnZ3B0LTMuNS10dXJibycsICdvMS1wcmV2aWV3JywgJ28xLW1pbmknXTtcbiAgICBtb2RlbHMuZm9yRWFjaChtID0+IHtcbiAgICAgIGlmIChtID09PSBjdXJyZW50TW9kZWwpIHtcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYCAgKiAke219IChjdXJyZW50KWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHttfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93Q29uZmlnKGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbmZpZyA9IGNvbnRleHQuY29uZmlnTWFuYWdlci5nZXRBbGwoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuQ3VycmVudCBDb25maWd1cmF0aW9uOicpKTtcbiAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY29uZmlnLCBudWxsLCAyKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29udGV4dC5jb25maWdNYW5hZ2VyLmdldENvbmZpZ1BhdGgoKX1gKSk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldENvbmZpZyhjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb250ZXh0LmNvbmZpZ01hbmFnZXIuY2xlYXIoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb25maWd1cmF0aW9uIHJlc2V0IHRvIGRlZmF1bHRzLicpKTtcbiAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdZb3Ugd2lsbCBuZWVkIHRvIHJ1biBgb2Zsb3cgYXV0aGAgdG8gcmVjb25maWd1cmUgYXV0aGVudGljYXRpb24uJykpO1xuICByZXR1cm4gZmFsc2U7IC8vIEV4aXQgdG8gZm9yY2UgcmUtYXV0aFxufVxuXG5mdW5jdGlvbiBzaG93SGlzdG9yeShjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCBtZXNzYWdlcyA9IGNvbnRleHQuY29udmVyc2F0aW9uLmdldE1lc3NhZ2VzKCk7XG4gIFxuICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnTm8gY29udmVyc2F0aW9uIGhpc3RvcnkuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuQ29udmVyc2F0aW9uIEhpc3Rvcnk6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBtZXNzYWdlcy5mb3JFYWNoKChtc2csIGluZGV4KSA9PiB7XG4gICAgaWYgKG1zZy5yb2xlID09PSAnc3lzdGVtJykgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IHJvbGVDb2xvcnM6IFJlY29yZDxzdHJpbmcsIGNoYWxrLkNoYWxrPiA9IHtcbiAgICAgIHVzZXI6IGNoYWxrLmdyZWVuLFxuICAgICAgYXNzaXN0YW50OiBjaGFsay5ibHVlLFxuICAgICAgdG9vbDogY2hhbGsuZ3JheVxuICAgIH07XG4gICAgXG4gICAgY29uc3QgY29sb3IgPSByb2xlQ29sb3JzW21zZy5yb2xlXSB8fCBjaGFsay53aGl0ZTtcbiAgICBjb25zdCBwcmV2aWV3ID0gdHlwZW9mIG1zZy5jb250ZW50ID09PSAnc3RyaW5nJyBcbiAgICAgID8gbXNnLmNvbnRlbnQuc3Vic3RyaW5nKDAsIDEwMCkgKyAobXNnLmNvbnRlbnQubGVuZ3RoID4gMTAwID8gJy4uLicgOiAnJylcbiAgICAgIDogJ1tjb21wbGV4IGNvbnRlbnRdJztcbiAgICBcbiAgICBjb25zb2xlLmxvZyhgJHtpbmRleH0uICR7Y29sb3IobXNnLnJvbGUpfTogJHtwcmV2aWV3fWApO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93VG9vbHMoKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkF2YWlsYWJsZSBUb29sczonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnN0IHRvb2xzID0gW1xuICAgIHsgbmFtZTogJ3JlYWRfZmlsZScsIGRlc2M6ICdSZWFkIGZpbGUgY29udGVudHMnIH0sXG4gICAgeyBuYW1lOiAnd3JpdGVfZmlsZScsIGRlc2M6ICdXcml0ZSB0byBmaWxlcycgfSxcbiAgICB7IG5hbWU6ICdsaXN0X2RpcmVjdG9yeScsIGRlc2M6ICdMaXN0IGRpcmVjdG9yeSBjb250ZW50cycgfSxcbiAgICB7IG5hbWU6ICdnbG9iJywgZGVzYzogJ0ZpbmQgZmlsZXMgYnkgcGF0dGVybicgfSxcbiAgICB7IG5hbWU6ICdzZWFyY2hfZmlsZV9jb250ZW50JywgZGVzYzogJ1NlYXJjaCB3aXRoaW4gZmlsZXMnIH0sXG4gICAgeyBuYW1lOiAncnVuX3NoZWxsX2NvbW1hbmQnLCBkZXNjOiAnRXhlY3V0ZSBzaGVsbCBjb21tYW5kcycgfSxcbiAgICB7IG5hbWU6ICd3ZWJfc2VhcmNoJywgZGVzYzogJ1NlYXJjaCB0aGUgd2ViJyB9LFxuICAgIHsgbmFtZTogJ3dlYl9mZXRjaCcsIGRlc2M6ICdGZXRjaCB3ZWIgY29udGVudCcgfSxcbiAgICB7IG5hbWU6ICdyZXBsYWNlJywgZGVzYzogJ1JlcGxhY2UgdGV4dCBpbiBmaWxlcycgfSxcbiAgICB7IG5hbWU6ICdpbWFnZV9yZWFkJywgZGVzYzogJ0FuYWx5emUgaW1hZ2VzIHdpdGggVkwgbW9kZWxzJyB9LFxuICAgIHsgbmFtZTogJ3BkZl9leHRyYWN0JywgZGVzYzogJ0V4dHJhY3QgY29udGVudCBmcm9tIFBERnMnIH0sXG4gICAgeyBuYW1lOiAnYXNrX3VzZXJfcXVlc3Rpb24nLCBkZXNjOiAnQXNrIHVzZXIgZm9yIGlucHV0JyB9LFxuICAgIHsgbmFtZTogJ3Rhc2snLCBkZXNjOiAnTGF1bmNoIHN1Yi1hZ2VudHMnIH0sXG4gICAgeyBuYW1lOiAnc2F2ZV9tZW1vcnknLCBkZXNjOiAnU2F2ZSBpbmZvcm1hdGlvbiBmb3IgZnV0dXJlJyB9XG4gIF07XG5cbiAgdG9vbHMuZm9yRWFjaCgoeyBuYW1lLCBkZXNjIH0pID0+IHtcbiAgICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4obmFtZS5wYWRFbmQoMjApKX0gJHtjaGFsay5ncmF5KGRlc2MpfWApO1xuICB9KTtcblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93VmVyc2lvbigpOiBib29sZWFuIHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgb2Zsb3cgQ0xJIHYke3BhY2thZ2VKc29uLnZlcnNpb259YCkpO1xuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdvZmxvdyBDTEkgKHZlcnNpb24gdW5rbm93biknKSk7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dBZ2VudHMoKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkF2YWlsYWJsZSBTdWItQWdlbnRzOicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc3QgYWdlbnRzID0gT2JqZWN0LnZhbHVlcyhBR0VOVF9ERUZJTklUSU9OUyk7XG4gIGFnZW50cy5mb3JFYWNoKGFnZW50ID0+IHtcbiAgICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4oYCQke2FnZW50LnR5cGV9YCl9YCk7XG4gICAgY29uc29sZS5sb2coYCAgICAke2NoYWxrLmdyYXkoYWdlbnQuZGVzY3JpcHRpb24pfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICAgVG9vbHM6ICR7YWdlbnQuYWxsb3dlZFRvb2xzID09PSAnKicgPyAnYWxsJyA6IGFnZW50LmFsbG93ZWRUb29scy5qb2luKCcsICcpfWApO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVXNhZ2U6ICRhZ2VudC10eXBlIFwieW91ciB0YXNrIGhlcmVcIicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2hvd1NhbmRib3hJbmZvKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5TYW5kYm94IFN0YXR1czonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIHRyeSB7XG4gICAgY29uc3QgYmFja2VuZCA9IGF3YWl0IGNyZWF0ZVNhbmRib3hFeGVjdXRvcigpO1xuICAgIGNvbnNvbGUubG9nKGAgIEJhY2tlbmQ6ICR7Y2hhbGsuY3lhbihiYWNrZW5kID8gJ2F2YWlsYWJsZScgOiAndW5hdmFpbGFibGUnKX1gKTtcbiAgICBjb25zb2xlLmxvZyhgICBNb2RlOiAke2NoYWxrLmN5YW4oYmFja2VuZCA/IGJhY2tlbmRbJ2NvbmZpZyddPy5iYWNrZW5kIHx8ICdub25lJyA6ICdub25lJyl9YCk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnNvbGUubG9nKCcgIEJhY2tlbmQ6ICcgKyBjaGFsay55ZWxsb3coJ25vdCBhdmFpbGFibGUnKSk7XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0VuYWJsZSB3aXRoOiBvZmxvdyAtLXNhbmRib3gnKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dTa2lsbHMoc3ViQ29tbWFuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcblNraWxscyBTeXN0ZW06JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBpZiAoc3ViQ29tbWFuZCA9PT0gJ2xpc3QnIHx8ICFzdWJDb21tYW5kKSB7XG4gICAgY29uc29sZS5sb2coJ1NraWxscyBhbGxvdyBleHRlbmRpbmcgb2Zsb3cgd2l0aCBzcGVjaWFsaXplZCBjYXBhYmlsaXRpZXMuJyk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0F2YWlsYWJsZSBTa2lsbCBDYXRlZ29yaWVzOicpKTtcbiAgICBjb25zb2xlLmxvZygnICDigKIgRG9jdW1lbnQgUHJvY2Vzc2luZyAocGRmLCBkb2N4LCBwcHR4KScpO1xuICAgIGNvbnNvbGUubG9nKCcgIOKAoiBDcmVhdGl2ZSBUb29scyAoYWxnb3JpdGhtaWMtYXJ0LCBjYW52YXMtZGVzaWduKScpO1xuICAgIGNvbnNvbGUubG9nKCcgIOKAoiBEZXZlbG9wbWVudCBUb29scyAobWNwLWJ1aWxkZXIsIHNraWxsLWNyZWF0b3IpJyk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1NraWxscyBhcmUgc3RvcmVkIGluOicpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIEdsb2JhbDogfi8ub2Zsb3cvc2tpbGxzLycpKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIFByb2plY3Q6IC4vLm9mbG93L3NraWxscy8nKSk7XG4gIH0gZWxzZSBpZiAoc3ViQ29tbWFuZCA9PT0gJ3JlZnJlc2gnKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBTa2lsbHMgcmVnaXN0cnkgcmVmcmVzaGVkLicpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coYFVua25vd24gc3ViY29tbWFuZDogJHtzdWJDb21tYW5kfWApKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdVc2FnZTogL3NraWxscyBbbGlzdHxyZWZyZXNoXScpKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dNQ1BJbmZvKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5NQ1AgKE1vZGVsIENvbnRleHQgUHJvdG9jb2wpIFN0YXR1czonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnNvbGUubG9nKCdNQ1AgYWxsb3dzIGV4dGVuZGluZyBvZmxvdyB3aXRoIGV4dGVybmFsIHRvb2wgc2VydmVycy4nKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdDb25maWd1cmF0aW9uOicpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnQWRkIHNlcnZlcnMgdG8gfi8ub2Zsb3cvc2V0dGluZ3MuanNvbjonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuY3lhbihge1xuICBcIm1jcFNlcnZlcnNcIjoge1xuICAgIFwibXlfc2VydmVyXCI6IHtcbiAgICAgIFwiY29tbWFuZFwiOiBcIm5weFwiLFxuICAgICAgXCJhcmdzXCI6IFtcIi15XCIsIFwibXktbWNwLXNlcnZlclwiXVxuICAgIH1cbiAgfVxufWApKTtcbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2hvd01lbW9yeSgpOiBib29sZWFuIHtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuU2F2ZWQgTWVtb3JpZXM6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBjb25zdCBob21lRGlyID0gcHJvY2Vzcy5lbnYuSE9NRSB8fCBwcm9jZXNzLmVudi5VU0VSUFJPRklMRSB8fCAnJztcbiAgY29uc3QgbWVtb3J5RmlsZSA9IHBhdGguam9pbihob21lRGlyLCAnLm9mbG93JywgJ21lbW9yeS5qc29uJyk7XG4gIFxuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKG1lbW9yeUZpbGUpKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKG1lbW9yeUZpbGUsICd1dGYtOCcpO1xuICAgICAgY29uc3QgbWVtb3JpZXMgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICAgICAgXG4gICAgICBpZiAobWVtb3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05vIG1lbW9yaWVzIHNhdmVkLicpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lbW9yaWVzLmZvckVhY2goKG06IHsgZmFjdDogc3RyaW5nOyBjcmVhdGVkQXQ6IHN0cmluZyB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgJHtpICsgMX0uICR7Y2hhbGsud2hpdGUobS5mYWN0KX1gKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgJHtjaGFsay5ncmF5KG5ldyBEYXRlKG0uY3JlYXRlZEF0KS50b0xvY2FsZVN0cmluZygpKX1gKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdObyBtZW1vcmllcyBzYXZlZC4nKSk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ0NvdWxkIG5vdCByZWFkIG1lbW9yeSBmaWxlLicpKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ29tbWl0KGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcbkdlbmVyYXRpbmcgY29tbWl0IG1lc3NhZ2UuLi4nKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIC8vIOajgOafpeaYr+WQpuaYr2dpdOS7k+W6k1xuICBjb25zdCBnaXREaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5naXQnKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKGdpdERpcikpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vdCBhIGdpdCByZXBvc2l0b3J5LicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGNvbW1pdFByb21wdCA9IGBQbGVhc2UgYW5hbHl6ZSB0aGUgY3VycmVudCBnaXQgcmVwb3NpdG9yeSBzdGF0ZSBhbmQgZ2VuZXJhdGUgYW4gYXBwcm9wcmlhdGUgY29tbWl0IG1lc3NhZ2UuXG5cbldvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5cblN0ZXBzOlxuMS4gUnVuICdnaXQgc3RhdHVzJyB0byBzZWUgY2hhbmdlZCBmaWxlc1xuMi4gUnVuICdnaXQgZGlmZiAtLXN0YWdlZCcgdG8gc2VlIHN0YWdlZCBjaGFuZ2VzIChpZiBhbnkpXG4zLiBSdW4gJ2dpdCBkaWZmJyB0byBzZWUgdW5zdGFnZWQgY2hhbmdlc1xuNC4gR2VuZXJhdGUgYSBjbGVhciwgY29uY2lzZSBjb21taXQgbWVzc2FnZSBmb2xsb3dpbmcgY29udmVudGlvbmFsIGNvbW1pdCBmb3JtYXRcblxuUHJvdmlkZSB0aGUgY29tbWl0IG1lc3NhZ2UgYXMgeW91ciByZXNwb25zZS5gO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udGV4dC5jb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UoY29tbWl0UHJvbXB0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0Vycm9yIGdlbmVyYXRpbmcgY29tbWl0IG1lc3NhZ2UuJykpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldmlld0NvZGUoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc29sZS5sb2coY2hhbGsuY3lhbignXFxuUmV2aWV3aW5nIHJlY2VudCBjaGFuZ2VzLi4uJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICAvLyDmo4Dmn6XmmK/lkKbmmK9naXTku5PlupNcbiAgY29uc3QgZ2l0RGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZ2l0Jyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdOb3QgYSBnaXQgcmVwb3NpdG9yeS4nKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCByZXZpZXdQcm9tcHQgPSBgUGxlYXNlIHJldmlldyB0aGUgcmVjZW50IGNvZGUgY2hhbmdlcyBpbiB0aGlzIHJlcG9zaXRvcnkuXG5cbldvcmtpbmcgZGlyZWN0b3J5OiAke3Byb2Nlc3MuY3dkKCl9XG5cblN0ZXBzOlxuMS4gUnVuICdnaXQgbG9nIC01IC0tb25lbGluZScgdG8gc2VlIHJlY2VudCBjb21taXRzXG4yLiBSdW4gJ2dpdCBkaWZmIEhFQUR+MSBIRUFEJyB0byBzZWUgdGhlIGxhdGVzdCBjaGFuZ2VzXG4zLiBSZXZpZXcgdGhlIGNvZGUgZm9yOlxuICAgLSBQb3RlbnRpYWwgYnVnc1xuICAgLSBTZWN1cml0eSB2dWxuZXJhYmlsaXRpZXNcbiAgIC0gQ29kZSBzdHlsZSBpc3N1ZXNcbiAgIC0gUGVyZm9ybWFuY2UgY29uY2VybnNcbiAgIC0gQmVzdCBwcmFjdGljZSB2aW9sYXRpb25zXG5cblByb3ZpZGUgYSBzdHJ1Y3R1cmVkIHJldmlldyB3aXRoIHNwZWNpZmljIGZpbmRpbmdzIGFuZCBzdWdnZXN0aW9ucy5gO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udGV4dC5jb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UocmV2aWV3UHJvbXB0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5yZWQoJ0Vycm9yIGR1cmluZyBjb2RlIHJldmlldy4nKSk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlVGhpbmtpbmcoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgbmV3VmFsdWUgPSBjb250ZXh0LmNvbmZpZ01hbmFnZXIudG9nZ2xlU2hvd1RoaW5raW5nKCk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyBjaGFsay5jeWFuKCdPTicpIDogY2hhbGsuZ3JheSgnT0ZGJyl9YCkpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBpZiAobmV3VmFsdWUpIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUaGUgQUkgd2lsbCBub3cgc2hvdyBpdHMgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MgKGZvciBzdXBwb3J0ZWQgbW9kZWxzIGxpa2UgRGVlcFNlZWsgUmVhc29uZXIpLicpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdUaGUgQUkgdGhpbmtpbmcgcHJvY2VzcyBpcyBub3cgaGlkZGVuLicpKTtcbiAgfVxuICBcbiAgcmV0dXJuIHRydWU7XG59XG4iXX0=
473
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSx3Q0FFQztBQUVELGtEQTJFQztBQTNGRCxrREFBMEI7QUFDMUIseUNBQXFIO0FBRXJILHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFRN0IsU0FBZ0IsY0FBYyxDQUFDLEtBQWE7SUFDMUMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFTSxLQUFLLFVBQVUsbUJBQW1CLENBQ3ZDLEtBQWEsRUFDYixPQUF1QjtJQUV2QixNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpDLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7UUFDOUIsS0FBSyxPQUFPO1lBQ1YsT0FBTyxRQUFRLEVBQUUsQ0FBQztRQUVwQixLQUFLLE9BQU8sQ0FBQztRQUNiLEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxJQUFJO1lBQ1AsT0FBTyxLQUFLLENBQUM7UUFFZixLQUFLLFFBQVE7WUFDWCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXBDLEtBQUssT0FBTztZQUNWLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTlCLEtBQUssUUFBUTtZQUNYLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUU1QyxLQUFLLFNBQVM7WUFDWixPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUU3QixLQUFLLFFBQVE7WUFDWCxPQUFPLFdBQVcsQ0FBQyxP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QUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMzRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWhCLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxJQUFJLENBQUMsb0dBQW9HLENBQUMsQ0FBQyxDQUFDO0lBQ2hJLENBQUM7U0FBTSxDQUFDO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IENvbnZlcnNhdGlvbiwgQ29uZmlnTWFuYWdlciwgQWdlbnRGYWN0b3J5LCBBR0VOVF9ERUZJTklUSU9OUywgY3JlYXRlU2FuZGJveEV4ZWN1dG9yIH0gZnJvbSAnQG9mbG93LWFpL2NvcmUnO1xuaW1wb3J0ICogYXMgcmVhZGxpbmUgZnJvbSAncmVhZGxpbmUnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kQ29udGV4dCB7XG4gIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uO1xuICBybDogcmVhZGxpbmUuSW50ZXJmYWNlO1xuICBjb25maWdNYW5hZ2VyOiBDb25maWdNYW5hZ2VyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTbGFzaENvbW1hbmQoaW5wdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gaW5wdXQuc3RhcnRzV2l0aCgnLycpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZVNsYXNoQ29tbWFuZChcbiAgaW5wdXQ6IHN0cmluZyxcbiAgY29udGV4dDogQ29tbWFuZENvbnRleHRcbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBbY29tbWFuZCwgLi4uYXJnc10gPSBpbnB1dC5zcGxpdCgnICcpO1xuICBjb25zdCBhcmdTdHJpbmcgPSBhcmdzLmpvaW4oJyAnKTtcblxuICBzd2l0Y2ggKGNvbW1hbmQudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJy9oZWxwJzpcbiAgICAgIHJldHVybiBzaG93SGVscCgpO1xuICAgIFxuICAgIGNhc2UgJy9leGl0JzpcbiAgICBjYXNlICcvcXVpdCc6XG4gICAgY2FzZSAnL3EnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIFxuICAgIGNhc2UgJy9jbGVhcic6XG4gICAgICByZXR1cm4gY2xlYXJDb252ZXJzYXRpb24oY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL2luaXQnOlxuICAgICAgcmV0dXJuIGluaXRQcm9qZWN0KGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy9tb2RlbCc6XG4gICAgICByZXR1cm4gc2hvd09yU2V0TW9kZWwoYXJnU3RyaW5nLCBjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvY29uZmlnJzpcbiAgICAgIHJldHVybiBzaG93Q29uZmlnKGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy9yZXNldCc6XG4gICAgICByZXR1cm4gcmVzZXRDb25maWcoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL2hpc3RvcnknOlxuICAgICAgcmV0dXJuIHNob3dIaXN0b3J5KGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy90b29scyc6XG4gICAgICByZXR1cm4gc2hvd1Rvb2xzKCk7XG4gICAgXG4gICAgY2FzZSAnL3ZlcnNpb24nOlxuICAgICAgcmV0dXJuIHNob3dWZXJzaW9uKCk7XG4gICAgXG4gICAgY2FzZSAnL2FnZW50cyc6XG4gICAgICByZXR1cm4gc2hvd0FnZW50cygpO1xuICAgIFxuICAgIGNhc2UgJy9zYW5kYm94JzpcbiAgICAgIHJldHVybiBzaG93U2FuZGJveEluZm8oKTtcbiAgICBcbiAgICBjYXNlICcvc2tpbGxzJzpcbiAgICAgIHJldHVybiBzaG93U2tpbGxzKGFyZ1N0cmluZyk7XG4gICAgXG4gICAgY2FzZSAnL21jcCc6XG4gICAgICByZXR1cm4gc2hvd01DUEluZm8oKTtcbiAgICBcbiAgICBjYXNlICcvbWVtb3J5JzpcbiAgICAgIHJldHVybiBzaG93TWVtb3J5KCk7XG4gICAgXG4gICAgY2FzZSAnL2NvbW1pdCc6XG4gICAgICByZXR1cm4gZ2VuZXJhdGVDb21taXQoY29udGV4dCk7XG4gICAgXG4gICAgY2FzZSAnL3Jldmlldyc6XG4gICAgICByZXR1cm4gcmV2aWV3Q29kZShjb250ZXh0KTtcbiAgICBcbiAgICBjYXNlICcvdGhpbmtpbmcnOlxuICAgICAgcmV0dXJuIHRvZ2dsZVRoaW5raW5nKGNvbnRleHQpO1xuICAgIFxuICAgIGNhc2UgJy9zdW1tYXJ5JzpcbiAgICAgIHJldHVybiB0cnVlOyAvLyBIYW5kbGVkIGluIGNsaS50c1xuICAgIFxuICAgIGNhc2UgJy91cGRhdGUnOlxuICAgICAgcmV0dXJuIHRydWU7IC8vIEhhbmRsZWQgaW4gY2xpLnRzXG4gICAgXG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdyhgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCkpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVHlwZSAvaGVscCBmb3IgYXZhaWxhYmxlIGNvbW1hbmRzLicpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3dIZWxwKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0F2YWlsYWJsZSBDb21tYW5kczonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnN0IGNvbW1hbmRzID0gW1xuICAgIHsgY21kOiAnL2hlbHAnLCBkZXNjOiAnU2hvdyB0aGlzIGhlbHAgbWVzc2FnZScgfSxcbiAgICB7IGNtZDogJy9leGl0LCAvcXVpdCwgL3EnLCBkZXNjOiAnRXhpdCBvZmxvdyBDTEknIH0sXG4gICAgeyBjbWQ6ICcvY2xlYXInLCBkZXNjOiAnQ2xlYXIgY29udmVyc2F0aW9uIGhpc3RvcnknIH0sXG4gICAgeyBjbWQ6ICcvaW5pdCcsIGRlc2M6ICdBbmFseXplIGFuZCBpbml0aWFsaXplIGN1cnJlbnQgcHJvamVjdCcgfSxcbiAgICB7IGNtZDogJy9tb2RlbCBbbmFtZV0nLCBkZXNjOiAnU2hvdyBvciBzZXQgdGhlIGN1cnJlbnQgbW9kZWwnIH0sXG4gICAgeyBjbWQ6ICcvdGhpbmtpbmcnLCBkZXNjOiAnVG9nZ2xlIHRoaW5raW5nIHByb2Nlc3MgZGlzcGxheSAoT04vT0ZGKScgfSxcbiAgICB7IGNtZDogJy9zdW1tYXJ5JywgZGVzYzogJ1Nob3cgdGFzayBzdW1tYXJ5IGZvciBjdXJyZW50IHNlc3Npb24nIH0sXG4gICAgeyBjbWQ6ICcvdXBkYXRlJywgZGVzYzogJ1VwZGF0ZSBvZmxvdyBDTEkgdG8gbGF0ZXN0IHZlcnNpb24nIH0sXG4gICAgeyBjbWQ6ICcvY29uZmlnJywgZGVzYzogJ1Nob3cgY3VycmVudCBjb25maWd1cmF0aW9uJyB9LFxuICAgIHsgY21kOiAnL3Jlc2V0JywgZGVzYzogJ1Jlc2V0IGNvbmZpZ3VyYXRpb24gdG8gZGVmYXVsdHMnIH0sXG4gICAgeyBjbWQ6ICcvaGlzdG9yeScsIGRlc2M6ICdTaG93IGNvbnZlcnNhdGlvbiBoaXN0b3J5JyB9LFxuICAgIHsgY21kOiAnL3Rvb2xzJywgZGVzYzogJ0xpc3QgYXZhaWxhYmxlIHRvb2xzJyB9LFxuICAgIHsgY21kOiAnL2FnZW50cycsIGRlc2M6ICdMaXN0IGF2YWlsYWJsZSBzdWItYWdlbnRzJyB9LFxuICAgIHsgY21kOiAnL3NhbmRib3gnLCBkZXNjOiAnU2hvdyBzYW5kYm94IHN0YXR1cycgfSxcbiAgICB7IGNtZDogJy9za2lsbHMgW2xpc3R8cmVmcmVzaF0nLCBkZXNjOiAnTWFuYWdlIHNraWxscycgfSxcbiAgICB7IGNtZDogJy9tY3AnLCBkZXNjOiAnU2hvdyBNQ1Agc2VydmVyIHN0YXR1cycgfSxcbiAgICB7IGNtZDogJy9tZW1vcnknLCBkZXNjOiAnU2hvdyBzYXZlZCBtZW1vcmllcycgfSxcbiAgICB7IGNtZDogJy9jb21taXQnLCBkZXNjOiAnR2VuZXJhdGUgY29tbWl0IG1lc3NhZ2UnIH0sXG4gICAgeyBjbWQ6ICcvcmV2aWV3JywgZGVzYzogJ1JldmlldyByZWNlbnQgY29kZSBjaGFuZ2VzJyB9LFxuICAgIHsgY21kOiAnL3ZlcnNpb24nLCBkZXNjOiAnU2hvdyB2ZXJzaW9uIGluZm9ybWF0aW9uJyB9XG4gIF07XG5cbiAgY29tbWFuZHMuZm9yRWFjaCgoeyBjbWQsIGRlc2MgfSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGAgICR7Y2hhbGsuY3lhbihjbWQucGFkRW5kKDIwKSl9ICR7Y2hhbGsuZ3JheShkZXNjKX1gKTtcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdTcGVjaWFsIFN5bnRheDonKSk7XG4gIGNvbnNvbGUubG9nKGAgICR7Y2hhbGsuY3lhbignIWNvbW1hbmQnKX0gICAgJHtjaGFsay5ncmF5KCdFeGVjdXRlIGEgc2hlbGwgY29tbWFuZCcpfWApO1xuICBjb25zb2xlLmxvZyhgICAke2NoYWxrLmN5YW4oJ0BmaWxlcGF0aCcpfSAgICR7Y2hhbGsuZ3JheSgnUmVmZXJlbmNlIGEgZmlsZSBpbiB5b3VyIG1lc3NhZ2UnKX1gKTtcbiAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKCckYWdlbnQnKX0gICAgICAke2NoYWxrLmdyYXkoJ0NhbGwgYSBzdWItYWdlbnQgKGUuZy4sICRleHBsb3JlLWFnZW50IFwidGFza1wiKScpfWApO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2xlYXJDb252ZXJzYXRpb24oY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBib29sZWFuIHtcbiAgY29udGV4dC5jb252ZXJzYXRpb24uY2xlYXIoKTtcbiAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBDb252ZXJzYXRpb24gaGlzdG9yeSBjbGVhcmVkLicpKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluaXRQcm9qZWN0KGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHdvcmtpbmdEaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBjb25zdCBwcm9qZWN0TmFtZSA9IHBhdGguYmFzZW5hbWUod29ya2luZ0Rpcik7XG4gIFxuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG5BbmFseXppbmcgcHJvamVjdDogJHtwcm9qZWN0TmFtZX1cXG5gKSk7XG4gIFxuICAvLyBDaGVjayBmb3IgY29tbW9uIHByb2plY3QgZmlsZXNcbiAgY29uc3QgY2hlY2tzID0gW1xuICAgIHsgZmlsZTogJ3BhY2thZ2UuanNvbicsIHR5cGU6ICdOb2RlLmpzJyB9LFxuICAgIHsgZmlsZTogJ3RzY29uZmlnLmpzb24nLCB0eXBlOiAnVHlwZVNjcmlwdCcgfSxcbiAgICB7IGZpbGU6ICdweXByb2plY3QudG9tbCcsIHR5cGU6ICdQeXRob24gKG1vZGVybiknIH0sXG4gICAgeyBmaWxlOiAncmVxdWlyZW1lbnRzLnR4dCcsIHR5cGU6ICdQeXRob24nIH0sXG4gICAgeyBmaWxlOiAnQ2FyZ28udG9tbCcsIHR5cGU6ICdSdXN0JyB9LFxuICAgIHsgZmlsZTogJ2dvLm1vZCcsIHR5cGU6ICdHbycgfSxcbiAgICB7IGZpbGU6ICdwb20ueG1sJywgdHlwZTogJ0phdmEgKE1hdmVuKScgfSxcbiAgICB7IGZpbGU6ICdidWlsZC5ncmFkbGUnLCB0eXBlOiAnSmF2YSAoR3JhZGxlKScgfSxcbiAgICB7IGZpbGU6ICcuZ2l0JywgdHlwZTogJ0dpdCByZXBvc2l0b3J5JyB9XG4gIF07XG5cbiAgY29uc3QgZGV0ZWN0ZWQ6IHN0cmluZ1tdID0gW107XG4gIFxuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKHdvcmtpbmdEaXIsIGNoZWNrLmZpbGUpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGZpbGVQYXRoKSkge1xuICAgICAgZGV0ZWN0ZWQucHVzaChjaGVjay50eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0RldGVjdGVkIHByb2plY3QgdHlwZXM6JykpO1xuICAgIGRldGVjdGVkLmZvckVhY2godCA9PiBjb25zb2xlLmxvZyhgICDigKIgJHt0fWApKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIHJlY29nbml6ZWQgcHJvamVjdCB0eXBlIGRldGVjdGVkLicpKTtcbiAgfVxuXG4gIC8vIExpc3QgdG9wLWxldmVsIGZpbGVzIGFuZCBkaXJlY3Rvcmllc1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Qcm9qZWN0IHN0cnVjdHVyZTonKSk7XG4gIGNvbnN0IGVudHJpZXMgPSBmcy5yZWFkZGlyU3luYyh3b3JraW5nRGlyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGVudHJpZXMuc2xpY2UoMCwgMjApLmZvckVhY2goZW50cnkgPT4ge1xuICAgIGNvbnN0IHByZWZpeCA9IGVudHJ5LmlzRGlyZWN0b3J5KCkgPyAn8J+TgSAnIDogJ/Cfk4QgJztcbiAgICBjb25zb2xlLmxvZyhgICAke3ByZWZpeH0ke2VudHJ5Lm5hbWV9YCk7XG4gIH0pO1xuXG4gIGlmIChlbnRyaWVzLmxlbmd0aCA+IDIwKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAuLi4gYW5kICR7ZW50cmllcy5sZW5ndGggLSAyMH0gbW9yZSBpdGVtc2ApKTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCcnKTtcblxuICAvLyBBZGQgaW5pdCBjb250ZXh0IHRvIGNvbnZlcnNhdGlvblxuICBjb25zdCBpbml0TWVzc2FnZSA9IGBQbGVhc2UgYW5hbHl6ZSB0aGUgY3VycmVudCBwcm9qZWN0IHN0cnVjdHVyZSBhbmQgcHJvdmlkZTpcbjEuIEEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIHByb2plY3QgdHlwZSBhbmQgcHVycG9zZVxuMi4gS2V5IGZpbGVzIGFuZCB0aGVpciByb2xlc1xuMy4gU3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50cyBvciBiZXN0IHByYWN0aWNlc1xuXG5Xb3JraW5nIGRpcmVjdG9yeTogJHt3b3JraW5nRGlyfVxuRGV0ZWN0ZWQgdHlwZXM6ICR7ZGV0ZWN0ZWQuam9pbignLCAnKX1gO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29udGV4dC5jb252ZXJzYXRpb24uc2VuZE1lc3NhZ2UoaW5pdE1lc3NhZ2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnRXJyb3IgZHVyaW5nIGFuYWx5c2lzLicpKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93T3JTZXRNb2RlbChtb2RlbE5hbWU6IHN0cmluZywgY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBib29sZWFuIHtcbiAgaWYgKG1vZGVsTmFtZSkge1xuICAgIGNvbnRleHQuY29uZmlnTWFuYWdlci5zZXREZWZhdWx0TW9kZWwobW9kZWxOYW1lKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIE1vZGVsIHNldCB0bzogJHttb2RlbE5hbWV9YCkpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlbCA9IGNvbnRleHQuY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBDdXJyZW50IG1vZGVsOiAke2N1cnJlbnRNb2RlbH1gKSk7XG4gICAgY29uc29sZS5sb2coJycpO1xuICAgIGNvbnNvbGUubG9nKCdBdmFpbGFibGUgbW9kZWxzOicpO1xuICAgIGNvbnN0IG1vZGVscyA9IFsnZ3B0LTRvJywgJ2dwdC00by1taW5pJywgJ2dwdC00LXR1cmJvJywgJ2dwdC0zLjUtdHVyYm8nLCAnbzEtcHJldmlldycsICdvMS1taW5pJ107XG4gICAgbW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgICBpZiAobSA9PT0gY3VycmVudE1vZGVsKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGAgICogJHttfSAoY3VycmVudClgKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7bX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2hvd0NvbmZpZyhjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IGJvb2xlYW4ge1xuICBjb25zdCBjb25maWcgPSBjb250ZXh0LmNvbmZpZ01hbmFnZXIuZ2V0QWxsKCk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkN1cnJlbnQgQ29uZmlndXJhdGlvbjonKSk7XG4gIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMikpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoYENvbmZpZyBmaWxlOiAke2NvbnRleHQuY29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRDb25maWcoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBib29sZWFuIHtcbiAgY29udGV4dC5jb25maWdNYW5hZ2VyLmNsZWFyKCk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgQ29uZmlndXJhdGlvbiByZXNldCB0byBkZWZhdWx0cy4nKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnWW91IHdpbGwgbmVlZCB0byBydW4gYG9mbG93IGF1dGhgIHRvIHJlY29uZmlndXJlIGF1dGhlbnRpY2F0aW9uLicpKTtcbiAgcmV0dXJuIGZhbHNlOyAvLyBFeGl0IHRvIGZvcmNlIHJlLWF1dGhcbn1cblxuZnVuY3Rpb24gc2hvd0hpc3RvcnkoY29udGV4dDogQ29tbWFuZENvbnRleHQpOiBib29sZWFuIHtcbiAgY29uc3QgbWVzc2FnZXMgPSBjb250ZXh0LmNvbnZlcnNhdGlvbi5nZXRNZXNzYWdlcygpO1xuICBcbiAgaWYgKG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05vIGNvbnZlcnNhdGlvbiBoaXN0b3J5LicpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbkNvbnZlcnNhdGlvbiBIaXN0b3J5OicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgbWVzc2FnZXMuZm9yRWFjaCgobXNnLCBpbmRleCkgPT4ge1xuICAgIGlmIChtc2cucm9sZSA9PT0gJ3N5c3RlbScpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCByb2xlQ29sb3JzOiBSZWNvcmQ8c3RyaW5nLCBjaGFsay5DaGFsaz4gPSB7XG4gICAgICB1c2VyOiBjaGFsay5ncmVlbixcbiAgICAgIGFzc2lzdGFudDogY2hhbGsuYmx1ZSxcbiAgICAgIHRvb2w6IGNoYWxrLmdyYXlcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGNvbG9yID0gcm9sZUNvbG9yc1ttc2cucm9sZV0gfHwgY2hhbGsud2hpdGU7XG4gICAgY29uc3QgcHJldmlldyA9IHR5cGVvZiBtc2cuY29udGVudCA9PT0gJ3N0cmluZycgXG4gICAgICA/IG1zZy5jb250ZW50LnN1YnN0cmluZygwLCAxMDApICsgKG1zZy5jb250ZW50Lmxlbmd0aCA+IDEwMCA/ICcuLi4nIDogJycpXG4gICAgICA6ICdbY29tcGxleCBjb250ZW50XSc7XG4gICAgXG4gICAgY29uc29sZS5sb2coYCR7aW5kZXh9LiAke2NvbG9yKG1zZy5yb2xlKX06ICR7cHJldmlld31gKTtcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2hvd1Rvb2xzKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5BdmFpbGFibGUgVG9vbHM6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBjb25zdCB0b29scyA9IFtcbiAgICB7IG5hbWU6ICdyZWFkX2ZpbGUnLCBkZXNjOiAnUmVhZCBmaWxlIGNvbnRlbnRzJyB9LFxuICAgIHsgbmFtZTogJ3dyaXRlX2ZpbGUnLCBkZXNjOiAnV3JpdGUgdG8gZmlsZXMnIH0sXG4gICAgeyBuYW1lOiAnbGlzdF9kaXJlY3RvcnknLCBkZXNjOiAnTGlzdCBkaXJlY3RvcnkgY29udGVudHMnIH0sXG4gICAgeyBuYW1lOiAnZ2xvYicsIGRlc2M6ICdGaW5kIGZpbGVzIGJ5IHBhdHRlcm4nIH0sXG4gICAgeyBuYW1lOiAnc2VhcmNoX2ZpbGVfY29udGVudCcsIGRlc2M6ICdTZWFyY2ggd2l0aGluIGZpbGVzJyB9LFxuICAgIHsgbmFtZTogJ3J1bl9zaGVsbF9jb21tYW5kJywgZGVzYzogJ0V4ZWN1dGUgc2hlbGwgY29tbWFuZHMnIH0sXG4gICAgeyBuYW1lOiAnd2ViX3NlYXJjaCcsIGRlc2M6ICdTZWFyY2ggdGhlIHdlYicgfSxcbiAgICB7IG5hbWU6ICd3ZWJfZmV0Y2gnLCBkZXNjOiAnRmV0Y2ggd2ViIGNvbnRlbnQnIH0sXG4gICAgeyBuYW1lOiAncmVwbGFjZScsIGRlc2M6ICdSZXBsYWNlIHRleHQgaW4gZmlsZXMnIH0sXG4gICAgeyBuYW1lOiAnaW1hZ2VfcmVhZCcsIGRlc2M6ICdBbmFseXplIGltYWdlcyB3aXRoIFZMIG1vZGVscycgfSxcbiAgICB7IG5hbWU6ICdwZGZfZXh0cmFjdCcsIGRlc2M6ICdFeHRyYWN0IGNvbnRlbnQgZnJvbSBQREZzJyB9LFxuICAgIHsgbmFtZTogJ2Fza191c2VyX3F1ZXN0aW9uJywgZGVzYzogJ0FzayB1c2VyIGZvciBpbnB1dCcgfSxcbiAgICB7IG5hbWU6ICd0YXNrJywgZGVzYzogJ0xhdW5jaCBzdWItYWdlbnRzJyB9LFxuICAgIHsgbmFtZTogJ3NhdmVfbWVtb3J5JywgZGVzYzogJ1NhdmUgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZScgfVxuICBdO1xuXG4gIHRvb2xzLmZvckVhY2goKHsgbmFtZSwgZGVzYyB9KSA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKG5hbWUucGFkRW5kKDIwKSl9ICR7Y2hhbGsuZ3JheShkZXNjKX1gKTtcbiAgfSk7XG5cbiAgY29uc29sZS5sb2coJycpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gc2hvd1ZlcnNpb24oKTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICcuLicsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYG9mbG93IENMSSB2JHtwYWNrYWdlSnNvbi52ZXJzaW9ufWApKTtcbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbignb2Zsb3cgQ0xJICh2ZXJzaW9uIHVua25vd24pJykpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93QWdlbnRzKCk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5BdmFpbGFibGUgU3ViLUFnZW50czonKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgXG4gIGNvbnN0IGFnZW50cyA9IE9iamVjdC52YWx1ZXMoQUdFTlRfREVGSU5JVElPTlMpO1xuICBhZ2VudHMuZm9yRWFjaChhZ2VudCA9PiB7XG4gICAgY29uc29sZS5sb2coYCAgJHtjaGFsay5jeWFuKGAkJHthZ2VudC50eXBlfWApfWApO1xuICAgIGNvbnNvbGUubG9nKGAgICAgJHtjaGFsay5ncmF5KGFnZW50LmRlc2NyaXB0aW9uKX1gKTtcbiAgICBjb25zb2xlLmxvZyhgICAgIFRvb2xzOiAke2FnZW50LmFsbG93ZWRUb29scyA9PT0gJyonID8gJ2FsbCcgOiBhZ2VudC5hbGxvd2VkVG9vbHMuam9pbignLCAnKX1gKTtcbiAgICBjb25zb2xlLmxvZygnJyk7XG4gIH0pO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1VzYWdlOiAkYWdlbnQtdHlwZSBcInlvdXIgdGFzayBoZXJlXCInKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNob3dTYW5kYm94SW5mbygpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuU2FuZGJveCBTdGF0dXM6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICB0cnkge1xuICAgIGNvbnN0IGJhY2tlbmQgPSBhd2FpdCBjcmVhdGVTYW5kYm94RXhlY3V0b3IoKTtcbiAgICBjb25zb2xlLmxvZyhgICBCYWNrZW5kOiAke2NoYWxrLmN5YW4oYmFja2VuZCA/ICdhdmFpbGFibGUnIDogJ3VuYXZhaWxhYmxlJyl9YCk7XG4gICAgY29uc29sZS5sb2coYCAgTW9kZTogJHtjaGFsay5jeWFuKGJhY2tlbmQgPyBiYWNrZW5kWydjb25maWcnXT8uYmFja2VuZCB8fCAnbm9uZScgOiAnbm9uZScpfWApO1xuICB9IGNhdGNoIHtcbiAgICBjb25zb2xlLmxvZygnICBCYWNrZW5kOiAnICsgY2hhbGsueWVsbG93KCdub3QgYXZhaWxhYmxlJykpO1xuICB9XG5cbiAgY29uc29sZS5sb2coJycpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdFbmFibGUgd2l0aDogb2Zsb3cgLS1zYW5kYm94JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93U2tpbGxzKHN1YkNvbW1hbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdcXG5Ta2lsbHMgU3lzdGVtOicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgaWYgKHN1YkNvbW1hbmQgPT09ICdsaXN0JyB8fCAhc3ViQ29tbWFuZCkge1xuICAgIGNvbnNvbGUubG9nKCdTa2lsbHMgYWxsb3cgZXh0ZW5kaW5nIG9mbG93IHdpdGggc3BlY2lhbGl6ZWQgY2FwYWJpbGl0aWVzLicpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdBdmFpbGFibGUgU2tpbGwgQ2F0ZWdvcmllczonKSk7XG4gICAgY29uc29sZS5sb2coJyAg4oCiIERvY3VtZW50IFByb2Nlc3NpbmcgKHBkZiwgZG9jeCwgcHB0eCknKTtcbiAgICBjb25zb2xlLmxvZygnICDigKIgQ3JlYXRpdmUgVG9vbHMgKGFsZ29yaXRobWljLWFydCwgY2FudmFzLWRlc2lnbiknKTtcbiAgICBjb25zb2xlLmxvZygnICDigKIgRGV2ZWxvcG1lbnQgVG9vbHMgKG1jcC1idWlsZGVyLCBza2lsbC1jcmVhdG9yKScpO1xuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdTa2lsbHMgYXJlIHN0b3JlZCBpbjonKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBHbG9iYWw6IH4vLm9mbG93L3NraWxscy8nKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBQcm9qZWN0OiAuLy5vZmxvdy9za2lsbHMvJykpO1xuICB9IGVsc2UgaWYgKHN1YkNvbW1hbmQgPT09ICdyZWZyZXNoJykge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgU2tpbGxzIHJlZ2lzdHJ5IHJlZnJlc2hlZC4nKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KGBVbmtub3duIHN1YmNvbW1hbmQ6ICR7c3ViQ29tbWFuZH1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVXNhZ2U6IC9za2lsbHMgW2xpc3R8cmVmcmVzaF0nKSk7XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzaG93TUNQSW5mbygpOiBib29sZWFuIHtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnXFxuTUNQIChNb2RlbCBDb250ZXh0IFByb3RvY29sKSBTdGF0dXM6JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICBjb25zb2xlLmxvZygnTUNQIGFsbG93cyBleHRlbmRpbmcgb2Zsb3cgd2l0aCBleHRlcm5hbCB0b29sIHNlcnZlcnMuJyk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnQ29uZmlndXJhdGlvbjonKSk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0FkZCBzZXJ2ZXJzIHRvIH4vLm9mbG93L3NldHRpbmdzLmpzb246JykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYHtcbiAgXCJtY3BTZXJ2ZXJzXCI6IHtcbiAgICBcIm15X3NlcnZlclwiOiB7XG4gICAgICBcImNvbW1hbmRcIjogXCJucHhcIixcbiAgICAgIFwiYXJnc1wiOiBbXCIteVwiLCBcIm15LW1jcC1zZXJ2ZXJcIl1cbiAgICB9XG4gIH1cbn1gKSk7XG4gIGNvbnNvbGUubG9nKCcnKTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNob3dNZW1vcnkoKTogYm9vbGVhbiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcblNhdmVkIE1lbW9yaWVzOicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgY29uc3QgaG9tZURpciA9IHByb2Nlc3MuZW52LkhPTUUgfHwgcHJvY2Vzcy5lbnYuVVNFUlBST0ZJTEUgfHwgJyc7XG4gIGNvbnN0IG1lbW9yeUZpbGUgPSBwYXRoLmpvaW4oaG9tZURpciwgJy5vZmxvdycsICdtZW1vcnkuanNvbicpO1xuICBcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhtZW1vcnlGaWxlKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhtZW1vcnlGaWxlLCAndXRmLTgnKTtcbiAgICAgIGNvbnN0IG1lbW9yaWVzID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICAgIFxuICAgICAgaWYgKG1lbW9yaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdObyBtZW1vcmllcyBzYXZlZC4nKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZW1vcmllcy5mb3JFYWNoKChtOiB7IGZhY3Q6IHN0cmluZzsgY3JlYXRlZEF0OiBzdHJpbmcgfSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCR7aSArIDF9LiAke2NoYWxrLndoaXRlKG0uZmFjdCl9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICR7Y2hhbGsuZ3JheShuZXcgRGF0ZShtLmNyZWF0ZWRBdCkudG9Mb2NhbGVTdHJpbmcoKSl9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnTm8gbWVtb3JpZXMgc2F2ZWQuJykpO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdDb3VsZCBub3QgcmVhZCBtZW1vcnkgZmlsZS4nKSk7XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNvbW1pdChjb250ZXh0OiBDb21tYW5kQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5HZW5lcmF0aW5nIGNvbW1pdCBtZXNzYWdlLi4uJykpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIFxuICAvLyDmo4Dmn6XmmK/lkKbmmK9naXTku5PlupNcbiAgY29uc3QgZ2l0RGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZ2l0Jyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhnaXREaXIpKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdOb3QgYSBnaXQgcmVwb3NpdG9yeS4nKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBjb21taXRQcm9tcHQgPSBgUGxlYXNlIGFuYWx5emUgdGhlIGN1cnJlbnQgZ2l0IHJlcG9zaXRvcnkgc3RhdGUgYW5kIGdlbmVyYXRlIGFuIGFwcHJvcHJpYXRlIGNvbW1pdCBtZXNzYWdlLlxuXG5Xb3JraW5nIGRpcmVjdG9yeTogJHtwcm9jZXNzLmN3ZCgpfVxuXG5TdGVwczpcbjEuIFJ1biAnZ2l0IHN0YXR1cycgdG8gc2VlIGNoYW5nZWQgZmlsZXNcbjIuIFJ1biAnZ2l0IGRpZmYgLS1zdGFnZWQnIHRvIHNlZSBzdGFnZWQgY2hhbmdlcyAoaWYgYW55KVxuMy4gUnVuICdnaXQgZGlmZicgdG8gc2VlIHVuc3RhZ2VkIGNoYW5nZXNcbjQuIEdlbmVyYXRlIGEgY2xlYXIsIGNvbmNpc2UgY29tbWl0IG1lc3NhZ2UgZm9sbG93aW5nIGNvbnZlbnRpb25hbCBjb21taXQgZm9ybWF0XG5cblByb3ZpZGUgdGhlIGNvbW1pdCBtZXNzYWdlIGFzIHlvdXIgcmVzcG9uc2UuYDtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnRleHQuY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKGNvbW1pdFByb21wdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdFcnJvciBnZW5lcmF0aW5nIGNvbW1pdCBtZXNzYWdlLicpKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXZpZXdDb2RlKGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ1xcblJldmlld2luZyByZWNlbnQgY2hhbmdlcy4uLicpKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgLy8g5qOA5p+l5piv5ZCm5pivZ2l05LuT5bqTXG4gIGNvbnN0IGdpdERpciA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLmdpdCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMoZ2l0RGlyKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm90IGEgZ2l0IHJlcG9zaXRvcnkuJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgcmV2aWV3UHJvbXB0ID0gYFBsZWFzZSByZXZpZXcgdGhlIHJlY2VudCBjb2RlIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuXG5Xb3JraW5nIGRpcmVjdG9yeTogJHtwcm9jZXNzLmN3ZCgpfVxuXG5TdGVwczpcbjEuIFJ1biAnZ2l0IGxvZyAtNSAtLW9uZWxpbmUnIHRvIHNlZSByZWNlbnQgY29tbWl0c1xuMi4gUnVuICdnaXQgZGlmZiBIRUFEfjEgSEVBRCcgdG8gc2VlIHRoZSBsYXRlc3QgY2hhbmdlc1xuMy4gUmV2aWV3IHRoZSBjb2RlIGZvcjpcbiAgIC0gUG90ZW50aWFsIGJ1Z3NcbiAgIC0gU2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzXG4gICAtIENvZGUgc3R5bGUgaXNzdWVzXG4gICAtIFBlcmZvcm1hbmNlIGNvbmNlcm5zXG4gICAtIEJlc3QgcHJhY3RpY2UgdmlvbGF0aW9uc1xuXG5Qcm92aWRlIGEgc3RydWN0dXJlZCByZXZpZXcgd2l0aCBzcGVjaWZpYyBmaW5kaW5ncyBhbmQgc3VnZ2VzdGlvbnMuYDtcblxuICB0cnkge1xuICAgIGF3YWl0IGNvbnRleHQuY29udmVyc2F0aW9uLnNlbmRNZXNzYWdlKHJldmlld1Byb21wdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsucmVkKCdFcnJvciBkdXJpbmcgY29kZSByZXZpZXcuJykpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVRoaW5raW5nKGNvbnRleHQ6IENvbW1hbmRDb250ZXh0KTogYm9vbGVhbiB7XG4gIGNvbnN0IG5ld1ZhbHVlID0gY29udGV4dC5jb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGDinJMgVGhpbmtpbmcgcHJvY2VzcyBkaXNwbGF5OiAke25ld1ZhbHVlID8gY2hhbGsuY3lhbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpfWApKTtcbiAgY29uc29sZS5sb2coJycpO1xuICBcbiAgaWYgKG5ld1ZhbHVlKSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVGhlIEFJIHdpbGwgbm93IHNob3cgaXRzIHRoaW5raW5nL3JlYXNvbmluZyBwcm9jZXNzIChmb3Igc3VwcG9ydGVkIG1vZGVscyBsaWtlIERlZXBTZWVrIFJlYXNvbmVyKS4nKSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnVGhlIEFJIHRoaW5raW5nIHByb2Nlc3MgaXMgbm93IGhpZGRlbi4nKSk7XG4gIH1cbiAgXG4gIHJldHVybiB0cnVlO1xufVxuIl19
package/dist/index.js CHANGED
@@ -74,7 +74,15 @@ program
74
74
  if (!configManager.isAuthenticated()) {
75
75
  console.log(chalk_1.default.yellow('Welcome to oflow! Let\'s get you set up.'));
76
76
  console.log('');
77
- await runAuthFlow();
77
+ const authSuccess = await runAuthFlow();
78
+ // 【修复】认证成功后启动交互模式
79
+ if (authSuccess) {
80
+ console.log(chalk_1.default.cyan('\nStarting oflow CLI...\n'));
81
+ await (0, cli_1.startInteractiveMode)({
82
+ model: options.model,
83
+ yolo: options.yolo
84
+ });
85
+ }
78
86
  return;
79
87
  }
80
88
  // Set model if specified
@@ -112,7 +120,10 @@ program
112
120
  .description('Configure authentication')
113
121
  .option('--provider <provider>', 'Provider (openai, deepseek, qwen, etc.)')
114
122
  .action(async (options) => {
115
- await runAuthFlow(options.provider);
123
+ const success = await runAuthFlow(options.provider);
124
+ if (success) {
125
+ console.log(chalk_1.default.cyan('\nYou can now run "oflow" to start the CLI.'));
126
+ }
116
127
  });
117
128
  // Config command
118
129
  program
@@ -125,7 +136,13 @@ program
125
136
  const configManager = (0, core_1.getConfigManager)();
126
137
  if (options.list) {
127
138
  console.log(chalk_1.default.bold('Current Configuration:'));
128
- console.log(JSON.stringify(configManager.getAll(), null, 2));
139
+ const config = configManager.getAll();
140
+ // 隐藏敏感信息
141
+ const safeConfig = { ...config };
142
+ if (safeConfig.auth?.apiKey) {
143
+ safeConfig.auth = { ...safeConfig.auth, apiKey: '****' + safeConfig.auth.apiKey.slice(-4) };
144
+ }
145
+ console.log(JSON.stringify(safeConfig, null, 2));
129
146
  console.log('');
130
147
  console.log(chalk_1.default.gray(`Config file: ${configManager.getConfigPath()}`));
131
148
  }
@@ -141,6 +158,7 @@ program
141
158
  else {
142
159
  console.log(`Config file: ${configManager.getConfigPath()}`);
143
160
  console.log(`Thinking display: ${configManager.getShowThinking() ? 'ON' : 'OFF'}`);
161
+ console.log(`Current model: ${configManager.getDefaultModel()}`);
144
162
  }
145
163
  });
146
164
  // Models command
@@ -206,6 +224,7 @@ async function runAuthFlow(provider) {
206
224
  });
207
225
  configManager.setDefaultModel(answers.model);
208
226
  console.log(chalk_1.default.green('\n✓ Authentication configured successfully!'));
227
+ return true;
209
228
  }
210
229
  // Custom
211
230
  else if (provider === 'custom') {
@@ -214,7 +233,14 @@ async function runAuthFlow(provider) {
214
233
  type: 'input',
215
234
  name: 'baseUrl',
216
235
  message: 'Enter API base URL:',
217
- default: 'https://api.openai.com/v1'
236
+ default: 'https://api.openai.com/v1',
237
+ validate: (input) => {
238
+ if (!input)
239
+ return 'Base URL is required';
240
+ if (!input.startsWith('http'))
241
+ return 'URL must start with http:// or https://';
242
+ return true;
243
+ }
218
244
  },
219
245
  {
220
246
  type: 'password',
@@ -237,6 +263,7 @@ async function runAuthFlow(provider) {
237
263
  });
238
264
  configManager.setDefaultModel(answers.model);
239
265
  console.log(chalk_1.default.green('\n✓ Authentication configured successfully!'));
266
+ return true;
240
267
  }
241
268
  // 国内模型
242
269
  else if (core_1.CHINESE_MODELS[provider]) {
@@ -253,8 +280,11 @@ async function runAuthFlow(provider) {
253
280
  type: 'list',
254
281
  name: 'model',
255
282
  message: 'Select default model:',
256
- choices: modelConfig.models,
257
- default: modelConfig.models[0]
283
+ choices: modelConfig.models.map((m) => ({
284
+ name: `${m.id} - ${m.name}`,
285
+ value: m.id
286
+ })),
287
+ default: modelConfig.models[0].id
258
288
  }
259
289
  ]);
260
290
  configManager.setAuth({
@@ -269,15 +299,13 @@ async function runAuthFlow(provider) {
269
299
  if (provider === 'deepseek' && answers.model === 'deepseek-reasoner') {
270
300
  console.log(chalk_1.default.yellow('💡 提示: deepseek-reasoner 支持显示思考过程,使用 --thinking 开启'));
271
301
  }
302
+ return true;
272
303
  }
304
+ return false;
273
305
  }
274
306
  async function listModels() {
275
307
  const configManager = (0, core_1.getConfigManager)();
276
308
  const auth = configManager.getAuth();
277
- if (!auth) {
278
- console.log(chalk_1.default.red('Not authenticated. Run `oflow auth` first.'));
279
- return;
280
- }
281
309
  console.log(chalk_1.default.bold('\n═══════════════════════════════════════════════════════════'));
282
310
  console.log(chalk_1.default.bold(' Available Models '));
283
311
  console.log(chalk_1.default.bold('═══════════════════════════════════════════════════════════\n'));
@@ -312,9 +340,12 @@ async function listModels() {
312
340
  }
313
341
  // 显示当前配置
314
342
  console.log(chalk_1.default.bold('───────────────────────────────────────────────────────────'));
343
+ if (auth) {
344
+ console.log(`Current provider: ${chalk_1.default.green(auth.provider)}`);
345
+ }
315
346
  console.log(`Current model: ${chalk_1.default.green(configManager.getDefaultModel())}`);
316
347
  console.log(`Thinking display: ${configManager.getShowThinking() ? chalk_1.default.green('ON') : chalk_1.default.gray('OFF')}`);
317
348
  console.log('');
318
349
  }
319
350
  program.parse();
320
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEseUNBQW9DO0FBQ3BDLCtCQUErRDtBQUMvRCx5Q0FBa0U7QUFDbEUsa0RBQTBCO0FBQzFCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsZ0NBQWdDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUUsbUVBQW1FO0FBQ25FLElBQUksQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDZCQUE2QjtBQUMvQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDYixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7S0FDNUIsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0tBQzVELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztLQUNwRCxNQUFNLENBQUMs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Q0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLEdBQUcsT0FBTyxNQUFNLGVBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsSCxDQUFDO1FBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUztJQUNULE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7SUFDdkYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsZUFBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgc3RhcnRJbnRlcmFjdGl2ZU1vZGUsIHJ1blNpbmdsZUNvbW1hbmQgfSBmcm9tICcuL2NsaSc7XG5pbXBvcnQgeyBnZXRDb25maWdNYW5hZ2VyLCBDSElORVNFX01PREVMUyB9IGZyb20gJ0BvZmxvdy1haS9jb3JlJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vLyBSZWFkIHBhY2thZ2UuanNvbiBmb3IgdmVyc2lvblxuY29uc3QgcGFja2FnZUpzb25QYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ3BhY2thZ2UuanNvbicpO1xuY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhwYWNrYWdlSnNvblBhdGgsICd1dGYtOCcpKTtcblxuLy8gU2ltcGxlIHVwZGF0ZSBjaGVjayAod2l0aG91dCB1cGRhdGUtbm90aWZpZXIgZHVlIHRvIHR5cGUgaXNzdWVzKVxudHJ5IHtcbiAgY29uc3QgdXBkYXRlTm90aWZpZXIgPSByZXF1aXJlKCd1cGRhdGUtbm90aWZpZXInKTtcbiAgY29uc3Qgbm90aWZpZXIgPSB1cGRhdGVOb3RpZmllcih7IHBrZzogcGFja2FnZUpzb24gfSk7XG4gIGlmIChub3RpZmllci5ub3RpZnkpIHtcbiAgICBub3RpZmllci5ub3RpZnkoKTtcbiAgfVxufSBjYXRjaCB7XG4gIC8vIElnbm9yZSB1cGRhdGUgY2hlY2sgZXJyb3JzXG59XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtXG4gIC5uYW1lKCdvZmxvdycpXG4gIC5kZXNjcmlwdGlvbignQUktcG93ZXJlZCBDTEkgYXNzaXN0YW50IGZvciB0ZXJtaW5hbCcpXG4gIC52ZXJzaW9uKHBhY2thZ2VKc29uLnZlcnNpb24pXG4gIC5vcHRpb24oJy1tLCAtLW1vZGVsIDxtb2RlbD4nLCAnU3BlY2lmeSB0aGUgQUkgbW9kZWwgdG8gdXNlJylcbiAgLm9wdGlvbignLWQsIC0tZGlyZWN0b3J5IDxkaXI+JywgJ1dvcmtpbmcgZGlyZWN0b3J5JylcbiAgLm9wdGlvbignLS15b2xvJywgJ1J1biBpbiB5b2xvIG1vZGUgKGF1dG8tYXBwcm92ZSBhbGwgb3BlcmF0aW9ucyknKVxuICAub3B0aW9uKCctLXRoaW5raW5nJywgJ1Nob3cgQUkgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MnKVxuICAub3B0aW9uKCctLW5vLXRoaW5raW5nJywgJ0hpZGUgQUkgdGhpbmtpbmcvcmVhc29uaW5nIHByb2Nlc3MnKVxuICAuYXJndW1lbnQoJ1twcm9tcHRdJywgJ1Byb21wdCB0byBzZW5kIHRvIEFJIChzdGFydHMgaW50ZXJhY3RpdmUgbW9kZSBpZiBub3QgcHJvdmlkZWQpJylcbiAgLmFjdGlvbihhc3luYyAocHJvbXB0LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgICBcbiAgICAvLyBDaGVjayBhdXRoZW50aWNhdGlvblxuICAgIGlmICghY29uZmlnTWFuYWdlci5pc0F1dGhlbnRpY2F0ZWQoKSkge1xuICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdXZWxjb21lIHRvIG9mbG93ISBMZXRcXCdzIGdldCB5b3Ugc2V0IHVwLicpKTtcbiAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgIGF3YWl0IHJ1bkF1dGhGbG93KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChvcHRpb25zLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpbmtpbmcgbW9kZSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy50aGlua2luZyA9PT0gdHJ1ZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRoaW5raW5nID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAvLyBTaW5nbGUgY29tbWFuZCBtb2RlXG4gICAgICBhd2FpdCBydW5TaW5nbGVDb21tYW5kKHByb21wdCwge1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJhY3RpdmUgbW9kZVxuICAgICAgYXdhaXQgc3RhcnRJbnRlcmFjdGl2ZU1vZGUoe1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4vLyBBdXRoIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2F1dGgnKVxuICAuZGVzY3JpcHRpb24oJ0NvbmZpZ3VyZSBhdXRoZW50aWNhdGlvbicpXG4gIC5vcHRpb24oJy0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdQcm92aWRlciAob3BlbmFpLCBkZWVwc2VlaywgcXdlbiwgZXRjLiknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgYXdhaXQgcnVuQXV0aEZsb3cob3B0aW9ucy5wcm92aWRlcik7XG4gIH0pO1xuXG4vLyBDb25maWcgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnY29uZmlnJylcbiAgLmRlc2NyaXB0aW9uKCdWaWV3IG9yIGVkaXQgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy0tbGlzdCcsICdMaXN0IGN1cnJlbnQgY29uZmlndXJhdGlvbicpXG4gIC5vcHRpb24oJy0tc2V0IDxrZXk9dmFsdWU+JywgJ1NldCBhIGNvbmZpZ3VyYXRpb24gdmFsdWUnKVxuICAub3B0aW9uKCctLXRoaW5raW5nJywgJ1RvZ2dsZSB0aGlua2luZyBwcm9jZXNzIGRpc3BsYXknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgICBcbiAgICBpZiAob3B0aW9ucy5saXN0KSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCdDdXJyZW50IENvbmZpZ3VyYXRpb246JykpO1xuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY29uZmlnTWFuYWdlci5nZXRBbGwoKSwgbnVsbCwgMikpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50aGlua2luZykge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyAnT04nIDogJ09GRid9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZXQpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbnMuc2V0LnNwbGl0KCc9Jyk7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldChrZXkgYXMgYW55LCB2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgU2V0ICR7a2V5fSA9ICR7dmFsdWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gJ09OJyA6ICdPRkYnfWApO1xuICAgIH1cbiAgfSk7XG5cbi8vIE1vZGVscyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdtb2RlbHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgYXZhaWxhYmxlIEFJIG1vZGVscycpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGxpc3RNb2RlbHMoKTtcbiAgfSk7XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkF1dGhGbG93KHByb3ZpZGVyPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGlucXVpcmVyID0gcmVxdWlyZSgnaW5xdWlyZXInKTtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcblxuICBpZiAoIXByb3ZpZGVyKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ3Byb3ZpZGVyJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBBSSBwcm92aWRlcjonLFxuICAgICAgICBjaG9pY2VzOiBbXG4gICAgICAgICAgeyBuYW1lOiAn8J+MkCBPcGVuQUkgKE9mZmljaWFsIEFQSSknLCB2YWx1ZTogJ29wZW5haScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn5SnIEN1c3RvbSAoT3BlbkFJLWNvbXBhdGlibGUpJywgdmFsdWU6ICdjdXN0b20nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIOWbveWGheaooeWeiyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnLCB2YWx1ZTogJ3NlcGFyYXRvcicsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgRGVlcFNlZWsgKOa3seW6puaxgue0oikgLSDmjqjojZDmjqjnkIbmqKHlnosnLCB2YWx1ZTogJ2RlZXBzZWVrJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFF3ZW4gKOmAmuS5ieWNg+mXriknLCB2YWx1ZTogJ3F3ZW4nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgR0xNICjmmbrosLEpJywgdmFsdWU6ICd6aGlwdScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBCYWljaHVhbiAo55m+5bedKScsIHZhbHVlOiAnYmFpY2h1YW4nIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgWWkgKOmbtuS4gOS4h+eJqSknLCB2YWx1ZTogJ3lpJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIE1vb25zaG90ICjmnIjkuYvmmpfpnaIvS2ltaSknLCB2YWx1ZTogJ21vb25zaG90JyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFNpbGljb25GbG93ICjnoYXln7rmtYHliqgpJywgdmFsdWU6ICdzaWxpY29uZmxvdycgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgXSk7XG4gICAgcHJvdmlkZXIgPSBhbnN3ZXJzLnByb3ZpZGVyO1xuICB9XG5cbiAgLy8gT3BlbkFJXG4gIGlmIChwcm92aWRlciA9PT0gJ29wZW5haScpIHtcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6ICdFbnRlciB5b3VyIE9wZW5BSSBBUEkga2V5OicsXG4gICAgICAgIG1hc2s6ICcqJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICBtZXNzYWdlOiAnU2VsZWN0IGRlZmF1bHQgbW9kZWw6JyxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICdncHQtNG8nLFxuICAgICAgICAgICdncHQtNG8tbWluaScsXG4gICAgICAgICAgJ2dwdC00LXR1cmJvJyxcbiAgICAgICAgICAnZ3B0LTMuNS10dXJibycsXG4gICAgICAgICAgJ28xLXByZXZpZXcnLFxuICAgICAgICAgICdvMS1taW5pJ1xuICAgICAgICBdLFxuICAgICAgICBkZWZhdWx0OiAnZ3B0LTRvJ1xuICAgICAgfVxuICAgIF0pO1xuXG4gICAgY29uZmlnTWFuYWdlci5zZXRBdXRoKHtcbiAgICAgIHByb3ZpZGVyOiAnb3BlbmFpJyxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBtb2RlbDogYW5zd2Vycy5tb2RlbFxuICAgIH0pO1xuICAgIGNvbmZpZ01hbmFnZXIuc2V0RGVmYXVsdE1vZGVsKGFuc3dlcnMubW9kZWwpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKckyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gIH0gXG4gIC8vIEN1c3RvbVxuICBlbHNlIGlmIChwcm92aWRlciA9PT0gJ2N1c3RvbScpIHtcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogJ2Jhc2VVcmwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgQVBJIGJhc2UgVVJMOicsXG4gICAgICAgIGRlZmF1bHQ6ICdodHRwczovL2FwaS5vcGVuYWkuY29tL3YxJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6ICdFbnRlciB5b3VyIEFQSSBrZXk6JyxcbiAgICAgICAgbWFzazogJyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgZGVmYXVsdCBtb2RlbCBuYW1lOicsXG4gICAgICAgIGRlZmF1bHQ6ICdncHQtNG8nXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6ICdjdXN0b20nLFxuICAgICAgYXBpS2V5OiBhbnN3ZXJzLmFwaUtleSxcbiAgICAgIGJhc2VVcmw6IGFuc3dlcnMuYmFzZVVybCxcbiAgICAgIG1vZGVsOiBhbnN3ZXJzLm1vZGVsXG4gICAgfSk7XG4gICAgY29uZmlnTWFuYWdlci5zZXREZWZhdWx0TW9kZWwoYW5zd2Vycy5tb2RlbCk7XG5cbiAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbignXFxu4pyTIEF1dGhlbnRpY2F0aW9uIGNvbmZpZ3VyZWQgc3VjY2Vzc2Z1bGx5IScpKTtcbiAgfVxuICAvLyDlm73lhoXmqKHlnotcbiAgZWxzZSBpZiAoQ0hJTkVTRV9NT0RFTFNbcHJvdmlkZXIgYXMga2V5b2YgdHlwZW9mIENISU5FU0VfTU9ERUxTXSkge1xuICAgIGNvbnN0IG1vZGVsQ29uZmlnID0gQ0hJTkVTRV9NT0RFTFNbcHJvdmlkZXIgYXMga2V5b2YgdHlwZW9mIENISU5FU0VfTU9ERUxTXTtcbiAgICBcbiAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKGBcXG7phY3nva4gJHttb2RlbENvbmZpZy5uYW1lfWApKTtcbiAgICBcbiAgICBjb25zdCBhbnN3ZXJzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgbmFtZTogJ2FwaUtleScsXG4gICAgICAgIG1lc3NhZ2U6IGBFbnRlciB5b3VyICR7bW9kZWxDb25maWcubmFtZX0gQVBJIGtleTpgLFxuICAgICAgICBtYXNrOiAnKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBkZWZhdWx0IG1vZGVsOicsXG4gICAgICAgIGNob2ljZXM6IG1vZGVsQ29uZmlnLm1vZGVscyxcbiAgICAgICAgZGVmYXVsdDogbW9kZWxDb25maWcubW9kZWxzWzBdXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyIGFzIGFueSxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBtb2RlbENvbmZpZy5iYXNlVXJsLFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inJMgJHttb2RlbENvbmZpZy5uYW1lfSDphY3nva7miJDlip8hYCkpO1xuICAgIFxuICAgIC8vIERlZXBTZWVr54m55q6K5o+Q56S6XG4gICAgaWYgKHByb3ZpZGVyID09PSAnZGVlcHNlZWsnICYmIGFuc3dlcnMubW9kZWwgPT09ICdkZWVwc2Vlay1yZWFzb25lcicpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygn8J+SoSDmj5DnpLo6IGRlZXBzZWVrLXJlYXNvbmVyIOaUr+aMgeaYvuekuuaAneiAg+i/h+eoi++8jOS9v+eUqCAtLXRoaW5raW5nIOW8gOWQrycpKTtcbiAgICB9XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGlmICghYXV0aCkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLnJlZCgnTm90IGF1dGhlbnRpY2F0ZWQuIFJ1biBgb2Zsb3cgYXV0aGAgZmlyc3QuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgTW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcXG4nKSk7XG5cbiAgLy8gT3BlbkFJIE1vZGVsc1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfwn4yQIE9wZW5BSSBNb2RlbHM6JykpO1xuICBjb25zdCBvcGVuYWlNb2RlbHMgPSBbXG4gICAgeyBpZDogJ2dwdC00bycsIGRlc2M6ICdNb3N0IGNhcGFibGUgR1BULTQgbW9kZWwnIH0sXG4gICAgeyBpZDogJ2dwdC00by1taW5pJywgZGVzYzogJ0Zhc3QgYW5kIGFmZm9yZGFibGUnIH0sXG4gICAgeyBpZDogJ2dwdC00LXR1cmJvJywgZGVzYzogJ1ByZXZpb3VzIEdQVC00IHZlcnNpb24nIH0sXG4gICAgeyBpZDogJ2dwdC0zLjUtdHVyYm8nLCBkZXNjOiAnRmFzdCBhbmQgY2hlYXAnIH0sXG4gICAgeyBpZDogJ28xLXByZXZpZXcnLCBkZXNjOiAnQWR2YW5jZWQgcmVhc29uaW5nJyB9LFxuICAgIHsgaWQ6ICdvMS1taW5pJywgZGVzYzogJ0VmZmljaWVudCByZWFzb25pbmcnIH1cbiAgXTtcbiAgb3BlbmFpTW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IG0uaWQgPT09IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgPyBjaGFsay5ncmVlbignKiAnKSA6ICcgICc7XG4gICAgY29uc29sZS5sb2coYCR7Y3VycmVudH0ke20uaWR9IC0gJHtjaGFsay5ncmF5KG0uZGVzYyl9YCk7XG4gIH0pO1xuXG4gIC8vIOWbveWGheaooeWei1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ/Cfh6jwn4ezIOWbveWGheW8gOa6kOaooeWeizpcXG4nKSk7XG5cbiAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKENISU5FU0VfTU9ERUxTKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYCAgJHtjb25maWcubmFtZX1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgIEFQSTogJHtjb25maWcuYmFzZVVybH1gKSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGNvbmZpZy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsSWQgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyBtIDogbS5pZDtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHR5cGVvZiBtID09PSAnc3RyaW5nJyA/IG0gOiBtLm5hbWU7XG4gICAgICBjb25zdCBtb2RlbERlc2MgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyAnJyA6IChtIGFzIGFueSkuZGVzYztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbElkID09PSBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpID8gY2hhbGsuZ3JlZW4oJyogJykgOiAnICAgICc7XG4gICAgICBjb25zb2xlLmxvZyhgJHtjdXJyZW50fSR7bW9kZWxJZH0gLSAke2NoYWxrLmdyYXkobW9kZWxOYW1lKX0ke21vZGVsRGVzYyA/IGNoYWxrLmdyYXkoYCAoJHttb2RlbERlc2N9KWApIDogJyd9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjemFjee9rlxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKSk7XG4gIGNvbnNvbGUubG9nKGBDdXJyZW50IG1vZGVsOiAke2NoYWxrLmdyZWVuKGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkpfWApO1xuICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gY2hhbGsuZ3JlZW4oJ09OJykgOiBjaGFsay5ncmF5KCdPRkYnKX1gKTtcbiAgY29uc29sZS5sb2coJycpO1xufVxuXG5wcm9ncmFtLnBhcnNlKCk7Il19
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEseUNBQW9DO0FBQ3BDLCtCQUErRDtBQUMvRCx5Q0FBa0U7QUFDbEUsa0RBQTBCO0FBQzFCLHVDQUF5QjtBQUN6QiwyQ0FBNkI7QUFFN0IsZ0NBQWdDO0FBQ2hDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFMUUsbUVBQW1FO0FBQ25FLElBQUksQ0FBQztJQUNILE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQixDQUFDO0FBQ0gsQ0FBQztBQUFDLE1BQU0sQ0FBQztJQUNQLDZCQUE2QjtBQUMvQixDQUFDO0FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7QUFFOUIsT0FBTztLQUNKLElBQUksQ0FBQyxPQUFPLENBQUM7S0FDYixXQUFXLENBQUMsdUNBQXVDLENBQUM7S0FDcEQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7S0FDNUIsTUFBTSxDQUFDLHFCQUFxQixFQUFFLDZCQUE2QixDQUFDO0tBQzVELE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxtQkFBbUIsQ0FBQztLQUNwRCxNQUFNLENBQUMs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Q0FBQztBQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBzdGFydEludGVyYWN0aXZlTW9kZSwgcnVuU2luZ2xlQ29tbWFuZCB9IGZyb20gJy4vY2xpJztcbmltcG9ydCB7IGdldENvbmZpZ01hbmFnZXIsIENISU5FU0VfTU9ERUxTIH0gZnJvbSAnQG9mbG93LWFpL2NvcmUnO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbi8vIFJlYWQgcGFja2FnZS5qc29uIGZvciB2ZXJzaW9uXG5jb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncGFja2FnZS5qc29uJyk7XG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgJ3V0Zi04JykpO1xuXG4vLyBTaW1wbGUgdXBkYXRlIGNoZWNrICh3aXRob3V0IHVwZGF0ZS1ub3RpZmllciBkdWUgdG8gdHlwZSBpc3N1ZXMpXG50cnkge1xuICBjb25zdCB1cGRhdGVOb3RpZmllciA9IHJlcXVpcmUoJ3VwZGF0ZS1ub3RpZmllcicpO1xuICBjb25zdCBub3RpZmllciA9IHVwZGF0ZU5vdGlmaWVyKHsgcGtnOiBwYWNrYWdlSnNvbiB9KTtcbiAgaWYgKG5vdGlmaWVyLm5vdGlmeSkge1xuICAgIG5vdGlmaWVyLm5vdGlmeSgpO1xuICB9XG59IGNhdGNoIHtcbiAgLy8gSWdub3JlIHVwZGF0ZSBjaGVjayBlcnJvcnNcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW1cbiAgLm5hbWUoJ29mbG93JylcbiAgLmRlc2NyaXB0aW9uKCdBSS1wb3dlcmVkIENMSSBhc3Npc3RhbnQgZm9yIHRlcm1pbmFsJylcbiAgLnZlcnNpb24ocGFja2FnZUpzb24udmVyc2lvbilcbiAgLm9wdGlvbignLW0sIC0tbW9kZWwgPG1vZGVsPicsICdTcGVjaWZ5IHRoZSBBSSBtb2RlbCB0byB1c2UnKVxuICAub3B0aW9uKCctZCwgLS1kaXJlY3RvcnkgPGRpcj4nLCAnV29ya2luZyBkaXJlY3RvcnknKVxuICAub3B0aW9uKCctLXlvbG8nLCAnUnVuIGluIHlvbG8gbW9kZSAoYXV0by1hcHByb3ZlIGFsbCBvcGVyYXRpb25zKScpXG4gIC5vcHRpb24oJy0tdGhpbmtpbmcnLCAnU2hvdyBBSSB0aGlua2luZy9yZWFzb25pbmcgcHJvY2VzcycpXG4gIC5vcHRpb24oJy0tbm8tdGhpbmtpbmcnLCAnSGlkZSBBSSB0aGlua2luZy9yZWFzb25pbmcgcHJvY2VzcycpXG4gIC5hcmd1bWVudCgnW3Byb21wdF0nLCAnUHJvbXB0IHRvIHNlbmQgdG8gQUkgKHN0YXJ0cyBpbnRlcmFjdGl2ZSBtb2RlIGlmIG5vdCBwcm92aWRlZCknKVxuICAuYWN0aW9uKGFzeW5jIChwcm9tcHQsIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICAgIFxuICAgIC8vIENoZWNrIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKCFjb25maWdNYW5hZ2VyLmlzQXV0aGVudGljYXRlZCgpKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1dlbGNvbWUgdG8gb2Zsb3chIExldFxcJ3MgZ2V0IHlvdSBzZXQgdXAuJykpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc3QgYXV0aFN1Y2Nlc3MgPSBhd2FpdCBydW5BdXRoRmxvdygpO1xuICAgICAgXG4gICAgICAvLyDjgJDkv67lpI3jgJHorqTor4HmiJDlip/lkI7lkK/liqjkuqTkupLmqKHlvI9cbiAgICAgIGlmIChhdXRoU3VjY2Vzcykge1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5TdGFydGluZyBvZmxvdyBDTEkuLi5cXG4nKSk7XG4gICAgICAgIGF3YWl0IHN0YXJ0SW50ZXJhY3RpdmVNb2RlKHtcbiAgICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgICB5b2xvOiBvcHRpb25zLnlvbG9cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2V0IG1vZGVsIGlmIHNwZWNpZmllZFxuICAgIGlmIChvcHRpb25zLm1vZGVsKSB7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChvcHRpb25zLm1vZGVsKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhpbmtpbmcgbW9kZSBpZiBzcGVjaWZpZWRcbiAgICBpZiAob3B0aW9ucy50aGlua2luZyA9PT0gdHJ1ZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnRoaW5raW5nID09PSBmYWxzZSkge1xuICAgICAgY29uZmlnTWFuYWdlci5zZXRTaG93VGhpbmtpbmcoZmFsc2UpO1xuICAgIH1cblxuICAgIC8vIFNldCB3b3JraW5nIGRpcmVjdG9yeVxuICAgIGNvbnN0IHdvcmtpbmdEaXIgPSBvcHRpb25zLmRpcmVjdG9yeSB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIHByb2Nlc3MuY2hkaXIod29ya2luZ0Rpcik7XG5cbiAgICBpZiAocHJvbXB0KSB7XG4gICAgICAvLyBTaW5nbGUgY29tbWFuZCBtb2RlXG4gICAgICBhd2FpdCBydW5TaW5nbGVDb21tYW5kKHByb21wdCwge1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW50ZXJhY3RpdmUgbW9kZVxuICAgICAgYXdhaXQgc3RhcnRJbnRlcmFjdGl2ZU1vZGUoe1xuICAgICAgICBtb2RlbDogb3B0aW9ucy5tb2RlbCxcbiAgICAgICAgeW9sbzogb3B0aW9ucy55b2xvXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4vLyBBdXRoIGNvbW1hbmRcbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2F1dGgnKVxuICAuZGVzY3JpcHRpb24oJ0NvbmZpZ3VyZSBhdXRoZW50aWNhdGlvbicpXG4gIC5vcHRpb24oJy0tcHJvdmlkZXIgPHByb3ZpZGVyPicsICdQcm92aWRlciAob3BlbmFpLCBkZWVwc2VlaywgcXdlbiwgZXRjLiknKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IHJ1bkF1dGhGbG93KG9wdGlvbnMucHJvdmlkZXIpO1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCdcXG5Zb3UgY2FuIG5vdyBydW4gXCJvZmxvd1wiIHRvIHN0YXJ0IHRoZSBDTEkuJykpO1xuICAgIH1cbiAgfSk7XG5cbi8vIENvbmZpZyBjb21tYW5kXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjb25maWcnKVxuICAuZGVzY3JpcHRpb24oJ1ZpZXcgb3IgZWRpdCBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLS1saXN0JywgJ0xpc3QgY3VycmVudCBjb25maWd1cmF0aW9uJylcbiAgLm9wdGlvbignLS1zZXQgPGtleT12YWx1ZT4nLCAnU2V0IGEgY29uZmlndXJhdGlvbiB2YWx1ZScpXG4gIC5vcHRpb24oJy0tdGhpbmtpbmcnLCAnVG9nZ2xlIHRoaW5raW5nIHByb2Nlc3MgZGlzcGxheScpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb25maWdNYW5hZ2VyID0gZ2V0Q29uZmlnTWFuYWdlcigpO1xuICAgIFxuICAgIGlmIChvcHRpb25zLmxpc3QpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ0N1cnJlbnQgQ29uZmlndXJhdGlvbjonKSk7XG4gICAgICBjb25zdCBjb25maWcgPSBjb25maWdNYW5hZ2VyLmdldEFsbCgpO1xuICAgICAgLy8g6ZqQ6JeP5pWP5oSf5L+h5oGvXG4gICAgICBjb25zdCBzYWZlQ29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgICAgIGlmIChzYWZlQ29uZmlnLmF1dGg/LmFwaUtleSkge1xuICAgICAgICBzYWZlQ29uZmlnLmF1dGggPSB7IC4uLnNhZmVDb25maWcuYXV0aCwgYXBpS2V5OiAnKioqKicgKyBzYWZlQ29uZmlnLmF1dGguYXBpS2V5LnNsaWNlKC00KSB9O1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoc2FmZUNvbmZpZywgbnVsbCwgMikpO1xuICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy50aGlua2luZykge1xuICAgICAgY29uc3QgbmV3VmFsdWUgPSBjb25maWdNYW5hZ2VyLnRvZ2dsZVNob3dUaGlua2luZygpO1xuICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oYOKckyBUaGlua2luZyBwcm9jZXNzIGRpc3BsYXk6ICR7bmV3VmFsdWUgPyAnT04nIDogJ09GRid9YCkpO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5zZXQpIHtcbiAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IG9wdGlvbnMuc2V0LnNwbGl0KCc9Jyk7XG4gICAgICBjb25maWdNYW5hZ2VyLnNldChrZXkgYXMgYW55LCB2YWx1ZSk7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgU2V0ICR7a2V5fSA9ICR7dmFsdWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29uZmlnIGZpbGU6ICR7Y29uZmlnTWFuYWdlci5nZXRDb25maWdQYXRoKCl9YCk7XG4gICAgICBjb25zb2xlLmxvZyhgVGhpbmtpbmcgZGlzcGxheTogJHtjb25maWdNYW5hZ2VyLmdldFNob3dUaGlua2luZygpID8gJ09OJyA6ICdPRkYnfWApO1xuICAgICAgY29uc29sZS5sb2coYEN1cnJlbnQgbW9kZWw6ICR7Y29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKX1gKTtcbiAgICB9XG4gIH0pO1xuXG4vLyBNb2RlbHMgY29tbWFuZFxucHJvZ3JhbVxuICAuY29tbWFuZCgnbW9kZWxzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IGF2YWlsYWJsZSBBSSBtb2RlbHMnKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBsaXN0TW9kZWxzKCk7XG4gIH0pO1xuXG5hc3luYyBmdW5jdGlvbiBydW5BdXRoRmxvdyhwcm92aWRlcj86IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBpbnF1aXJlciA9IHJlcXVpcmUoJ2lucXVpcmVyJyk7XG4gIGNvbnN0IGNvbmZpZ01hbmFnZXIgPSBnZXRDb25maWdNYW5hZ2VyKCk7XG5cbiAgaWYgKCFwcm92aWRlcikge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIG5hbWU6ICdwcm92aWRlcicsXG4gICAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgQUkgcHJvdmlkZXI6JyxcbiAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgIHsgbmFtZTogJ/CfjJAgT3BlbkFJIChPZmZpY2lhbCBBUEkpJywgdmFsdWU6ICdvcGVuYWknIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+UpyBDdXN0b20gKE9wZW5BSS1jb21wYXRpYmxlKScsIHZhbHVlOiAnY3VzdG9tJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ+KUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCDlm73lhoXmqKHlnosg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAJywgdmFsdWU6ICdzZXBhcmF0b3InLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIERlZXBTZWVrICjmt7HluqbmsYLntKIpIC0g5o6o6I2Q5o6o55CG5qih5Z6LJywgdmFsdWU6ICdkZWVwc2VlaycgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBRd2VuICjpgJrkuYnljYPpl64pJywgdmFsdWU6ICdxd2VuJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIEdMTSAo5pm66LCxKScsIHZhbHVlOiAnemhpcHUnIH0sXG4gICAgICAgICAgeyBuYW1lOiAn8J+HqPCfh7MgQmFpY2h1YW4gKOeZvuW3nSknLCB2YWx1ZTogJ2JhaWNodWFuJyB9LFxuICAgICAgICAgIHsgbmFtZTogJ/Cfh6jwn4ezIFlpICjpm7bkuIDkuIfniakpJywgdmFsdWU6ICd5aScgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBNb29uc2hvdCAo5pyI5LmL5pqX6Z2iL0tpbWkpJywgdmFsdWU6ICdtb29uc2hvdCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICfwn4eo8J+HsyBTaWxpY29uRmxvdyAo56GF5Z+65rWB5YqoKScsIHZhbHVlOiAnc2lsaWNvbmZsb3cnIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIF0pO1xuICAgIHByb3ZpZGVyID0gYW5zd2Vycy5wcm92aWRlcjtcbiAgfVxuXG4gIC8vIE9wZW5BSVxuICBpZiAocHJvdmlkZXIgPT09ICdvcGVuYWknKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBPcGVuQUkgQVBJIGtleTonLFxuICAgICAgICBtYXNrOiAnKidcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ1NlbGVjdCBkZWZhdWx0IG1vZGVsOicsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAnZ3B0LTRvJyxcbiAgICAgICAgICAnZ3B0LTRvLW1pbmknLFxuICAgICAgICAgICdncHQtNC10dXJibycsXG4gICAgICAgICAgJ2dwdC0zLjUtdHVyYm8nLFxuICAgICAgICAgICdvMS1wcmV2aWV3JyxcbiAgICAgICAgICAnbzEtbWluaSdcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdDogJ2dwdC00bydcbiAgICAgIH1cbiAgICBdKTtcblxuICAgIGNvbmZpZ01hbmFnZXIuc2V0QXV0aCh7XG4gICAgICBwcm92aWRlcjogJ29wZW5haScsXG4gICAgICBhcGlLZXk6IGFuc3dlcnMuYXBpS2V5LFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCdcXG7inJMgQXV0aGVudGljYXRpb24gY29uZmlndXJlZCBzdWNjZXNzZnVsbHkhJykpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IFxuICAvLyBDdXN0b21cbiAgZWxzZSBpZiAocHJvdmlkZXIgPT09ICdjdXN0b20nKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdiYXNlVXJsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIEFQSSBiYXNlIFVSTDonLFxuICAgICAgICBkZWZhdWx0OiAnaHR0cHM6Ly9hcGkub3BlbmFpLmNvbS92MScsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmICghaW5wdXQpIHJldHVybiAnQmFzZSBVUkwgaXMgcmVxdWlyZWQnO1xuICAgICAgICAgIGlmICghaW5wdXQuc3RhcnRzV2l0aCgnaHR0cCcpKSByZXR1cm4gJ1VSTCBtdXN0IHN0YXJ0IHdpdGggaHR0cDovLyBvciBodHRwczovLyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBBUEkga2V5OicsXG4gICAgICAgIG1hc2s6ICcqJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgbmFtZTogJ21vZGVsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIGRlZmF1bHQgbW9kZWwgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiAnZ3B0LTRvJ1xuICAgICAgfVxuICAgIF0pO1xuXG4gICAgY29uZmlnTWFuYWdlci5zZXRBdXRoKHtcbiAgICAgIHByb3ZpZGVyOiAnY3VzdG9tJyxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBhbnN3ZXJzLmJhc2VVcmwsXG4gICAgICBtb2RlbDogYW5zd2Vycy5tb2RlbFxuICAgIH0pO1xuICAgIGNvbmZpZ01hbmFnZXIuc2V0RGVmYXVsdE1vZGVsKGFuc3dlcnMubW9kZWwpO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ1xcbuKckyBBdXRoZW50aWNhdGlvbiBjb25maWd1cmVkIHN1Y2Nlc3NmdWxseSEnKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgLy8g5Zu95YaF5qih5Z6LXG4gIGVsc2UgaWYgKENISU5FU0VfTU9ERUxTW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBDSElORVNFX01PREVMU10pIHtcbiAgICBjb25zdCBtb2RlbENvbmZpZyA9IENISU5FU0VfTU9ERUxTW3Byb3ZpZGVyIGFzIGtleW9mIHR5cGVvZiBDSElORVNFX01PREVMU107XG4gICAgXG4gICAgY29uc29sZS5sb2coY2hhbGsuY3lhbihgXFxu6YWN572uICR7bW9kZWxDb25maWcubmFtZX1gKSk7XG4gICAgXG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICAgIG5hbWU6ICdhcGlLZXknLFxuICAgICAgICBtZXNzYWdlOiBgRW50ZXIgeW91ciAke21vZGVsQ29uZmlnLm5hbWV9IEFQSSBrZXk6YCxcbiAgICAgICAgbWFzazogJyonXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgIG5hbWU6ICdtb2RlbCcsXG4gICAgICAgIG1lc3NhZ2U6ICdTZWxlY3QgZGVmYXVsdCBtb2RlbDonLFxuICAgICAgICBjaG9pY2VzOiBtb2RlbENvbmZpZy5tb2RlbHMubWFwKChtOiBhbnkpID0+ICh7XG4gICAgICAgICAgbmFtZTogYCR7bS5pZH0gLSAke20ubmFtZX1gLFxuICAgICAgICAgIHZhbHVlOiBtLmlkXG4gICAgICAgIH0pKSxcbiAgICAgICAgZGVmYXVsdDogbW9kZWxDb25maWcubW9kZWxzWzBdLmlkXG4gICAgICB9XG4gICAgXSk7XG5cbiAgICBjb25maWdNYW5hZ2VyLnNldEF1dGgoe1xuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyIGFzIGFueSxcbiAgICAgIGFwaUtleTogYW5zd2Vycy5hcGlLZXksXG4gICAgICBiYXNlVXJsOiBtb2RlbENvbmZpZy5iYXNlVXJsLFxuICAgICAgbW9kZWw6IGFuc3dlcnMubW9kZWxcbiAgICB9KTtcbiAgICBjb25maWdNYW5hZ2VyLnNldERlZmF1bHRNb2RlbChhbnN3ZXJzLm1vZGVsKTtcblxuICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBcXG7inJMgJHttb2RlbENvbmZpZy5uYW1lfSDphY3nva7miJDlip8hYCkpO1xuICAgIFxuICAgIC8vIERlZXBTZWVr54m55q6K5o+Q56S6XG4gICAgaWYgKHByb3ZpZGVyID09PSAnZGVlcHNlZWsnICYmIGFuc3dlcnMubW9kZWwgPT09ICdkZWVwc2Vlay1yZWFzb25lcicpIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygn8J+SoSDmj5DnpLo6IGRlZXBzZWVrLXJlYXNvbmVyIOaUr+aMgeaYvuekuuaAneiAg+i/h+eoi++8jOS9v+eUqCAtLXRoaW5raW5nIOW8gOWQrycpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgXG4gIHJldHVybiBmYWxzZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdE1vZGVscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnTWFuYWdlciA9IGdldENvbmZpZ01hbmFnZXIoKTtcbiAgY29uc3QgYXV0aCA9IGNvbmZpZ01hbmFnZXIuZ2V0QXV0aCgpO1xuXG4gIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoJ1xcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCcpKTtcbiAgY29uc29sZS5sb2coY2hhbGsuYm9sZCgnICAgICAgICAgICAgICAgICAgICBBdmFpbGFibGUgTW9kZWxzICAgICAgICAgICAgICAgICAgICAgICAgJykpO1xuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcXG4nKSk7XG5cbiAgLy8gT3BlbkFJIE1vZGVsc1xuICBjb25zb2xlLmxvZyhjaGFsay5jeWFuKCfwn4yQIE9wZW5BSSBNb2RlbHM6JykpO1xuICBjb25zdCBvcGVuYWlNb2RlbHMgPSBbXG4gICAgeyBpZDogJ2dwdC00bycsIGRlc2M6ICdNb3N0IGNhcGFibGUgR1BULTQgbW9kZWwnIH0sXG4gICAgeyBpZDogJ2dwdC00by1taW5pJywgZGVzYzogJ0Zhc3QgYW5kIGFmZm9yZGFibGUnIH0sXG4gICAgeyBpZDogJ2dwdC00LXR1cmJvJywgZGVzYzogJ1ByZXZpb3VzIEdQVC00IHZlcnNpb24nIH0sXG4gICAgeyBpZDogJ2dwdC0zLjUtdHVyYm8nLCBkZXNjOiAnRmFzdCBhbmQgY2hlYXAnIH0sXG4gICAgeyBpZDogJ28xLXByZXZpZXcnLCBkZXNjOiAnQWR2YW5jZWQgcmVhc29uaW5nJyB9LFxuICAgIHsgaWQ6ICdvMS1taW5pJywgZGVzYzogJ0VmZmljaWVudCByZWFzb25pbmcnIH1cbiAgXTtcbiAgb3BlbmFpTW9kZWxzLmZvckVhY2gobSA9PiB7XG4gICAgY29uc3QgY3VycmVudCA9IG0uaWQgPT09IGNvbmZpZ01hbmFnZXIuZ2V0RGVmYXVsdE1vZGVsKCkgPyBjaGFsay5ncmVlbignKiAnKSA6ICcgICc7XG4gICAgY29uc29sZS5sb2coYCR7Y3VycmVudH0ke20uaWR9IC0gJHtjaGFsay5ncmF5KG0uZGVzYyl9YCk7XG4gIH0pO1xuXG4gIC8vIOWbveWGheaooeWei1xuICBjb25zb2xlLmxvZygnJyk7XG4gIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oJ/Cfh6jwn4ezIOWbveWGheW8gOa6kOaooeWeizpcXG4nKSk7XG5cbiAgZm9yIChjb25zdCBba2V5LCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKENISU5FU0VfTU9ERUxTKSkge1xuICAgIGNvbnNvbGUubG9nKGNoYWxrLmJvbGQoYCAgJHtjb25maWcubmFtZX1gKSk7XG4gICAgY29uc29sZS5sb2coY2hhbGsuZ3JheShgICAgIEFQSTogJHtjb25maWcuYmFzZVVybH1gKSk7XG4gICAgZm9yIChjb25zdCBtIG9mIGNvbmZpZy5tb2RlbHMpIHtcbiAgICAgIGNvbnN0IG1vZGVsSWQgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyBtIDogbS5pZDtcbiAgICAgIGNvbnN0IG1vZGVsTmFtZSA9IHR5cGVvZiBtID09PSAnc3RyaW5nJyA/IG0gOiBtLm5hbWU7XG4gICAgICBjb25zdCBtb2RlbERlc2MgPSB0eXBlb2YgbSA9PT0gJ3N0cmluZycgPyAnJyA6IChtIGFzIGFueSkuZGVzYztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbElkID09PSBjb25maWdNYW5hZ2VyLmdldERlZmF1bHRNb2RlbCgpID8gY2hhbGsuZ3JlZW4oJyogJykgOiAnICAgICc7XG4gICAgICBjb25zb2xlLmxvZyhgJHtjdXJyZW50fSR7bW9kZWxJZH0gLSAke2NoYWxrLmdyYXkobW9kZWxOYW1lKX0ke21vZGVsRGVzYyA/IGNoYWxrLmdyYXkoYCAoJHttb2RlbERlc2N9KWApIDogJyd9YCk7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgfVxuXG4gIC8vIOaYvuekuuW9k+WJjemFjee9rlxuICBjb25zb2xlLmxvZyhjaGFsay5ib2xkKCfilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAnKSk7XG4gIGlmIChhdXRoKSB7XG4gICAgY29uc29sZS5sb2coYEN1cnJlbnQgcHJvdmlkZXI6ICR7Y2hhbGsuZ3JlZW4oYXV0aC5wcm92aWRlcil9YCk7XG4gIH1cbiAgY29uc29sZS5sb2coYEN1cnJlbnQgbW9kZWw6ICR7Y2hhbGsuZ3JlZW4oY29uZmlnTWFuYWdlci5nZXREZWZhdWx0TW9kZWwoKSl9YCk7XG4gIGNvbnNvbGUubG9nKGBUaGlua2luZyBkaXNwbGF5OiAke2NvbmZpZ01hbmFnZXIuZ2V0U2hvd1RoaW5raW5nKCkgPyBjaGFsay5ncmVlbignT04nKSA6IGNoYWxrLmdyYXkoJ09GRicpfWApO1xuICBjb25zb2xlLmxvZygnJyk7XG59XG5cbnByb2dyYW0ucGFyc2UoKTtcbiJdfQ==
@@ -0,0 +1,17 @@
1
+ interface UpdateInfo {
2
+ hasUpdate: boolean;
3
+ currentVersion: string;
4
+ latestVersion: string;
5
+ }
6
+ /**
7
+ * 检查是否有更新
8
+ */
9
+ export declare function checkForUpdates(): Promise<UpdateInfo>;
10
+ /**
11
+ * 执行更新
12
+ */
13
+ export declare function performUpdate(): Promise<{
14
+ success: boolean;
15
+ message: string;
16
+ }>;
17
+ export {};