@nlabs/lex 1.52.0 → 1.52.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/LexConfig.js CHANGED
@@ -153,13 +153,18 @@ export class LexConfig {
153
153
  static addConfigParams(cmd, params) {
154
154
  const nameProperty = '_name';
155
155
  const { environment, outputPath, sourcePath, typescript } = cmd;
156
+ const currentCwd = process.cwd();
156
157
  if (outputPath !== undefined) {
157
158
  params.outputPath = outputPath;
158
- params.outputFullPath = pathResolve(cwd, outputPath);
159
+ params.outputFullPath = pathResolve(currentCwd, outputPath);
160
+ } else if (params.outputPath && !params.outputFullPath) {
161
+ params.outputFullPath = pathResolve(currentCwd, params.outputPath);
159
162
  }
160
163
  if (sourcePath !== undefined) {
161
164
  params.sourcePath = sourcePath;
162
- params.sourceFullPath = pathResolve(cwd, sourcePath);
165
+ params.sourceFullPath = pathResolve(currentCwd, sourcePath);
166
+ } else if (params.sourcePath && !params.sourceFullPath) {
167
+ params.sourceFullPath = pathResolve(currentCwd, params.sourcePath);
163
168
  }
164
169
  if (typescript !== undefined) {
165
170
  params.useTypescript = true;
@@ -328,4 +333,4 @@ _define_property(LexConfig, "config", {
328
333
  ...defaultConfigValues
329
334
  });
330
335
 
331
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBleHRuYW1lIGFzIHBhdGhFeHRuYW1lLFxuICByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsXG4gIHJlc29sdmUgYXMgcGF0aFJlc29sdmVcbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHtnZXREaXJOYW1lLCBnZXRMZXhQYWNrYWdlSnNvblBhdGgsIHJlbGF0aXZlRmlsZVBhdGh9IGZyb20gJy4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi91dGlscy9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcm9vdHM/OiBzdHJpbmdbXTtcbiAgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuICB0cmFuc2Zvcm0/OiBSZWNvcmQ8c3RyaW5nLCBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0+O1xuICB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBtb2R1bGVOYW1lTWFwcGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZXh0ZW5zaW9uc1RvVHJlYXRBc0VzbT86IHN0cmluZ1tdO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VicGFja0NvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGVudHJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG91dHB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtb2R1bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcGx1Z2lucz86IHVua25vd25bXTtcbiAgc3RhdGljUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUNvbmZpZyB7XG4gIHByb3ZpZGVyPzogJ2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1dDQ29uZmlnIHtcbiAganNjPzoge1xuICAgIHBhcnNlcj86IHtcbiAgICAgIHN5bnRheD86ICd0eXBlc2NyaXB0JyB8ICdlY21hc2NyaXB0JztcbiAgICAgIHRzeD86IGJvb2xlYW47XG4gICAgICBkZWNvcmF0b3JzPzogYm9vbGVhbjtcbiAgICAgIGR5bmFtaWNJbXBvcnQ/OiBib29sZWFuO1xuICAgIH07XG4gICAgdGFyZ2V0PzogJ2VzMycgfCAnZXM1JyB8ICdlczIwMTUnIHwgJ2VzMjAxNicgfCAnZXMyMDE3JyB8ICdlczIwMTgnIHwgJ2VzMjAxOScgfCAnZXMyMDIwJyB8ICdlczIwMjEnIHwgJ2VzMjAyMicgfCAnZXMyMDIzJztcbiAgICB0cmFuc2Zvcm0/OiB7XG4gICAgICByZWFjdD86IHtcbiAgICAgICAgcnVudGltZT86ICdhdXRvbWF0aWMnIHwgJ2NsYXNzaWMnO1xuICAgICAgICBwcmFnbWE/OiBzdHJpbmc7XG4gICAgICAgIHByYWdtYUZyYWc/OiBzdHJpbmc7XG4gICAgICAgIHRocm93SWZOYW1lc3BhY2U/OiBib29sZWFuO1xuICAgICAgICBkZXZlbG9wbWVudD86IGJvb2xlYW47XG4gICAgICAgIHVzZUJ1aWx0aW5zPzogYm9vbGVhbjtcbiAgICAgICAgcmVmcmVzaD86IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH07XG4gICAgZXh0ZXJuYWxIZWxwZXJzPzogYm9vbGVhbjtcbiAgICBrZWVwQ2xhc3NOYW1lcz86IGJvb2xlYW47XG4gICAgbG9vc2U/OiBib29sZWFuO1xuICAgIG1pbmlmeT86IHtcbiAgICAgIGNvbXByZXNzPzogYm9vbGVhbjtcbiAgICAgIG1hbmdsZT86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbiAgbW9kdWxlPzoge1xuICAgIHR5cGU/OiAnZXM2JyB8ICdjb21tb25qcycgfCAnYW1kJyB8ICd1bWQnIHwgJ3N5c3RlbWpzJztcbiAgICBzdHJpY3Q/OiBib29sZWFuO1xuICAgIHN0cmljdE1vZGU/OiBib29sZWFuO1xuICAgIGxhenk/OiBib29sZWFuO1xuICAgIG5vSW50ZXJvcD86IGJvb2xlYW47XG4gIH07XG4gIG1pbmlmeT86IGJvb2xlYW47XG4gIHNvdXJjZU1hcHM/OiBib29sZWFuIHwgJ2lubGluZSc7XG4gIGlubGluZVNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcbiAgaXNNb2R1bGU/OiBib29sZWFuO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgY29uZmlnRmlsZT86IHN0cmluZztcbiAgc3djcmM/OiBib29sZWFuO1xuICBlbnY/OiB7XG4gICAgdGFyZ2V0cz86IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBtb2RlPzogJ3VzYWdlJyB8ICdlbnRyeSc7XG4gICAgY29yZUpzPzogc3RyaW5nO1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGR5bmFtaWNJbXBvcnQ/OiBib29sZWFuO1xuICAgIGxvb3NlPzogYm9vbGVhbjtcbiAgICBidWdmaXhlcz86IGJvb2xlYW47XG4gICAgaW5jbHVkZT86IHN0cmluZ1tdO1xuICAgIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbiAgICBmb3JjZUFsbFRyYW5zZm9ybXM/OiBib29sZWFuO1xuICAgIG1vZHVsZXM/OiAnYW1kJyB8ICd1bWQnIHwgJ3N5c3RlbWpzJyB8ICdhdXRvJyB8IGZhbHNlO1xuICAgIHNoaXBwZWRQcm9wb3NhbHM/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExleENvbmZpZ1R5cGUge1xuICBhaT86IEFJQ29uZmlnO1xuICBjb25maWdGaWxlcz86IHN0cmluZ1tdO1xuICBjb3B5RmlsZXM/OiBzdHJpbmdbXTtcbiAgZW50cnlIVE1MPzogc3RyaW5nO1xuICBlbnRyeUpzPzogc3RyaW5nO1xuICBlbnY/OiBvYmplY3Q7XG4gIGVzbGludD86IEVTTGludENvbmZpZztcbiAgZ2l0VXJsPzogc3RyaW5nO1xuICBqZXN0PzogSmVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICBzb3VyY2VGdWxsUGF0aD86IHN0cmluZztcbiAgc291cmNlUGF0aD86IHN0cmluZztcbiAgc3djPzogU1dDQ29uZmlnO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIGplc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIwJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgY29uZmlnTmFtZSk7XG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7c291cmNlRnVsbFBhdGh9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGNvbnN0IHtlbnRyeUpzfSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGgsICdpbmRleC50c3gnKTtcbiAgICAgIGNvbnN0IGhhc0luZGV4VHN4OiBib29sZWFuID0gZXhpc3RzU3luYyhpbmRleFBhdGgpO1xuXG4gICAgICBpZihoYXNJbmRleFRzeCkge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHN4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50cyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9IHVzZVR5cGVzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkICYmIG91dHB1dEZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZCwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uL3RzY29uZmlnLmJhc2UuanNvbicpKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiVVJMIiwiZ2V0RGlyTmFtZSIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlbGF0aXZlRmlsZVBhdGgiLCJsb2ciLCJjd2QiLCJwcm9jZXNzIiwiZGVmYXVsdENvbmZpZ1ZhbHVlcyIsImFpIiwibWF4VG9rZW5zIiwibW9kZWwiLCJwcm92aWRlciIsInRlbXBlcmF0dXJlIiwiY29uZmlnRmlsZXMiLCJjb3B5RmlsZXMiLCJlbnRyeUhUTUwiLCJlbnRyeUpzIiwiZW52IiwiZXNsaW50IiwiamVzdCIsIm91dHB1dEZ1bGxQYXRoIiwib3V0cHV0SGFzaCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlTWFuYWdlciIsInByZXNldCIsInNvdXJjZUZ1bGxQYXRoIiwic291cmNlUGF0aCIsInN3YyIsImlubGluZVNvdXJjZXNDb250ZW50IiwiaXNNb2R1bGUiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0YXJnZXQiLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsIndlYnBhY2siLCJzdGF0aWNQYXRoIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjb25maWdOYW1lIiwicHJvamVjdEJ1aWxkQ29uZmlnIiwicHJvamVjdExpbnRDb25maWciLCJwcm9qZWN0VGVzdENvbmZpZyIsInByb2plY3RDb25maWdQYXRoIiwibGV4RGlyIiwiTGV4Q29uZmlnIiwiZ2V0TGV4RGlyIiwidmFsdWUiLCJjb25maWciLCJpbmRleFBhdGgiLCJoYXNJbmRleFRzeCIsInVwZGF0ZUNvbmZpZyIsInVwZGF0ZWRDb25maWciLCJ1bmRlZmluZWQiLCJDVVJTT1JfSURFIiwiYWRkQ29uZmlnUGFyYW1zIiwiY21kIiwicGFyYW1zIiwibmFtZVByb3BlcnR5IiwiZW52aXJvbm1lbnQiLCJ0eXBlc2NyaXB0IiwiTEVYX0NPTkZJRyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb21tYW5kTmFtZSIsImlzU3RhdGljIiwic3RhdGljIiwicGFyc2VDb25maWciLCJpc1Jvb3QiLCJjbGlOYW1lIiwibGV4Q29uZmlnIiwibGV4Q29uZmlnTmFtZSIsInF1aWV0IiwiZGVidWciLCJjb25maWdGb3JtYXRzIiwiY29uZmlnQmFzZU5hbWUiLCJjb25maWdQYXRoIiwiY29uZmlnRXhpc3RzIiwiZm9ybWF0IiwicG90ZW50aWFsUGF0aCIsImV4dCIsImNvbmZpZ0NvbnRlbnQiLCJjb25maWdKc29uIiwicGFyc2UiLCJkZWZhdWx0IiwiZXJyb3IiLCJtZXNzYWdlIiwiaW5jbHVkZXMiLCJsZXhDdXN0b21Db25maWciLCJmaWxlVXJsIiwiaHJlZiIsImNvbnNvbGUiLCJjaGVja1R5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1BhdGgiLCJkaXJOYW1lIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWxhdGl2ZU91dERpciIsInJlbGF0aXZlUm9vdERpciIsImNoZWNrTGludFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ0xpbnRQYXRoIiwidGVtcGxhdGVQYXRoIiwiY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnVGVz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
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge1xuICBkaXJuYW1lLFxuICBleHRuYW1lIGFzIHBhdGhFeHRuYW1lLFxuICByZWxhdGl2ZSBhcyBwYXRoUmVsYXRpdmUsXG4gIHJlc29sdmUgYXMgcGF0aFJlc29sdmVcbn0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1VSTH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHtnZXREaXJOYW1lLCBnZXRMZXhQYWNrYWdlSnNvblBhdGgsIHJlbGF0aXZlRmlsZVBhdGh9IGZyb20gJy4vdXRpbHMvZmlsZS5qcyc7XG5pbXBvcnQge2xvZ30gZnJvbSAnLi91dGlscy9sb2cuanMnO1xuXG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0Q29uZmlnIHtcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgcm9vdHM/OiBzdHJpbmdbXTtcbiAgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuICB0cmFuc2Zvcm0/OiBSZWNvcmQ8c3RyaW5nLCBbc3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0+O1xuICB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuICBtb2R1bGVOYW1lTWFwcGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZXh0ZW5zaW9uc1RvVHJlYXRBc0VzbT86IHN0cmluZ1tdO1xuICBwcmVzZXQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2VicGFja0NvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGVudHJ5Pzogc3RyaW5nIHwgc3RyaW5nW107XG4gIG91dHB1dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtb2R1bGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcGx1Z2lucz86IHVua25vd25bXTtcbiAgc3RhdGljUGF0aD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBSUNvbmZpZyB7XG4gIHByb3ZpZGVyPzogJ2N1cnNvcicgfCAnY29waWxvdCcgfCAnb3BlbmFpJyB8ICdhbnRocm9waWMnIHwgJ25vbmUnO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIG1vZGVsPzogc3RyaW5nO1xuICBtYXhUb2tlbnM/OiBudW1iZXI7XG4gIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1dDQ29uZmlnIHtcbiAganNjPzoge1xuICAgIHBhcnNlcj86IHtcbiAgICAgIHN5bnRheD86ICd0eXBlc2NyaXB0JyB8ICdlY21hc2NyaXB0JztcbiAgICAgIHRzeD86IGJvb2xlYW47XG4gICAgICBkZWNvcmF0b3JzPzogYm9vbGVhbjtcbiAgICAgIGR5bmFtaWNJbXBvcnQ/OiBib29sZWFuO1xuICAgIH07XG4gICAgdGFyZ2V0PzogJ2VzMycgfCAnZXM1JyB8ICdlczIwMTUnIHwgJ2VzMjAxNicgfCAnZXMyMDE3JyB8ICdlczIwMTgnIHwgJ2VzMjAxOScgfCAnZXMyMDIwJyB8ICdlczIwMjEnIHwgJ2VzMjAyMicgfCAnZXMyMDIzJztcbiAgICB0cmFuc2Zvcm0/OiB7XG4gICAgICByZWFjdD86IHtcbiAgICAgICAgcnVudGltZT86ICdhdXRvbWF0aWMnIHwgJ2NsYXNzaWMnO1xuICAgICAgICBwcmFnbWE/OiBzdHJpbmc7XG4gICAgICAgIHByYWdtYUZyYWc/OiBzdHJpbmc7XG4gICAgICAgIHRocm93SWZOYW1lc3BhY2U/OiBib29sZWFuO1xuICAgICAgICBkZXZlbG9wbWVudD86IGJvb2xlYW47XG4gICAgICAgIHVzZUJ1aWx0aW5zPzogYm9vbGVhbjtcbiAgICAgICAgcmVmcmVzaD86IGJvb2xlYW47XG4gICAgICB9O1xuICAgIH07XG4gICAgZXh0ZXJuYWxIZWxwZXJzPzogYm9vbGVhbjtcbiAgICBrZWVwQ2xhc3NOYW1lcz86IGJvb2xlYW47XG4gICAgbG9vc2U/OiBib29sZWFuO1xuICAgIG1pbmlmeT86IHtcbiAgICAgIGNvbXByZXNzPzogYm9vbGVhbjtcbiAgICAgIG1hbmdsZT86IGJvb2xlYW47XG4gICAgfTtcbiAgfTtcbiAgbW9kdWxlPzoge1xuICAgIHR5cGU/OiAnZXM2JyB8ICdjb21tb25qcycgfCAnYW1kJyB8ICd1bWQnIHwgJ3N5c3RlbWpzJztcbiAgICBzdHJpY3Q/OiBib29sZWFuO1xuICAgIHN0cmljdE1vZGU/OiBib29sZWFuO1xuICAgIGxhenk/OiBib29sZWFuO1xuICAgIG5vSW50ZXJvcD86IGJvb2xlYW47XG4gIH07XG4gIG1pbmlmeT86IGJvb2xlYW47XG4gIHNvdXJjZU1hcHM/OiBib29sZWFuIHwgJ2lubGluZSc7XG4gIGlubGluZVNvdXJjZXNDb250ZW50PzogYm9vbGVhbjtcbiAgaXNNb2R1bGU/OiBib29sZWFuO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgY29uZmlnRmlsZT86IHN0cmluZztcbiAgc3djcmM/OiBib29sZWFuO1xuICBlbnY/OiB7XG4gICAgdGFyZ2V0cz86IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBtb2RlPzogJ3VzYWdlJyB8ICdlbnRyeSc7XG4gICAgY29yZUpzPzogc3RyaW5nO1xuICAgIHBhdGg/OiBzdHJpbmc7XG4gICAgZGVidWc/OiBib29sZWFuO1xuICAgIGR5bmFtaWNJbXBvcnQ/OiBib29sZWFuO1xuICAgIGxvb3NlPzogYm9vbGVhbjtcbiAgICBidWdmaXhlcz86IGJvb2xlYW47XG4gICAgaW5jbHVkZT86IHN0cmluZ1tdO1xuICAgIGV4Y2x1ZGU/OiBzdHJpbmdbXTtcbiAgICBmb3JjZUFsbFRyYW5zZm9ybXM/OiBib29sZWFuO1xuICAgIG1vZHVsZXM/OiAnYW1kJyB8ICd1bWQnIHwgJ3N5c3RlbWpzJyB8ICdhdXRvJyB8IGZhbHNlO1xuICAgIHNoaXBwZWRQcm9wb3NhbHM/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExleENvbmZpZ1R5cGUge1xuICBhaT86IEFJQ29uZmlnO1xuICBjb25maWdGaWxlcz86IHN0cmluZ1tdO1xuICBjb3B5RmlsZXM/OiBzdHJpbmdbXTtcbiAgZW50cnlIVE1MPzogc3RyaW5nO1xuICBlbnRyeUpzPzogc3RyaW5nO1xuICBlbnY/OiBvYmplY3Q7XG4gIGVzbGludD86IEVTTGludENvbmZpZztcbiAgZ2l0VXJsPzogc3RyaW5nO1xuICBqZXN0PzogSmVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICBzb3VyY2VGdWxsUGF0aD86IHN0cmluZztcbiAgc291cmNlUGF0aD86IHN0cmluZztcbiAgc3djPzogU1dDQ29uZmlnO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIGplc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIwJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGN3ZCwgY29uZmlnTmFtZSk7XG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7c291cmNlRnVsbFBhdGh9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGNvbnN0IHtlbnRyeUpzfSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGgsICdpbmRleC50c3gnKTtcbiAgICAgIGNvbnN0IGhhc0luZGV4VHN4OiBib29sZWFuID0gZXhpc3RzU3luYyhpbmRleFBhdGgpO1xuXG4gICAgICBpZihoYXNJbmRleFRzeCkge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHN4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50cyc7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgY3dkOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgaWYodXNlVHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9IHVzZVR5cGVzY3JpcHQ7XG4gICAgfVxuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkICYmIG91dHB1dEZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjd2QsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgICBjb25zdCBjdXJyZW50Q3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUoY3VycmVudEN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5vdXRwdXRQYXRoICYmICFwYXJhbXMub3V0cHV0RnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN1cnJlbnRDd2QsIHBhcmFtcy5vdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKGN1cnJlbnRDd2QsIHNvdXJjZVBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMuc291cmNlUGF0aCAmJiAhcGFyYW1zLnNvdXJjZUZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShjdXJyZW50Q3dkLCBwYXJhbXMuc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZCwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCB0c2NvbmZpZ1BhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcbiAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMocGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uLy4uL3RzY29uZmlnLmJhc2UuanNvbicpKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiZGlybmFtZSIsImV4dG5hbWUiLCJwYXRoRXh0bmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiVVJMIiwiZ2V0RGlyTmFtZSIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlbGF0aXZlRmlsZVBhdGgiLCJsb2ciLCJjd2QiLCJwcm9jZXNzIiwiZGVmYXVsdENvbmZpZ1ZhbHVlcyIsImFpIiwibWF4VG9rZW5zIiwibW9kZWwiLCJwcm92aWRlciIsInRlbXBlcmF0dXJlIiwiY29uZmlnRmlsZXMiLCJjb3B5RmlsZXMiLCJlbnRyeUhUTUwiLCJlbnRyeUpzIiwiZW52IiwiZXNsaW50IiwiamVzdCIsIm91dHB1dEZ1bGxQYXRoIiwib3V0cHV0SGFzaCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlTWFuYWdlciIsInByZXNldCIsInNvdXJjZUZ1bGxQYXRoIiwic291cmNlUGF0aCIsInN3YyIsImlubGluZVNvdXJjZXNDb250ZW50IiwiaXNNb2R1bGUiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0YXJnZXQiLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsIndlYnBhY2siLCJzdGF0aWNQYXRoIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjb25maWdOYW1lIiwicHJvamVjdEJ1aWxkQ29uZmlnIiwicHJvamVjdExpbnRDb25maWciLCJwcm9qZWN0VGVzdENvbmZpZyIsInByb2plY3RDb25maWdQYXRoIiwibGV4RGlyIiwiTGV4Q29uZmlnIiwiZ2V0TGV4RGlyIiwidmFsdWUiLCJjb25maWciLCJpbmRleFBhdGgiLCJoYXNJbmRleFRzeCIsInVwZGF0ZUNvbmZpZyIsInVwZGF0ZWRDb25maWciLCJ1bmRlZmluZWQiLCJDVVJTT1JfSURFIiwiYWRkQ29uZmlnUGFyYW1zIiwiY21kIiwicGFyYW1zIiwibmFtZVByb3BlcnR5IiwiZW52aXJvbm1lbnQiLCJ0eXBlc2NyaXB0IiwiY3VycmVudEN3ZCIsIkxFWF9DT05GSUciLCJKU09OIiwic3RyaW5naWZ5IiwiY29tbWFuZE5hbWUiLCJpc1N0YXRpYyIsInN0YXRpYyIsInBhcnNlQ29uZmlnIiwiaXNSb290IiwiY2xpTmFtZSIsImxleENvbmZpZyIsImxleENvbmZpZ05hbWUiLCJxdWlldCIsImRlYnVnIiwiY29uZmlnRm9ybWF0cyIsImNvbmZpZ0Jhc2VOYW1lIiwiY29uZmlnUGF0aCIsImNvbmZpZ0V4aXN0cyIsImZvcm1hdCIsInBvdGVudGlhbFBhdGgiLCJleHQiLCJjb25maWdDb250ZW50IiwiY29uZmlnSnNvbiIsInBhcnNlIiwiZGVmYXVsdCIsImVycm9yIiwibWVzc2FnZSIsImluY2x1ZGVzIiwibGV4Q3VzdG9tQ29uZmlnIiwiZmlsZVVybCIsImhyZWYiLCJjb25zb2xlIiwiY2hlY2tUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdQYXRoIiwiZGlyTmFtZSIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwicmVsYXRpdmVPdXREaXIiLCJyZWxhdGl2ZVJvb3REaXIiLCJjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdMaW50UGF0aCIsInRlbXBsYXRlUGF0aCIsImNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ1Rlc3RQYXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7OztDQUdDLEdBQ0QsU0FBUUEsVUFBVSxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsUUFBTyxLQUFLO0FBQzNELFNBQ0VDLE9BQU8sRUFDUEMsV0FBV0MsV0FBVyxFQUN0QkMsWUFBWUMsWUFBWSxFQUN4QkMsV0FBV0MsV0FBVyxRQUNqQixPQUFPO0FBQ2QsU0FBUUMsR0FBRyxRQUFPLE1BQU07QUFFeEIsU0FBUUMsVUFBVSxFQUFFQyxxQkFBcUIsRUFBRUMsZ0JBQWdCLFFBQU8sa0JBQWtCO0FBQ3BGLFNBQVFDLEdBQUcsUUFBTyxpQkFBaUI7QUFJbkMsTUFBTUMsTUFBY0MsUUFBUUQsR0FBRztBQTZIL0IsT0FBTyxNQUFNRSxzQkFBcUM7SUFDaERDLElBQUk7UUFDRkMsV0FBVztRQUNYQyxPQUFPO1FBQ1BDLFVBQVU7UUFDVkMsYUFBYTtJQUNmO0lBQ0FDLGFBQWEsRUFBRTtJQUNmQyxXQUFXLEVBQUU7SUFDYkMsV0FBVztJQUNYQyxTQUFTO0lBQ1RDLEtBQUs7SUFDTEMsUUFBUSxDQUFDO0lBQ1RDLE1BQU0sQ0FBQztJQUNQQyxnQkFBZ0JyQixZQUFZTSxLQUFLO0lBQ2pDZ0IsWUFBWTtJQUNaQyxZQUFZO0lBQ1pDLGdCQUFnQjtJ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
@@ -5,7 +5,7 @@
5
5
  import { execa } from 'execa';
6
6
  import { existsSync, readFileSync } from 'fs';
7
7
  import { sync as globSync } from 'glob';
8
- import { dirname, resolve as pathResolve } from 'path';
8
+ import { dirname, relative as pathRelative, resolve as pathResolve } from 'path';
9
9
  import { LexConfig } from '../../LexConfig.js';
10
10
  import { checkLinkedModules, copyConfiguredFiles, createSpinner, handleWebpackProgress, removeFiles } from '../../utils/app.js';
11
11
  import { resolveWebpackPaths, getLexPackageJsonPath, resolveBinaryPath } from '../../utils/file.js';
@@ -38,17 +38,16 @@ const displayBuildStatus = (bundler, outputPath, quiet, stats)=>{
38
38
  });
39
39
  console.log('\n' + statusBox + '\n');
40
40
  };
41
- // Removed buildWithEsBuild function - using SWC instead
42
41
  export const buildWithSWC = async (spinner, commandOptions, callback)=>{
43
42
  const { cliName = 'Lex', format = 'esm', outputPath, quiet, sourcePath, watch } = commandOptions;
44
43
  const { outputFullPath, sourceFullPath, swc: swcConfig, targetEnvironment, useGraphQl, useTypescript } = LexConfig.config;
45
44
  const sourceDir = sourcePath ? pathResolve(process.cwd(), `./${sourcePath}`) : sourceFullPath || '';
46
45
  const globOptions = {
46
+ absolute: true,
47
47
  cwd: sourceDir,
48
48
  dot: false,
49
49
  nodir: true,
50
- nosort: true,
51
- absolute: true
50
+ nosort: true
52
51
  };
53
52
  const tsFiles = globSync(`**/!(*.spec|*.test).ts*`, globOptions);
54
53
  const jsFiles = globSync(`**/!(*.spec|*.test).js`, globOptions);
@@ -56,12 +55,14 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
56
55
  ...tsFiles,
57
56
  ...jsFiles
58
57
  ];
59
- const outputDir = outputPath || outputFullPath || '';
58
+ const outputDir = outputPath ? pathResolve(process.cwd(), outputPath) : outputFullPath || pathResolve(process.cwd(), './lib');
60
59
  try {
61
60
  spinner.start('Building with SWC...');
62
- for (const file of sourceFiles){
63
- const sourcePath = pathResolve(sourceDir, file);
64
- const outputPath = pathResolve(outputDir, file.replace(/\.(ts|tsx)$/, '.js'));
61
+ const transformPromises = sourceFiles.map(async (file)=>{
62
+ const fileRelativeToSource = pathRelative(sourceDir, file);
63
+ const sourcePath = file; // file is already absolute
64
+ const outputFile = fileRelativeToSource.replace(/\.(ts|tsx)$/, '.js');
65
+ const outputPath = pathResolve(outputDir, outputFile);
65
66
  const outputDirPath = dirname(outputPath);
66
67
  if (!existsSync(outputDirPath)) {
67
68
  const { mkdirSync } = await import('fs');
@@ -77,12 +78,13 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
77
78
  jsc: {
78
79
  ...swcConfig?.jsc,
79
80
  parser: {
80
- syntax: 'typescript',
81
- tsx: isTSX,
81
+ comments: false,
82
82
  decorators: swcConfig?.jsc?.parser?.decorators ?? true,
83
83
  dynamicImport: swcConfig?.jsc?.parser?.dynamicImport ?? true,
84
- comments: false // Remove comments during transformation
84
+ syntax: 'typescript',
85
+ tsx: isTSX
85
86
  },
87
+ preserveAllComments: false,
86
88
  target: swcConfig?.jsc?.target ?? 'es2020',
87
89
  transform: isTSX ? {
88
90
  ...swcConfig?.jsc?.transform,
@@ -90,20 +92,20 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
90
92
  runtime: 'automatic',
91
93
  ...swcConfig?.jsc?.transform?.react
92
94
  }
93
- } : swcConfig?.jsc?.transform,
94
- preserveAllComments: false
95
+ } : swcConfig?.jsc?.transform
95
96
  },
97
+ minify: false,
96
98
  module: {
97
99
  ...swcConfig?.module,
98
100
  type: format === 'cjs' ? 'commonjs' : swcConfig?.module?.type || 'es6'
99
101
  },
100
- minify: false,
101
102
  sourceMaps: swcConfig?.sourceMaps || 'inline'
102
103
  };
103
104
  const result = await transform(sourceCode, swcOptions);
104
105
  const { writeFileSync } = await import('fs');
105
106
  writeFileSync(outputPath, result.code);
106
- }
107
+ });
108
+ await Promise.all(transformPromises);
107
109
  spinner.succeed('Build completed with SWC');
108
110
  displayBuildStatus('SWC', outputDir, quiet);
109
111
  callback(0);
@@ -115,7 +117,6 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
115
117
  if (error.stack) {
116
118
  log(`\nStack Trace:\n${error.stack}`, 'error', quiet);
117
119
  }
118
- // Try to extract file information if available
119
120
  if ('filename' in error || 'file' in error) {
120
121
  log(`\nFile: ${error.filename || error.file}`, 'error', quiet);
121
122
  }
@@ -175,7 +176,6 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
175
176
  if (defineProcessEnvNodeEnv) webpackOptions.push('--defineProcessEnvNodeEnv', defineProcessEnvNodeEnv);
176
177
  if (devtool) webpackOptions.push('--devtool', devtool);
177
178
  if (disableInterpret) webpackOptions.push('--disableInterpret');
178
- // Pass entry directly as CLI flag
179
179
  if (entryValue) webpackOptions.push('--entry', entryValue.toString());
180
180
  if (env) webpackOptions.push('--env', env);
181
181
  if (failOnWarnings) webpackOptions.push('--failOnWarnings');
@@ -218,7 +218,6 @@ export const buildWithWebpack = async (spinner, cmd, callback)=>{
218
218
  console.log('executablePath:', executablePath);
219
219
  console.log('finalWebpackOptions:', JSON.stringify(finalWebpackOptions));
220
220
  console.log('finalWebpackOptions type:', Array.isArray(finalWebpackOptions) ? 'Array' : typeof finalWebpackOptions);
221
- // Make sure we're passing an array of strings to execa
222
221
  const childProcess = execa(executablePath, finalWebpackOptions, {
223
222
  encoding: 'utf8',
224
223
  stdio: 'pipe'
@@ -323,13 +322,11 @@ export const build = async (cmd, callback = ()=>({}))=>{
323
322
  ...process.env,
324
323
  ...variablesObj
325
324
  };
326
- // If in test mode, exit early
327
325
  if (test) {
328
326
  log('Test mode: Build environment loaded, exiting', 'info', quiet);
329
327
  callback(0);
330
328
  return 0;
331
329
  }
332
- // Process translations if flag is enabled (before building)
333
330
  if (translations) {
334
331
  spinner.start('Processing translations...');
335
332
  try {
@@ -420,7 +417,7 @@ What are the key optimization opportunities for this build configuration? Consid
420
417
  encoding: 'utf8',
421
418
  cwd: process.cwd(),
422
419
  reject: false,
423
- all: true // Capture both stdout and stderr
420
+ all: true
424
421
  });
425
422
  if (result.exitCode !== 0) {
426
423
  // TypeScript may have errors but still generate some declarations
@@ -428,12 +425,10 @@ What are the key optimization opportunities for this build configuration? Consid
428
425
  const hasDeclarations = result.all?.includes('Writing') || result.all?.includes('Declaration') || false;
429
426
  const errorOutput = result.stderr || result.stdout || result.all || 'Unknown error';
430
427
  if (!hasDeclarations) {
431
- // Show detailed error information
432
428
  log(`\n${cliName} Error: TypeScript declaration generation failed`, 'error', quiet);
433
429
  log(`\nExit Code: ${result.exitCode}`, 'error', quiet);
434
430
  log(`\nTypeScript Command: ${typescriptPath} ${typescriptOptions.slice(0, 10).join(' ')}...`, 'error', quiet);
435
431
  log(`\nError Output:\n${errorOutput}`, 'error', quiet);
436
- // Try to extract and highlight specific errors
437
432
  const errorLines = errorOutput.split('\n').filter((line)=>line.includes('error TS') || line.includes('Error:') || line.trim().startsWith('src/') || line.trim().startsWith('TS'));
438
433
  if (errorLines.length > 0) {
439
434
  log(`\nKey Errors:`, 'error', quiet);
@@ -456,14 +451,12 @@ What are the key optimization opportunities for this build configuration? Consid
456
451
  spinner.succeed('TypeScript declarations generated!');
457
452
  }
458
453
  } catch (error) {
459
- // If execa throws (shouldn't with reject: false), log and continue
460
454
  log(`\n${cliName} Error: TypeScript declaration generation exception`, 'error', quiet);
461
455
  log(`\nError: ${error.message}`, 'error', quiet);
462
456
  if (error instanceof Error && error.stack) {
463
457
  log(`\nStack:\n${error.stack}`, 'error', quiet);
464
458
  }
465
459
  spinner.fail('TypeScript declaration generation had issues (continuing anyway).');
466
- // Don't fail the build if declarations fail
467
460
  }
468
461
  }
469
462
  }
@@ -479,4 +472,4 @@ What are the key optimization opportunities for this build configuration? Consid
479
472
  };
480
473
  export default build;
481
474
 
482
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZGlybmFtZSwgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZX0gZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7TGV4Q29uZmlnfSBmcm9tICcuLi8uLi9MZXhDb25maWcuanMnO1xuaW1wb3J0IHtjaGVja0xpbmtlZE1vZHVsZXMsIGNvcHlDb25maWd1cmVkRmlsZXMsIGNyZWF0ZVNwaW5uZXIsIGNyZWF0ZVByb2dyZXNzQmFyLCBoYW5kbGVXZWJwYWNrUHJvZ3Jlc3MsIHJlbW92ZUZpbGVzfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZVdlYnBhY2tQYXRocyxcbiAgZ2V0TGV4UGFja2FnZUpzb25QYXRoLFxuICByZXNvbHZlQmluYXJ5UGF0aFxufSBmcm9tICcuLi8uLi91dGlscy9maWxlLmpzJztcbmltcG9ydCB7bG9nfSBmcm9tICcuLi8uLi91dGlscy9sb2cuanMnO1xuaW1wb3J0IHtwcm9jZXNzVHJhbnNsYXRpb25zfSBmcm9tICcuLi8uLi91dGlscy90cmFuc2xhdGlvbnMuanMnO1xuaW1wb3J0IHthaUZ1bmN0aW9ufSBmcm9tICcuLi9haS9haS5qcyc7XG5pbXBvcnQgYm94ZW4gZnJvbSAnYm94ZW4nO1xuaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZzsgLy8gPC0tIGFkZCBlbnRyeVxuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7IC8vIDwtLSBhbHJlYWR5IHByZXNlbnRcbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSByZW1vdmU/OiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSB0ZXN0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdHJhbnNsYXRpb25zPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogc3RyaW5nO1xuICByZWFkb25seSB3YXRjaD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQ2FsbGJhY2sgPSAoc3RhdHVzOiBudW1iZXIpID0+IHZvaWQ7XG5cbmNvbnN0IGRpc3BsYXlCdWlsZFN0YXR1cyA9IChidW5kbGVyOiBzdHJpbmcsIG91dHB1dFBhdGg6IHN0cmluZywgcXVpZXQ6IGJvb2xlYW4sIHN0YXRzPzoge21vZHVsZXM/OiBudW1iZXI7IGFzc2V0cz86IG51bWJlcjsgc2l6ZT86IHN0cmluZ30pID0+IHtcbiAgaWYocXVpZXQpIHJldHVybjtcblxuICBsZXQgc3RhdHNJbmZvID0gJyc7XG4gIGlmKHN0YXRzICYmIHN0YXRzLm1vZHVsZXMgJiYgc3RhdHMuYXNzZXRzKSB7XG4gICAgc3RhdHNJbmZvID0gYFxcbiR7Y2hhbGsuZ3JlZW4oJ01vZHVsZXM6Jyl9ICAgICR7Y2hhbGsuY3lhbihzdGF0cy5tb2R1bGVzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdBc3NldHM6Jyl9ICAgICAke2NoYWxrLmN5YW4oc3RhdHMuYXNzZXRzKX1cXG5gICtcbiAgICAgIGAke2NoYWxrLmdyZWVuKCdTaXplOicpfSAgICAgICAke2NoYWxrLmN5YW4oc3RhdHMuc2l6ZSl9XFxuYDtcbiAgfVxuXG4gIGNvbnN0IHN0YXR1c0JveCA9IGJveGVuKFxuICAgIGAke2NoYWxrLmN5YW4uYm9sZCgn8J+Pl++4jyAgQnVpbGQgQ29tcGxldGVkIFN1Y2Nlc3NmdWxseScpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG4vLyBSZW1vdmVkIGJ1aWxkV2l0aEVzQnVpbGQgZnVuY3Rpb24gLSB1c2luZyBTV0MgaW5zdGVhZFxuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWUsXG4gICAgYWJzb2x1dGU6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgKiovISgqLnNwZWN8Ki50ZXN0KS50cypgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IGpzRmlsZXM6IHN0cmluZ1tdID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdCkuanNgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGggfHwgb3V0cHV0RnVsbFBhdGggfHwgJyc7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyB3aXRoIFNXQy4uLicpO1xuXG4gICAgZm9yKGNvbnN0IGZpbGUgb2Ygc291cmNlRmlsZXMpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBwYXRoUmVzb2x2ZShzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgZmlsZS5yZXBsYWNlKC9cXC4odHN8dHN4KSQvLCAnLmpzJykpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIGNvbnN0IHtta2RpclN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgICBta2RpclN5bmMob3V0cHV0RGlyUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gcmVhZEZpbGVTeW5jKHNvdXJjZVBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBpc1RTWCA9IGZpbGUuZW5kc1dpdGgoJy50c3gnKTtcbiAgICAgIGNvbnN0IHN3Y09wdGlvbnMgPSB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlLFxuICAgICAgICAuLi5zd2NDb25maWcsXG4gICAgICAgIGpzYzoge1xuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjLFxuICAgICAgICAgIHBhcnNlcjoge1xuICAgICAgICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcgYXMgY29uc3QsXG4gICAgICAgICAgICB0c3g6IGlzVFNYLFxuICAgICAgICAgICAgZGVjb3JhdG9yczogc3djQ29uZmlnPy5qc2M/LnBhcnNlcj8uZGVjb3JhdG9ycyA/PyB0cnVlLFxuICAgICAgICAgICAgZHluYW1pY0ltcG9ydDogc3djQ29uZmlnPy5qc2M/LnBhcnNlcj8uZHluYW1pY0ltcG9ydCA/PyB0cnVlLFxuICAgICAgICAgICAgY29tbWVudHM6IGZhbHNlIC8vIFJlbW92ZSBjb21tZW50cyBkdXJpbmcgdHJhbnNmb3JtYXRpb25cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRhcmdldDogc3djQ29uZmlnPy5qc2M/LnRhcmdldCA/PyAnZXMyMDIwJyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGlzVFNYID8ge1xuICAgICAgICAgICAgLi4uc3djQ29uZmlnPy5qc2M/LnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtPy5yZWFjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gOiBzd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgIHByZXNlcnZlQWxsQ29tbWVudHM6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8ubW9kdWxlLFxuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKVxuICAgICAgICB9LFxuICAgICAgICBtaW5pZnk6IGZhbHNlLFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgY29uc3Qge3dyaXRlRmlsZVN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NvbW1hbmRPcHRpb25zLmNsaU5hbWUgfHwgJ0xleCd9IEVycm9yOiBTV0MgYnVpbGQgZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhgXFxuRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZihlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrIFRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gZXh0cmFjdCBmaWxlIGluZm9ybWF0aW9uIGlmIGF2YWlsYWJsZVxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkIHdpdGggU1dDJyk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIC8vIFBhc3MgZW50cnkgZGlyZWN0bHkgYXMgQ0xJIGZsYWdcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgbGV0IGV4ZWN1dGFibGVQYXRoID0gd2VicGFja1BhdGg7XG4gICAgbGV0IGZpbmFsV2VicGFja09wdGlvbnM6IHN0cmluZ1tdO1xuXG4gICAgaWYod2VicGFja1BhdGggPT09ICducHgnKSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWyd3ZWJwYWNrJywgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSBpZih3ZWJwYWNrUGF0aC5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGV4ZWN1dGFibGVQYXRoID0gJ25vZGUnO1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFt3ZWJwYWNrUGF0aCwgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWy4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnd2VicGFja1BhdGg6Jywgd2VicGFja1BhdGgpO1xuICAgIGNvbnNvbGUubG9nKCdleGVjdXRhYmxlUGF0aDonLCBleGVjdXRhYmxlUGF0aCk7XG4gICAgY29uc29sZS5sb2coJ2ZpbmFsV2VicGFja09wdGlvbnM6JywgSlNPTi5zdHJpbmdpZnkoZmluYWxXZWJwYWNrT3B0aW9ucykpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zIHR5cGU6JywgQXJyYXkuaXNBcnJheShmaW5hbFdlYnBhY2tPcHRpb25zKSA/ICdBcnJheScgOiB0eXBlb2YgZmluYWxXZWJwYWNrT3B0aW9ucyk7XG5cbiAgICAvLyBNYWtlIHN1cmUgd2UncmUgcGFzc2luZyBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIGV4ZWNhXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2EoZXhlY3V0YWJsZVBhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogV2VicGFjayBidWlsZCBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2sgVHJhY2U6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nKGBcXG5XZWJwYWNrIE9wdGlvbnM6ICR7d2VicGFja09wdGlvbnMuc2xpY2UoMCwgNSkuam9pbignICcpfS4uLmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGQgPSBhc3luYyAoY21kOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBidW5kbGVyID0gJ3dlYnBhY2snLFxuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIHJlbW92ZSA9IGZhbHNlLFxuICAgIHRlc3QgPSBmYWxzZSxcbiAgICB0cmFuc2xhdGlvbnMgPSBmYWxzZSxcbiAgICB2YXJpYWJsZXMgPSAne30nXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBidWlsZGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIGNoZWNrTGlua2VkTW9kdWxlcygpO1xuXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgLy8gSWYgaW4gdGVzdCBtb2RlLCBleGl0IGVhcmx5XG4gIGlmKHRlc3QpIHtcbiAgICBsb2coJ1Rlc3QgbW9kZTogQnVpbGQgZW52aXJvbm1lbnQgbG9hZGVkLCBleGl0aW5nJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBQcm9jZXNzIHRyYW5zbGF0aW9ucyBpZiBmbGFnIGlzIGVuYWJsZWQgKGJlZm9yZSBidWlsZGluZylcbiAgaWYodHJhbnNsYXRpb25zKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnUHJvY2Vzc2luZyB0cmFuc2xhdGlvbnMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYic7XG5cbiAgICAgIGF3YWl0IHByb2Nlc3NUcmFuc2xhdGlvbnMoc291cmNlUGF0aCwgb3V0cHV0UGF0aCwgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUcmFuc2xhdGlvbnMgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICB9IGNhdGNoKHRyYW5zbGF0aW9uRXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zOiAke3RyYW5zbGF0aW9uRXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBwcm9jZXNzIHRyYW5zbGF0aW9ucy4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgc3Bpbm5lci5zdGFydCgnQnVpbGRpbmcgY29kZS4uLicpO1xuXG4gIGlmKHJlbW92ZSkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dEZ1bGxQYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBpZih1c2VUeXBlc2NyaXB0ICYmIGJ1bmRsZXIgPT09ICdzd2MnKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3RzYycsICd0eXBlc2NyaXB0Jyk7XG5cbiAgICAgICAgaWYodHlwZXNjcmlwdFBhdGgpIHtcbiAgICAgICAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9zcmMnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9saWInKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgICAgICBjd2Q6IHNvdXJjZUZ1bGxQYXRoLFxuICAgICAgICAgICAgICBkb3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBub2RpcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYWJzb2x1dGU6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c2AsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c3hgLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBhbGxTb3VyY2VGaWxlcyA9IFsuLi50c0ZpbGVzLCAuLi50c3hGaWxlc107XG4gICAgICAgICAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSwgLy8gRG9uJ3QgdGhyb3cgb24gZXJyb3JzLCB3ZSdsbCBjaGVjayBleGl0IGNvZGVcbiAgICAgICAgICAgICAgYWxsOiB0cnVlIC8vIENhcHR1cmUgYm90aCBzdGRvdXQgYW5kIHN0ZGVyclxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IG1heSBoYXZlIGVycm9ycyBidXQgc3RpbGwgZ2VuZXJhdGUgc29tZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgLy8gTG9nIHdhcm5pbmdzIGJ1dCBkb24ndCBmYWlsIGlmIGRlY2xhcmF0aW9ucyB3ZXJlIGdlbmVyYXRlZFxuICAgICAgICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgLy8gU2hvdyBkZXRhaWxlZCBlcnJvciBpbmZvcm1hdGlvblxuICAgICAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICBsb2coYFxcbkV4aXQgQ29kZTogJHtyZXN1bHQuZXhpdENvZGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuVHlwZVNjcmlwdCBDb21tYW5kOiAke3R5cGVzY3JpcHRQYXRofSAke3R5cGVzY3JpcHRPcHRpb25zLnNsaWNlKDAsIDEwKS5qb2luKCcgJyl9Li4uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuRXJyb3IgT3V0cHV0OlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgYW5kIGhpZ2hsaWdodCBzcGVjaWZpYyBlcnJvcnNcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxpbmVzID0gZXJyb3JPdXRwdXQuc3BsaXQoJ1xcbicpLmZpbHRlcihsaW5lID0+XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgbG9nKGBcXG5LZXkgRXJyb3JzOmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAke2xpbmV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gaGFkIGVycm9ycyAoY29udGludWluZyBhbnl3YXkpLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMgZ2VuZXJhdGVkICh3aXRoIHdhcm5pbmdzKS4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgLy8gSWYgZXhlY2EgdGhyb3dzIChzaG91bGRuJ3Qgd2l0aCByZWplY3Q6IGZhbHNlKSwgbG9nIGFuZCBjb250aW51ZVxuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgbG9nKGBcXG5TdGFjazpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMgKGNvbnRpbnVpbmcgYW55d2F5KS4nKTtcbiAgICAgICAgICAgIC8vIERvbid0IGZhaWwgdGhlIGJ1aWxkIGlmIGRlY2xhcmF0aW9ucyBmYWlsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNvcHlDb25maWd1cmVkRmlsZXMoc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZywgcXVpZXQpO1xuICAgIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBjb3B5IGNvbmZpZ3VyZWQgZmlsZXM6ICR7Y29weUVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjYWxsYmFjayhidWlsZFJlc3VsdCk7XG4gIHJldHVybiBidWlsZFJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkO1xuIl0sIm5hbWVzIjpbInRyYW5zZm9ybSIsImV4ZWNhIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsInN5bmMiLCJnbG9iU3luYyIsImRpcm5hbWUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwicHJvY2Vzc1RyYW5zbGF0aW9ucyIsImFpRnVuY3Rpb24iLCJib3hlbiIsImNoYWxrIiwiY3VycmVudEZpbGVuYW1lIiwiY3VycmVudERpcm5hbWUiLCJldmFsIiwicHJvY2VzcyIsImN3ZCIsImRpc3BsYXlCdWlsZFN0YXR1cyIsImJ1bmRsZXIiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJzdGF0cyIsInN0YXRzSW5mbyIsIm1vZHVsZXMiLCJhc3NldHMiLCJncmVlbiIsImN5YW4iLCJzaXplIiwic3RhdHVzQm94IiwiYm9sZCIsInVuZGVybGluZSIsInllbGxvdyIsInBhZGRpbmciLCJtYXJnaW4iLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiY29uc29sZSIsImJ1aWxkV2l0aFNXQyIsInNwaW5uZXIiLCJjb21tYW5kT3B0aW9ucyIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImZvcm1hdCIsInNvdXJjZVBhdGgiLCJ3YXRjaCIsIm91dHB1dEZ1bGxQYXRoIiwic291cmNlRnVsbFBhdGgiLCJzd2MiLCJzd2NDb25maWciLCJ0YXJnZXRFbnZpcm9ubWVudCIsInVzZUdyYXBoUWwiLCJ1c2VUeXBlc2NyaXB0IiwiY29uZmlnIiwic291cmNlRGlyIiwiZ2xvYk9wdGlvbnMiLCJkb3QiLCJub2RpciIsIm5vc29ydCIsImFic29sdXRlIiwidHNGaWxlcyIsImpzRmlsZXMiLCJzb3VyY2VGaWxlcyIsIm91dHB1dERpciIsInN0YXJ0IiwiZmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsImlzVFNYIiwiZW5kc1dpdGgiLCJzd2NPcHRpb25zIiwiZmlsZW5hbWUiLCJqc2MiLCJwYXJzZXIiLCJzeW50YXgiLCJ0c3giLCJkZWNvcmF0b3JzIiwiZHluYW1pY0ltcG9ydCIsImNvbW1lbnRzIiwidGFyZ2V0IiwicmVhY3QiLCJydW50aW1lIiwicHJlc2VydmVBbGxDb21tZW50cyIsIm1vZHVsZSIsInR5cGUiLCJtaW5pZnkiLCJzb3VyY2VNYXBzIiwicmVzdWx0Iiwid3JpdGVGaWxlU3luYyIsImNvZGUiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsImZhaWwiLCJidWlsZFdpdGhXZWJwYWNrIiwiY21kIiwiYW5hbHl6ZSIsImNvbmZpZ05hbWUiLCJkZWZpbmVQcm9jZXNzRW52Tm9kZUVudiIsImRldnRvb2wiLCJkaXNhYmxlSW50ZXJwcmV0IiwiZW50cnkiLCJlbnYiLCJmYWlsT25XYXJuaW5ncyIsImpzb24iLCJtZXJnZSIsIm1vZGUiLCJuYW1lIiwibm9kZUVudiIsIm5vRGV2dG9vbCIsIm5vU3RhdHMiLCJub1RhcmdldCIsIm5vV2F0Y2giLCJub1dhdGNoT3B0aW9uc1N0ZGluIiwid2F0Y2hPcHRpb25zU3RkaW4iLCJlbnRyeVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5Iiwid2VicGFja0NvbmZpZyIsImlzUmVsYXRpdmVDb25maWciLCJzdWJzdHIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwicmVzb2x2ZWRDb25maWciLCJsZXhQYWNrYWdlUGF0aCIsImxleFBhY2thZ2VEaXIiLCJsZXhXZWJwYWNrQ29uZmlnIiwid2VicGFja09wdGlvbnMiLCJwdXNoIiwidG9TdHJpbmciLCJ3ZWJwYWNrUGF0aCIsImV4ZWN1dGFibGVQYXRoIiwiZmluYWxXZWJwYWNrT3B0aW9ucyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjaGlsZFByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYnVpbGRDb21wbGV0ZWQiLCJidWlsZFN0YXRzIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJtb2R1bGVNYXRjaCIsIm1hdGNoIiwiYXNzZXRNYXRjaCIsInNpemVNYXRjaCIsInBhcnNlSW50Iiwic3RkZXJyIiwic2xpY2UiLCJqb2luIiwiYXNzaXN0IiwicHJvbXB0IiwidGFzayIsImNvbnRleHQiLCJhaUVycm9yIiwiYnVpbGQiLCJyZW1vdmUiLCJ0ZXN0IiwidHJhbnNsYXRpb25zIiwidmFyaWFibGVzIiwicGFyc2VDb25maWciLCJ2YXJpYWJsZXNPYmoiLCJOT0RFX0VOViIsInBhcnNlIiwidHJhbnNsYXRpb25FcnJvciIsImJ1aWxkUmVzdWx0Iiwic3RhdHVzIiwiZW50cnlQb2ludHMiLCJ3ZWJwYWNrIiwidHlwZXNjcmlwdFBhdGgiLCJ0c3hGaWxlcyIsImFsbFNvdXJjZUZpbGVzIiwidHlwZXNjcmlwdE9wdGlvbnMiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInJlamVjdCIsImFsbCIsImV4aXRDb2RlIiwiaGFzRGVjbGFyYXRpb25zIiwiZXJyb3JPdXRwdXQiLCJlcnJvckxpbmVzIiwic3BsaXQiLCJmaWx0ZXIiLCJsaW5lIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJsZW5ndGgiLCJmb3JFYWNoIiwiY29weUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sWUFBWTtBQUNwQyxTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFlBQVksUUFBTyxLQUFLO0FBQzVDLFNBQVFDLFFBQVFDLFFBQVEsUUFBTyxPQUFPO0FBQ3RDLFNBQVFDLE9BQU8sRUFBRUMsV0FBV0MsV0FBVyxRQUFPLE9BQU87QUFFckQsU0FBUUMsU0FBUyxRQUFPLHFCQUFxQjtBQUM3QyxTQUFRQyxrQkFBa0IsRUFBRUMsbUJBQW1CLEVBQUVDLGFBQWEsRUFBcUJDLHFCQUFxQixFQUFFQyxXQUFXLFFBQU8scUJBQXFCO0FBQ2pKLFNBQ0VDLG1CQUFtQixFQUNuQkMscUJBQXFCLEVBQ3JCQyxpQkFBaUIsUUFDWixzQkFBc0I7QUFDN0IsU0FBUUMsR0FBRyxRQUFPLHFCQUFx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
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIHJlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZSxcbiAgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZSxcbiAgam9pbiBhcyBwYXRoSm9pblxufSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY3JlYXRlU3Bpbm5lciwgY3JlYXRlUHJvZ3Jlc3NCYXIsIGhhbmRsZVdlYnBhY2tQcm9ncmVzcywgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge1xuICByZXNvbHZlV2VicGFja1BhdGhzLFxuICBnZXRMZXhQYWNrYWdlSnNvblBhdGgsXG4gIHJlc29sdmVCaW5hcnlQYXRoXG59IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5pbXBvcnQge3Byb2Nlc3NUcmFuc2xhdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zbGF0aW9ucy5qcyc7XG5pbXBvcnQge2FpRnVuY3Rpb259IGZyb20gJy4uL2FpL2FpLmpzJztcbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5sZXQgY3VycmVudEZpbGVuYW1lOiBzdHJpbmc7XG5sZXQgY3VycmVudERpcm5hbWU6IHN0cmluZztcblxudHJ5IHtcbiAgY3VycmVudEZpbGVuYW1lID0gZXZhbCgncmVxdWlyZShcInVybFwiKS5maWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCknKTtcbiAgY3VycmVudERpcm5hbWUgPSBkaXJuYW1lKGN1cnJlbnRGaWxlbmFtZSk7XG59IGNhdGNoIHtcbiAgY3VycmVudEZpbGVuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbiAgY3VycmVudERpcm5hbWUgPSBwcm9jZXNzLmN3ZCgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFzc2lzdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBidW5kbGVyPzogJ3dlYnBhY2snIHwgJ3N3Yyc7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5Pzogc3RyaW5nO1xuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVtb3ZlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGVzdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9ucz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd2F0Y2g/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBCdWlsZENhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkO1xuXG5jb25zdCBkaXNwbGF5QnVpbGRTdGF0dXMgPSAoYnVuZGxlcjogc3RyaW5nLCBvdXRwdXRQYXRoOiBzdHJpbmcsIHF1aWV0OiBib29sZWFuLCBzdGF0cz86IHttb2R1bGVzPzogbnVtYmVyOyBhc3NldHM/OiBudW1iZXI7IHNpemU/OiBzdHJpbmd9KSA9PiB7XG4gIGlmKHF1aWV0KSByZXR1cm47XG5cbiAgbGV0IHN0YXRzSW5mbyA9ICcnO1xuICBpZihzdGF0cyAmJiBzdGF0cy5tb2R1bGVzICYmIHN0YXRzLmFzc2V0cykge1xuICAgIHN0YXRzSW5mbyA9IGBcXG4ke2NoYWxrLmdyZWVuKCdNb2R1bGVzOicpfSAgICAke2NoYWxrLmN5YW4oc3RhdHMubW9kdWxlcyl9XFxuYCArXG4gICAgICBgJHtjaGFsay5ncmVlbignQXNzZXRzOicpfSAgICAgJHtjaGFsay5jeWFuKHN0YXRzLmFzc2V0cyl9XFxuYCArXG4gICAgICBgJHtjaGFsay5ncmVlbignU2l6ZTonKX0gICAgICAgJHtjaGFsay5jeWFuKHN0YXRzLnNpemUpfVxcbmA7XG4gIH1cblxuICBjb25zdCBzdGF0dXNCb3ggPSBib3hlbihcbiAgICBgJHtjaGFsay5jeWFuLmJvbGQoJ/Cfj5fvuI8gIEJ1aWxkIENvbXBsZXRlZCBTdWNjZXNzZnVsbHknKX1cXG5cXG5gICtcbiAgICBgJHtjaGFsay5ncmVlbignQnVuZGxlcjonKX0gICAgJHtjaGFsay5jeWFuKGJ1bmRsZXIpfVxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdPdXRwdXQ6Jyl9ICAgICAke2NoYWxrLnVuZGVybGluZShvdXRwdXRQYXRoKX0ke3N0YXRzSW5mb31cXG5gICtcbiAgICBgJHtjaGFsay55ZWxsb3coJ1JlYWR5IGZvciBkZXBsb3ltZW50ISDwn5qAJyl9YCxcbiAgICB7XG4gICAgICBwYWRkaW5nOiAxLFxuICAgICAgbWFyZ2luOiAxLFxuICAgICAgYm9yZGVyU3R5bGU6ICdyb3VuZCcsXG4gICAgICBib3JkZXJDb2xvcjogJ2dyZWVuJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyMxYTFhMWEnXG4gICAgfVxuICApO1xuXG4gIGNvbnNvbGUubG9nKCdcXG4nICsgc3RhdHVzQm94ICsgJ1xcbicpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFNXQyA9IGFzeW5jIChzcGlubmVyLCBjb21tYW5kT3B0aW9uczogQnVpbGRPcHRpb25zLCBjYWxsYmFjazogQnVpbGRDYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGZvcm1hdCA9ICdlc20nLFxuICAgIG91dHB1dFBhdGgsXG4gICAgcXVpZXQsXG4gICAgc291cmNlUGF0aCxcbiAgICB3YXRjaFxuICB9ID0gY29tbWFuZE9wdGlvbnM7XG4gIGNvbnN0IHtcbiAgICBvdXRwdXRGdWxsUGF0aCxcbiAgICBzb3VyY2VGdWxsUGF0aCxcbiAgICBzd2M6IHN3Y0NvbmZpZyxcbiAgICB0YXJnZXRFbnZpcm9ubWVudCxcbiAgICB1c2VHcmFwaFFsLFxuICAgIHVzZVR5cGVzY3JpcHRcbiAgfSA9IExleENvbmZpZy5jb25maWc7XG4gIGNvbnN0IHNvdXJjZURpcjogc3RyaW5nID0gc291cmNlUGF0aCA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIGAuLyR7c291cmNlUGF0aH1gKSA6IHNvdXJjZUZ1bGxQYXRoIHx8ICcnO1xuXG4gIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgIGFic29sdXRlOiB0cnVlLFxuICAgIGN3ZDogc291cmNlRGlyLFxuICAgIGRvdDogZmFsc2UsXG4gICAgbm9kaXI6IHRydWUsXG4gICAgbm9zb3J0OiB0cnVlXG4gIH07XG4gIGNvbnN0IHRzRmlsZXM6IHN0cmluZ1tdID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdCkudHMqYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAqKi8hKCouc3BlY3wqLnRlc3QpLmpzYCwgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbLi4udHNGaWxlcywgLi4uanNGaWxlc107XG5cbiAgY29uc3Qgb3V0cHV0RGlyOiBzdHJpbmcgPSBvdXRwdXRQYXRoXG4gICAgPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvdXRwdXRQYXRoKVxuICAgIDogKG91dHB1dEZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICcuL2xpYicpKTtcblxuICB0cnkge1xuICAgIHNwaW5uZXIuc3RhcnQoJ0J1aWxkaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1Qcm9taXNlcyA9IHNvdXJjZUZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVJlbGF0aXZlVG9Tb3VyY2UgPSBwYXRoUmVsYXRpdmUoc291cmNlRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBmaWxlOyAvLyBmaWxlIGlzIGFscmVhZHkgYWJzb2x1dGVcbiAgICAgIGNvbnN0IG91dHB1dEZpbGUgPSBmaWxlUmVsYXRpdmVUb1NvdXJjZS5yZXBsYWNlKC9cXC4odHN8dHN4KSQvLCAnLmpzJyk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gcGF0aFJlc29sdmUob3V0cHV0RGlyLCBvdXRwdXRGaWxlKTtcbiAgICAgIGNvbnN0IG91dHB1dERpclBhdGggPSBkaXJuYW1lKG91dHB1dFBhdGgpO1xuXG4gICAgICBpZighZXhpc3RzU3luYyhvdXRwdXREaXJQYXRoKSkge1xuICAgICAgICBjb25zdCB7bWtkaXJTeW5jfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgICAgbWtkaXJTeW5jKG91dHB1dERpclBhdGgsIHtyZWN1cnNpdmU6IHRydWV9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlQ29kZSA9IHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoLCAndXRmOCcpO1xuICAgICAgY29uc3QgaXNUU1ggPSBmaWxlLmVuZHNXaXRoKCcudHN4Jyk7XG4gICAgICBjb25zdCBzd2NPcHRpb25zID0ge1xuICAgICAgICBmaWxlbmFtZTogZmlsZSxcbiAgICAgICAgLi4uc3djQ29uZmlnLFxuICAgICAgICBqc2M6IHtcbiAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYyxcbiAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgIGNvbW1lbnRzOiBmYWxzZSxcbiAgICAgICAgICAgIGRlY29yYXRvcnM6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmRlY29yYXRvcnMgPz8gdHJ1ZSxcbiAgICAgICAgICAgIGR5bmFtaWNJbXBvcnQ6IHN3Y0NvbmZpZz8uanNjPy5wYXJzZXI/LmR5bmFtaWNJbXBvcnQgPz8gdHJ1ZSxcbiAgICAgICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnIGFzIGNvbnN0LFxuICAgICAgICAgICAgdHN4OiBpc1RTWFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJlc2VydmVBbGxDb21tZW50czogZmFsc2UsXG4gICAgICAgICAgdGFyZ2V0OiBzd2NDb25maWc/LmpzYz8udGFyZ2V0ID8/ICdlczIwMjAnLFxuICAgICAgICAgIHRyYW5zZm9ybTogaXNUU1ggPyB7XG4gICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtLFxuICAgICAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYycgYXMgY29uc3QsXG4gICAgICAgICAgICAgIC4uLnN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm0/LnJlYWN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA6IHN3Y0NvbmZpZz8uanNjPy50cmFuc2Zvcm1cbiAgICAgICAgfSxcbiAgICAgICAgbWluaWZ5OiBmYWxzZSxcbiAgICAgICAgbW9kdWxlOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGUsXG4gICAgICAgICAgdHlwZTogZm9ybWF0ID09PSAnY2pzJyA/ICdjb21tb25qcycgYXMgY29uc3QgOiAoc3djQ29uZmlnPy5tb2R1bGU/LnR5cGUgYXMgJ2VzNicgfHwgJ2VzNicpXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZU1hcHM6IHN3Y0NvbmZpZz8uc291cmNlTWFwcyB8fCAnaW5saW5lJ1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUNvZGUsIHN3Y09wdGlvbnMpO1xuXG4gICAgICBjb25zdCB7d3JpdGVGaWxlU3luY30gPSBhd2FpdCBpbXBvcnQoJ2ZzJyk7XG4gICAgICB3cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIHJlc3VsdC5jb2RlKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRyYW5zZm9ybVByb21pc2VzKTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHdpdGggU1dDJyk7XG4gICAgZGlzcGxheUJ1aWxkU3RhdHVzKCdTV0MnLCBvdXRwdXREaXIsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjb21tYW5kT3B0aW9ucy5jbGlOYW1lIHx8ICdMZXgnfSBFcnJvcjogU1dDIGJ1aWxkIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkIHdpdGggU1dDJyk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc29sZS5sb2coJ2VudHJ5OicsIGVudHJ5LCAndHlwZTonLCB0eXBlb2YgZW50cnkpO1xuICBjb25zb2xlLmxvZygnb3V0cHV0UGF0aDonLCBvdXRwdXRQYXRoLCAndHlwZTonLCB0eXBlb2Ygb3V0cHV0UGF0aCk7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgcGF0aDonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgY29uc29sZS5sb2coJ3dlYnBhY2tDb25maWcgZXhpc3RzOicsIGV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpO1xuXG4gIGlmKCFleGlzdHNTeW5jKHdlYnBhY2tDb25maWcpKSB7XG4gICAgY29uc3QgbGV4UGFja2FnZVBhdGggPSBnZXRMZXhQYWNrYWdlSnNvblBhdGgoKTtcbiAgICBjb25zdCBsZXhQYWNrYWdlRGlyID0gZGlybmFtZShsZXhQYWNrYWdlUGF0aCk7XG4gICAgY29uc3QgbGV4V2VicGFja0NvbmZpZyA9IHBhdGhSZXNvbHZlKGxleFBhY2thZ2VEaXIsICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhsZXhXZWJwYWNrQ29uZmlnKSkge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGxleFdlYnBhY2tDb25maWc7XG4gICAgICBjb25zb2xlLmxvZygnVXNpbmcgTGV4IHdlYnBhY2sgY29uZmlnOicsIHdlYnBhY2tDb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvdWxkIG5vdCBmaW5kIHdlYnBhY2suY29uZmlnLmpzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAnLS1jb2xvcicsXG4gICAgJy0tcHJvZ3Jlc3MnLFxuICAgICctLWNvbmZpZycsIHdlYnBhY2tDb25maWdcbiAgXTtcblxuICBpZihhbmFseXplKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWFuYWx5emUnKTtcbiAgaWYoY29uZmlnTmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1jb25maWdOYW1lJywgY29uZmlnTmFtZSk7XG4gIGlmKGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRlZmluZVByb2Nlc3NFbnZOb2RlRW52JywgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpO1xuICBpZihkZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRldnRvb2wnLCBkZXZ0b29sKTtcbiAgaWYoZGlzYWJsZUludGVycHJldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kaXNhYmxlSW50ZXJwcmV0Jyk7XG4gIGlmKGVudHJ5VmFsdWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tZW50cnknLCBlbnRyeVZhbHVlLnRvU3RyaW5nKCkpO1xuICBpZihlbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tZW52JywgZW52KTtcbiAgaWYoZmFpbE9uV2FybmluZ3MpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tZmFpbE9uV2FybmluZ3MnKTtcbiAgaWYoanNvbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1qc29uJywganNvbik7XG4gIGlmKG1vZGUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbW9kZScsIG1vZGUpO1xuICBpZihtZXJnZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tZXJnZScpO1xuICBpZihuYW1lKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5hbWUnLCBuYW1lKTtcbiAgaWYobm9EZXZ0b29sKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vRGV2dG9vbCcpO1xuICBpZihub1N0YXRzKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vU3RhdHMnKTtcbiAgaWYobm9UYXJnZXQpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9UYXJnZXQnKTtcbiAgaWYobm9XYXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoJyk7XG4gIGlmKG5vV2F0Y2hPcHRpb25zU3RkaW4pIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9XYXRjaE9wdGlvbnNTdGRpbicpO1xuICBpZihub2RlRW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vZGVFbnYnLCBub2RlRW52KTtcbiAgaWYob3V0cHV0UGF0aCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1vdXRwdXQtcGF0aCcsIG91dHB1dFBhdGgudG9TdHJpbmcoKSk7IC8vIENvbnZlcnQgdG8gc3RyaW5nXG4gIGlmKHN0YXRzKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLXN0YXRzJywgc3RhdHMpO1xuICBpZih0YXJnZXQpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tdGFyZ2V0JywgdGFyZ2V0KTtcbiAgaWYod2F0Y2gpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0td2F0Y2gnKTtcbiAgaWYod2F0Y2hPcHRpb25zU3RkaW4pIHdlYnBhY2tPcHRpb25zLnB1c2goJy0td2F0Y2hPcHRpb25zU3RkaW4nKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHt3ZWJwYWNrUGF0aH0gPSByZXNvbHZlV2VicGFja1BhdGhzKGN1cnJlbnREaXJuYW1lKTtcblxuICAgIGxldCBleGVjdXRhYmxlUGF0aCA9IHdlYnBhY2tQYXRoO1xuICAgIGxldCBmaW5hbFdlYnBhY2tPcHRpb25zOiBzdHJpbmdbXTtcblxuICAgIGlmKHdlYnBhY2tQYXRoID09PSAnbnB4Jykge1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFsnd2VicGFjaycsIC4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9IGVsc2UgaWYod2VicGFja1BhdGguZW5kc1dpdGgoJy5qcycpKSB7XG4gICAgICBleGVjdXRhYmxlUGF0aCA9ICdub2RlJztcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbd2VicGFja1BhdGgsIC4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFsuLi53ZWJwYWNrT3B0aW9uc107XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ3dlYnBhY2tQYXRoOicsIHdlYnBhY2tQYXRoKTtcbiAgICBjb25zb2xlLmxvZygnZXhlY3V0YWJsZVBhdGg6JywgZXhlY3V0YWJsZVBhdGgpO1xuICAgIGNvbnNvbGUubG9nKCdmaW5hbFdlYnBhY2tPcHRpb25zOicsIEpTT04uc3RyaW5naWZ5KGZpbmFsV2VicGFja09wdGlvbnMpKTtcbiAgICBjb25zb2xlLmxvZygnZmluYWxXZWJwYWNrT3B0aW9ucyB0eXBlOicsIEFycmF5LmlzQXJyYXkoZmluYWxXZWJwYWNrT3B0aW9ucykgPyAnQXJyYXknIDogdHlwZW9mIGZpbmFsV2VicGFja09wdGlvbnMpO1xuXG4gICAgY29uc3QgY2hpbGRQcm9jZXNzID0gZXhlY2EoZXhlY3V0YWJsZVBhdGgsIGZpbmFsV2VicGFja09wdGlvbnMsIHtlbmNvZGluZzogJ3V0ZjgnLCBzdGRpbzogJ3BpcGUnfSk7XG5cbiAgICBsZXQgYnVpbGRDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICBsZXQgYnVpbGRTdGF0cyA9IHtcbiAgICAgIG1vZHVsZXM6IDAsXG4gICAgICBhc3NldHM6IDAsXG4gICAgICBzaXplOiAnMCBCJ1xuICAgIH07XG5cbiAgICBjaGlsZFByb2Nlc3Muc3Rkb3V0Py5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjaGlsZFByb2Nlc3Muc3RkZXJyPy5vbignZGF0YScsIChkYXRhOiBCdWZmZXIpID0+IHtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGRhdGEudG9TdHJpbmcoKTtcblxuICAgICAgaGFuZGxlV2VicGFja1Byb2dyZXNzKG91dHB1dCwgc3Bpbm5lciwgcXVpZXQsICfwn4+X77iPJywgJ1dlYnBhY2sgQnVpbGRpbmcnKTtcblxuICAgICAgaWYoIWJ1aWxkQ29tcGxldGVkICYmIG91dHB1dC5pbmNsdWRlcygnY29tcGlsZWQgc3VjY2Vzc2Z1bGx5JykpIHtcbiAgICAgICAgYnVpbGRDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG5cbiAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBtb2R1bGVzLyk7XG4gICAgICAgIGNvbnN0IGFzc2V0TWF0Y2ggPSBvdXRwdXQubWF0Y2goLyhcXGQrKSBhc3NldHMvKTtcbiAgICAgICAgY29uc3Qgc2l6ZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgc3RhdHVzIChbXFxkLl0rIFxcdyspLykgfHwgb3V0cHV0Lm1hdGNoKC9hc3NldHMgYnkgcGF0aC4qPyhbXFxkLl0rIFxcdyspLyk7XG5cbiAgICAgICAgaWYobW9kdWxlTWF0Y2gpIGJ1aWxkU3RhdHMubW9kdWxlcyA9IHBhcnNlSW50KG1vZHVsZU1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKGFzc2V0TWF0Y2gpIGJ1aWxkU3RhdHMuYXNzZXRzID0gcGFyc2VJbnQoYXNzZXRNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihzaXplTWF0Y2gpIGJ1aWxkU3RhdHMuc2l6ZSA9IHNpemVNYXRjaFsxXTtcblxuICAgICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjaGlsZFByb2Nlc3M7XG5cbiAgICBpZighYnVpbGRDb21wbGV0ZWQpIHtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogV2VicGFjayBidWlsZCBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2sgVHJhY2U6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9nKGBcXG5XZWJwYWNrIE9wdGlvbnM6ICR7d2VicGFja09wdGlvbnMuc2xpY2UoMCwgNSkuam9pbignICcpfS4uLmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuXG4gICAgaWYoY21kLmFzc2lzdCkge1xuICAgICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSB3ZWJwYWNrIGVycm9yLi4uJyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICAgIHByb21wdDogYEZpeCB0aGlzIHdlYnBhY2sgYnVpbGQgZXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1cXG5cXG5FcnJvciBkZXRhaWxzOlxcbiR7ZXJyb3IudG9TdHJpbmcoKX1cXG5cXG5Db25maWd1cmF0aW9uIHVzZWQ6XFxuJHtKU09OLnN0cmluZ2lmeSh3ZWJwYWNrT3B0aW9ucywgbnVsbCwgMil9YCxcbiAgICAgICAgICB0YXNrOiAnaGVscCcsXG4gICAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgICBxdWlldFxuICAgICAgICB9KTtcblxuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgICB9IGNhdGNoKGFpRXJyb3IpIHtcbiAgICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgYXNzaXN0YW5jZScpO1xuICAgICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhc3Npc3RhbmNlIGVycm9yOicsIGFpRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGQgPSBhc3luYyAoY21kOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrID0gKCkgPT4gKHt9KSk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IHtcbiAgICBidW5kbGVyID0gJ3dlYnBhY2snLFxuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBxdWlldCA9IGZhbHNlLFxuICAgIHJlbW92ZSA9IGZhbHNlLFxuICAgIHRlc3QgPSBmYWxzZSxcbiAgICB0cmFuc2xhdGlvbnMgPSBmYWxzZSxcbiAgICB2YXJpYWJsZXMgPSAne30nXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBidWlsZGluZy4uLmAsICdpbmZvJywgcXVpZXQpO1xuXG4gIGF3YWl0IExleENvbmZpZy5wYXJzZUNvbmZpZyhjbWQpO1xuXG4gIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuXG4gIGNoZWNrTGlua2VkTW9kdWxlcygpO1xuXG4gIGxldCB2YXJpYWJsZXNPYmo6IG9iamVjdCA9IHtOT0RFX0VOVjogJ3Byb2R1Y3Rpb24nfTtcblxuICBpZih2YXJpYWJsZXMpIHtcbiAgICB0cnkge1xuICAgICAgdmFyaWFibGVzT2JqID0gSlNPTi5wYXJzZSh2YXJpYWJsZXMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9wdGlvbiBpcyBub3QgYSB2YWxpZCBKU09OIG9iamVjdC5gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzcy5lbnYgPSB7Li4ucHJvY2Vzcy5lbnYsIC4uLnZhcmlhYmxlc09ian07XG5cbiAgaWYodGVzdCkge1xuICAgIGxvZygnVGVzdCBtb2RlOiBCdWlsZCBlbnZpcm9ubWVudCBsb2FkZWQsIGV4aXRpbmcnLCAnaW5mbycsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHRyYW5zbGF0aW9ucykge1xuICAgIHNwaW5uZXIuc3RhcnQoJ1Byb2Nlc3NpbmcgdHJhbnNsYXRpb25zLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGggfHwgcHJvY2Vzcy5jd2QoKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInO1xuXG4gICAgICBhd2FpdCBwcm9jZXNzVHJhbnNsYXRpb25zKHNvdXJjZVBhdGgsIG91dHB1dFBhdGgsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZCgnVHJhbnNsYXRpb25zIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgfSBjYXRjaCh0cmFuc2xhdGlvbkVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwcm9jZXNzIHRyYW5zbGF0aW9uczogJHt0cmFuc2xhdGlvbkVycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gcHJvY2VzcyB0cmFuc2xhdGlvbnMuJyk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHNwaW5uZXIuc3RhcnQoJ0J1aWxkaW5nIGNvZGUuLi4nKTtcblxuICBpZihyZW1vdmUpIHtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXRGdWxsUGF0aCB8fCAnJyk7XG4gIH1cblxuICBsZXQgYnVpbGRSZXN1bHQgPSAwO1xuXG4gIGlmKGJ1bmRsZXIgPT09ICdzd2MnKSB7XG4gICAgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFdpdGhTV0Moc3Bpbm5lciwgY21kLCAoc3RhdHVzKSA9PiB7XG4gICAgICBidWlsZFJlc3VsdCA9IHN0YXR1cztcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFdlYnBhY2soc3Bpbm5lciwgY21kLCAoc3RhdHVzKSA9PiB7XG4gICAgICBidWlsZFJlc3VsdCA9IHN0YXR1cztcbiAgICB9KTtcbiAgfVxuXG4gIGlmKGJ1aWxkUmVzdWx0ID09PSAwICYmIGNtZC5hbmFseXplKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSBidWlsZCBvdXRwdXQgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHMgPSB7XG4gICAgICAgIG91dHB1dFBhdGg6IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGgsXG4gICAgICAgIGVudHJ5UG9pbnRzOiBidW5kbGVyID09PSAnc3djJyA/XG4gICAgICAgICAgYFNvdXJjZSBmaWxlczogJHtMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRofS8qKi8qLnt0cyxqc31gIDpcbiAgICAgICAgICBMZXhDb25maWcuY29uZmlnLndlYnBhY2s/LmVudHJ5IHx8ICdVbmtub3duIGVudHJ5IHBvaW50cydcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICBwcm9tcHQ6IGBBbmFseXplIHRoaXMgYnVpbGQgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzOlxuXG5CdWlsZCBUeXBlOiAke2J1bmRsZXJ9XG5Gb3JtYXQ6ICR7Y21kLmZvcm1hdCB8fCAnZGVmYXVsdCd9XG5FbnZpcm9ubWVudDogJHtMZXhDb25maWcuY29uZmlnLnRhcmdldEVudmlyb25tZW50fVxuJHtKU09OLnN0cmluZ2lmeShzdGF0cywgbnVsbCwgMil9XG5cbldoYXQgYXJlIHRoZSBrZXkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgZm9yIHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbj8gQ29uc2lkZXI6XG4xLiBCdW5kbGUgc2l6ZSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llc1xuMi4gQ29kZSBzcGxpdHRpbmcgcmVjb21tZW5kYXRpb25zXG4zLiBUcmVlLXNoYWtpbmcgaW1wcm92ZW1lbnRzXG40LiBQZXJmb3JtYW5jZSBlbmhhbmNlbWVudHNcbjUuIERlcGVuZGVuY3kgb3B0aW1pemF0aW9uc2AsXG4gICAgICAgIHRhc2s6ICdvcHRpbWl6ZScsXG4gICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgIHF1aWV0XG4gICAgICB9KTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSBidWlsZCBhbmFseXNpcyBjb21wbGV0ZScpO1xuICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgb3B0aW1pemF0aW9uIGFuYWx5c2lzJyk7XG4gICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQUkgYW5hbHlzaXMgZXJyb3I6JywgYWlFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDApIHtcbiAgICB0cnkge1xuICAgICAgaWYodXNlVHlwZXNjcmlwdCAmJiBidW5kbGVyID09PSAnc3djJykge1xuICAgICAgICBjb25zdCB0eXBlc2NyaXB0UGF0aCA9IHJlc29sdmVCaW5hcnlQYXRoKCd0c2MnLCAndHlwZXNjcmlwdCcpO1xuXG4gICAgICAgIGlmKHR5cGVzY3JpcHRQYXRoKSB7XG4gICAgICAgICAgc3Bpbm5lci5zdGFydCgnR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucy4uLicpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vc3JjJyk7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJyk7XG4gICAgICAgICAgICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgY3dkOiBzb3VyY2VGdWxsUGF0aCxcbiAgICAgICAgICAgICAgZG90OiBmYWxzZSxcbiAgICAgICAgICAgICAgbm9kaXI6IHRydWUsXG4gICAgICAgICAgICAgIGFic29sdXRlOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdHNGaWxlcyA9IGdsb2JTeW5jKGAqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikudHNgLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0c3hGaWxlcyA9IGdsb2JTeW5jKGAqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikudHN4YCwgZ2xvYk9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgYWxsU291cmNlRmlsZXMgPSBbLi4udHNGaWxlcywgLi4udHN4RmlsZXNdO1xuICAgICAgICAgICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgIC4uLkxleENvbmZpZy5nZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpLFxuICAgICAgICAgICAgICAuLi5hbGxTb3VyY2VGaWxlc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNhKHR5cGVzY3JpcHRQYXRoLCB0eXBlc2NyaXB0T3B0aW9ucywge1xuICAgICAgICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgICAgICAgIGFsbDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IG1heSBoYXZlIGVycm9ycyBidXQgc3RpbGwgZ2VuZXJhdGUgc29tZSBkZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgLy8gTG9nIHdhcm5pbmdzIGJ1dCBkb24ndCBmYWlsIGlmIGRlY2xhcmF0aW9ucyB3ZXJlIGdlbmVyYXRlZFxuICAgICAgICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuRXhpdCBDb2RlOiAke3Jlc3VsdC5leGl0Q29kZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG5UeXBlU2NyaXB0IENvbW1hbmQ6ICR7dHlwZXNjcmlwdFBhdGh9ICR7dHlwZXNjcmlwdE9wdGlvbnMuc2xpY2UoMCwgMTApLmpvaW4oJyAnKX0uLi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG5FcnJvciBPdXRwdXQ6XFxuJHtlcnJvck91dHB1dH1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxpbmVzID0gZXJyb3JPdXRwdXQuc3BsaXQoJ1xcbicpLmZpbHRlcihsaW5lID0+XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgbG9nKGBcXG5LZXkgRXJyb3JzOmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAke2xpbmV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gaGFkIGVycm9ycyAoY29udGludWluZyBhbnl3YXkpLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMgZ2VuZXJhdGVkICh3aXRoIHdhcm5pbmdzKS4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgbG9nKGBcXG5TdGFjazpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMgKGNvbnRpbnVpbmcgYW55d2F5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gICAgfSBjYXRjaChjb3B5RXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlczogJHtjb3B5RXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrKGJ1aWxkUmVzdWx0KTtcbiAgcmV0dXJuIGJ1aWxkUmVzdWx0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYnVpbGQ7XG4iXSwibmFtZXMiOlsidHJhbnNmb3JtIiwiZXhlY2EiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiZGlybmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiY2hlY2tMaW5rZWRNb2R1bGVzIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNyZWF0ZVNwaW5uZXIiLCJoYW5kbGVXZWJwYWNrUHJvZ3Jlc3MiLCJyZW1vdmVGaWxlcyIsInJlc29sdmVXZWJwYWNrUGF0aHMiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImxvZyIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJhaUZ1bmN0aW9uIiwiYm94ZW4iLCJjaGFsayIsImN1cnJlbnRGaWxlbmFtZSIsImN1cnJlbnREaXJuYW1lIiwiZXZhbCIsInByb2Nlc3MiLCJjd2QiLCJkaXNwbGF5QnVpbGRTdGF0dXMiLCJidW5kbGVyIiwib3V0cHV0UGF0aCIsInF1aWV0Iiwic3RhdHMiLCJzdGF0c0luZm8iLCJtb2R1bGVzIiwiYXNzZXRzIiwiZ3JlZW4iLCJjeWFuIiwic2l6ZSIsInN0YXR1c0JveCIsImJvbGQiLCJ1bmRlcmxpbmUiLCJ5ZWxsb3ciLCJwYWRkaW5nIiwibWFyZ2luIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsImNvbnNvbGUiLCJidWlsZFdpdGhTV0MiLCJzcGlubmVyIiwiY29tbWFuZE9wdGlvbnMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJmb3JtYXQiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsImNvbmZpZyIsInNvdXJjZURpciIsImdsb2JPcHRpb25zIiwiYWJzb2x1dGUiLCJkb3QiLCJub2RpciIsIm5vc29ydCIsInRzRmlsZXMiLCJqc0ZpbGVzIiwic291cmNlRmlsZXMiLCJvdXRwdXREaXIiLCJzdGFydCIsInRyYW5zZm9ybVByb21pc2VzIiwibWFwIiwiZmlsZSIsImZpbGVSZWxhdGl2ZVRvU291cmNlIiwib3V0cHV0RmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsImlzVFNYIiwiZW5kc1dpdGgiLCJzd2NPcHRpb25zIiwiZmlsZW5hbWUiLCJqc2MiLCJwYXJzZXIiLCJjb21tZW50cyIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0Iiwic3ludGF4IiwidHN4IiwicHJlc2VydmVBbGxDb21tZW50cyIsInRhcmdldCIsInJlYWN0IiwicnVudGltZSIsIm1pbmlmeSIsIm1vZHVsZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwicmVzdWx0Iiwid3JpdGVGaWxlU3luYyIsImNvZGUiLCJQcm9taXNlIiwiYWxsIiwic3VjY2VlZCIsImVycm9yIiwibWVzc2FnZSIsIkVycm9yIiwic3RhY2siLCJmYWlsIiwiYnVpbGRXaXRoV2VicGFjayIsImNtZCIsImFuYWx5emUiLCJjb25maWdOYW1lIiwiZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYiLCJkZXZ0b29sIiwiZGlzYWJsZUludGVycHJldCIsImVudHJ5IiwiZW52IiwiZmFpbE9uV2FybmluZ3MiLCJqc29uIiwibWVyZ2UiLCJtb2RlIiwibmFtZSIsIm5vZGVFbnYiLCJub0RldnRvb2wiLCJub1N0YXRzIiwibm9UYXJnZXQiLCJub1dhdGNoIiwibm9XYXRjaE9wdGlvbnNTdGRpbiIsIndhdGNoT3B0aW9uc1N0ZGluIiwiZW50cnlWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIndlYnBhY2tDb25maWciLCJpc1JlbGF0aXZlQ29uZmlnIiwic3Vic3RyIiwicHJvamVjdENvbmZpZ1BhdGgiLCJwcm9qZWN0Q29uZmlnUGF0aFRzIiwiaGFzUHJvamVjdENvbmZpZyIsInJlc29sdmVkQ29uZmlnIiwibGV4UGFja2FnZVBhdGgiLCJsZXhQYWNrYWdlRGlyIiwibGV4V2VicGFja0NvbmZpZyIsIndlYnBhY2tPcHRpb25zIiwicHVzaCIsInRvU3RyaW5nIiwid2VicGFja1BhdGgiLCJleGVjdXRhYmxlUGF0aCIsImZpbmFsV2VicGFja09wdGlvbnMiLCJKU09OIiwic3RyaW5naWZ5IiwiY2hpbGRQcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsImJ1aWxkQ29tcGxldGVkIiwiYnVpbGRTdGF0cyIsInN0ZG91dCIsIm9uIiwiZGF0YSIsIm91dHB1dCIsImluY2x1ZGVzIiwibW9kdWxlTWF0Y2giLCJtYXRjaCIsImFzc2V0TWF0Y2giLCJzaXplTWF0Y2giLCJwYXJzZUludCIsInN0ZGVyciIsInNsaWNlIiwiam9pbiIsImFzc2lzdCIsInByb21wdCIsInRhc2siLCJjb250ZXh0IiwiYWlFcnJvciIsImJ1aWxkIiwicmVtb3ZlIiwidGVzdCIsInRyYW5zbGF0aW9ucyIsInZhcmlhYmxlcyIsInBhcnNlQ29uZmlnIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJwYXJzZSIsInRyYW5zbGF0aW9uRXJyb3IiLCJidWlsZFJlc3VsdCIsInN0YXR1cyIsImVudHJ5UG9pbnRzIiwid2VicGFjayIsInR5cGVzY3JpcHRQYXRoIiwidHN4RmlsZXMiLCJhbGxTb3VyY2VGaWxlcyIsInR5cGVzY3JpcHRPcHRpb25zIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWplY3QiLCJleGl0Q29kZSIsImhhc0RlY2xhcmF0aW9ucyIsImVycm9yT3V0cHV0IiwiZXJyb3JMaW5lcyIsInNwbGl0IiwiZmlsdGVyIiwibGluZSIsInRyaW0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiZm9yRWFjaCIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLFFBQU8sS0FBSztBQUM1QyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUNFQyxPQUFPLEVBQ1BDLFlBQVlDLFlBQVksRUFDeEJDLFdBQVdDLFdBQVcsUUFFakIsT0FBTztBQUVkLFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxhQUFhLEVBQXFCQyxxQkFBcUIsRUFBRUMsV0FBVyxRQUFPLHFCQUFxQjtBQUNqSixTQUNFQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixFQUNyQkMsaUJBQWlCLFFBQ1osc0JBQXNCO0FBQzdCLFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFDdkMsU0FBUUMsbUJBQW1CLFFBQU8sOEJBQThCO0FBQ2hFLFNBQVFDLFVBQVUsUUFBTyxjQUFjO0FBQ3ZDLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixPQUFPQyxXQUFXLFFBQVE7QUFFMUIsSUFBSUM7QUFDSixJQUFJQztBQUVKLElBQUk7SUFDRkQsa0JBQWtCRSxLQUFLO0lBQ3ZCRCxpQkFBaUJwQixRQUFRbUI7QUFDM0IsRUFBRSxPQUFNO0lBQ05BLGtCQUFrQkcsUUFBUUMsR0FBRztJQUM3QkgsaUJBQWlCRSxRQUFRQyxHQUFHO0FBQzlCO0FBcUJBLE1BQU1DLHFCQUFxQixD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
@@ -31,7 +31,7 @@ export const compile = async (cmd, callback = ()=>({}))=>{
31
31
  log(`${cliName} compiling...`, 'info', quiet);
32
32
  await LexConfig.parseConfig(cmd);
33
33
  const { outputFullPath, sourceFullPath, swc: swcConfig, useTypescript } = LexConfig.config;
34
- const outputDir = outputPath || outputFullPath;
34
+ const outputDir = outputPath ? pathResolve(process.cwd(), outputPath) : outputFullPath || pathResolve(process.cwd(), './lib');
35
35
  const sourceDir = sourcePath ? pathResolve(process.cwd(), `./${sourcePath}`) : sourceFullPath || '';
36
36
  const dirName = getDirName();
37
37
  checkLinkedModules();
@@ -216,9 +216,9 @@ export const compile = async (cmd, callback = ()=>({}))=>{
216
216
  }
217
217
  spinner.start(watch ? 'Watching for changes...' : 'Compiling with SWC...');
218
218
  try {
219
- for (const file of sourceFiles){
220
- const fileRelativeToSource = pathRelative(sourceDir, pathResolve(sourceDir, file));
221
- const sourcePath = pathResolve(sourceDir, fileRelativeToSource);
219
+ const transformPromises = sourceFiles.map(async (file)=>{
220
+ const fileRelativeToSource = pathRelative(sourceDir, file);
221
+ const sourcePath = file;
222
222
  const outputFile = fileRelativeToSource.replace(/\.(ts|tsx)$/, '.js');
223
223
  const outputPath = pathResolve(outputDir, outputFile);
224
224
  const outputDirPath = dirname(outputPath);
@@ -260,7 +260,8 @@ export const compile = async (cmd, callback = ()=>({}))=>{
260
260
  };
261
261
  const result = await transform(sourceCode, swcOptions);
262
262
  writeFileSync(outputPath, result.code);
263
- }
263
+ });
264
+ await Promise.all(transformPromises);
264
265
  spinner.succeed('Compile completed successfully!');
265
266
  } catch (error) {
266
267
  log(`\n${cliName} Error: SWC compilation failed`, 'error', quiet);
@@ -274,6 +275,7 @@ export const compile = async (cmd, callback = ()=>({}))=>{
274
275
  }
275
276
  }
276
277
  if (!quiet) {
278
+ // eslint-disable-next-line no-console
277
279
  console.error('\nFull Error Details:', error);
278
280
  }
279
281
  spinner.fail('Code compiling failed.');
@@ -292,4 +294,4 @@ export const compile = async (cmd, callback = ()=>({}))=>{
292
294
  return 0;
293
295
  };
294
296
 
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBoYXNGaWxlVHlwZSA9IChzdGFydFBhdGg6IHN0cmluZywgZXh0OiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuICBpZighZXhpc3RzU3luYyhzdGFydFBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gcmVhZGRpclN5bmMoc3RhcnRQYXRoKTtcblxuICByZXR1cm4gZmlsZXMuc29tZSgoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWU6IHN0cmluZyA9IHBhdGhKb2luKHN0YXJ0UGF0aCwgZmlsZSk7XG4gICAgY29uc3QgZmlsZUV4dDogc3RyaW5nID0gcGF0aEV4dG5hbWUoZmlsZW5hbWUpO1xuICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoZmlsZW5hbWUpO1xuXG4gICAgaWYoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gaGFzRmlsZVR5cGUoZmlsZW5hbWUsIGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dC5pbmNsdWRlcyhmaWxlRXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGlsZSA9IGFzeW5jIChjbWQ6IGFueSwgY2FsbGJhY2s6IGFueSA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7XG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGNvbmZpZyxcbiAgICBmb3JtYXQgPSAnZXNtJyxcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0LFxuICAgIHJlbW92ZSxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBjb21waWxpbmcuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRoLCBzd2M6IHN3Y0NvbmZpZywgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGggfHwgb3V0cHV0RnVsbFBhdGg7XG4gIGNvbnN0IHNvdXJjZURpcjogc3RyaW5nID0gc291cmNlUGF0aCA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIGAuLyR7c291cmNlUGF0aH1gKSA6IHNvdXJjZUZ1bGxQYXRoIHx8ICcnO1xuICBjb25zdCBkaXJOYW1lID0gZ2V0RGlyTmFtZSgpO1xuXG4gIGNoZWNrTGlua2VkTW9kdWxlcygpO1xuXG4gIGlmKHJlbW92ZSkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dERpcik7XG4gIH1cblxuICBpZih1c2VUeXBlc2NyaXB0KSB7XG4gICAgY29uc3QgdHlwZXNjcmlwdFBhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCd0c2MnLCAndHlwZXNjcmlwdCcpO1xuXG4gICAgaWYoIXR5cGVzY3JpcHRQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9uczogc3RyaW5nW10gPSBjb25maWdcbiAgICAgID8gWyctcCcsIGNvbmZpZywgJy0tZW1pdERlY2xhcmF0aW9uT25seScsICctLXNraXBMaWJDaGVjayddIC8vIFVzZXIgcHJvdmlkZWQgY3VzdG9tIGNvbmZpZywgYnV0IHN0aWxsIG9ubHkgZW1pdCBkZWNsYXJhdGlvbnNcbiAgICAgIDogKCgpID0+IHtcbiAgICAgICAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgICAgICAgZG90OiBmYWxzZSxcbiAgICAgICAgICBub2RpcjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50cycsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgdHN4RmlsZXMgPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb24pLnRzeCcsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgY29uc3QgYWxsU291cmNlRmlsZXMgPSBbLi4udHNGaWxlcywgLi4udHN4RmlsZXNdO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgLi4uYWxsU291cmNlRmlsZXNcbiAgICAgICAgXTtcbiAgICAgIH0pKCk7XG5cbiAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgIGFsbDogdHJ1ZSxcbiAgICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICByZWplY3Q6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgaWYocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGhhc0RlY2xhcmF0aW9ucyA9IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdXcml0aW5nJykgfHwgcmVzdWx0LmFsbD8uaW5jbHVkZXMoJ0RlY2xhcmF0aW9uJykgfHwgZmFsc2U7XG4gICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IHJlc3VsdC5hbGwgfHwgJ1Vua25vd24gZXJyb3InO1xuXG4gICAgICAgIGlmKCFoYXNEZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5FeGl0IENvZGU6ICR7cmVzdWx0LmV4aXRDb2RlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcblR5cGVTY3JpcHQgQ29tbWFuZDogJHt0eXBlc2NyaXB0UGF0aH0gJHt0eXBlc2NyaXB0T3B0aW9ucy5qb2luKCcgJyl9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXJyb3IgT3V0cHV0OlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICAgICAgY29uc3QgZXJyb3JMaW5lcyA9IGVycm9yT3V0cHV0LnNwbGl0KCdcXG4nKS5maWx0ZXIoKGxpbmUpID0+XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nKCdcXG5LZXkgRXJyb3JzOicsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgICAgZXJyb3JMaW5lcy5zbGljZSgwLCAxMCkuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgICAgICAgICBsb2coYCAgJHtsaW5lfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG5cbiAgICAgICAgICBpZighcXVpZXQgJiYgZXJyb3JPdXRwdXQpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuV2FybmluZ3M6XFxuJHtlcnJvck91dHB1dH1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb25zIGdlbmVyYXRlZCAod2l0aCB3YXJuaW5ncykuJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnU3VjY2Vzc2Z1bGx5IGdlbmVyYXRlZCBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyEnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBleGNlcHRpb25gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2s6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMsIGNvbnRpbnVpbmcuLi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZURpcixcbiAgICBkb3Q6IGZhbHNlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikudHMqJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBqc0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikuanMnLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBjc3NGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuY3NzJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYoY3NzRmlsZXMubGVuZ3RoKSB7XG4gICAgY29uc3QgcG9zdGNzc1BhdGg6IHN0cmluZyA9IHJlc29sdmVCaW5hcnlQYXRoKCdwb3N0Y3NzJywgJ3Bvc3Rjc3MtY2xpJyk7XG5cbiAgICBpZighcG9zdGNzc1BhdGgpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogUG9zdENTUyBiaW5hcnkgbm90IGZvdW5kIGluIExleCdzIG5vZGVfbW9kdWxlcyBvciBtb25vcmVwbyByb290YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKCdQbGVhc2UgcmVpbnN0YWxsIExleCBvciBjaGVjayB5b3VyIGluc3RhbGxhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGNvbnN0IHBvc3Rjc3NPcHRpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgIGAke3NvdXJjZURpcn0vKiovKiouY3NzYCxcbiAgICAgICctLWJhc2UnLFxuICAgICAgc291cmNlRGlyLFxuICAgICAgJy0tZGlyJyxcbiAgICAgIG91dHB1dERpcixcbiAgICAgICctLWNvbmZpZycsXG4gICAgICBwYXRoUmVzb2x2ZShkaXJOYW1lLCAnLi4vLi4vcG9zdGNzcy5jb25maWcuanMnKVxuICAgIF07XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgZXhlY2EocG9zdGNzc1BhdGgsIHBvc3Rjc3NPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4J30pO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKGBTdWNjZXNzZnVsbHkgZm9ybWF0dGVkICR7Y3NzRmlsZXMubGVuZ3RofSBjc3MgZmlsZXMhYCk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCBmb3JtYXR0aW5nIGNzcy4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBnaWZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuZ2lmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGpwZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5qcGcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgcG5nRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnBuZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBzdmdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuc3ZnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGltYWdlRmlsZXM6IHN0cmluZ1tdID0gWy4uLmdpZkZpbGVzLCAuLi5qcGdGaWxlcywgLi4ucG5nRmlsZXMsIC4uLnN2Z0ZpbGVzXTtcblxuICBpZihpbWFnZUZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoaW1hZ2VGaWxlcywgJ2ltYWdlJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGltYWdlcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR0ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy50dGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgb3RmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm90ZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCB3b2ZmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZjJGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcud29mZjInLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3QgZm9udEZpbGVzOiBzdHJpbmdbXSA9IFsuLi50dGZGaWxlcywgLi4ub3RmRmlsZXMsIC4uLndvZmZGaWxlcywgLi4ud29mZjJGaWxlc107XG5cbiAgaWYoZm9udEZpbGVzLmxlbmd0aCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjb3B5RmlsZXMoZm9udEZpbGVzLCAnZm9udCcsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBmb250cyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1kRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLm1kJywgTGV4Q29uZmlnLmNvbmZpZyk7XG5cbiAgaWYobWRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKG1kRmlsZXMsICdkb2N1bWVudHMnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZG9jcyB0byBvdXRwdXQgZGlyZWN0b3J5LicpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGlmKHNvdXJjZUZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBObyBzb3VyY2UgZmlsZXMgZm91bmQgdG8gY29tcGlsZSBpbiAke3NvdXJjZURpcn1gLCAnd2FybicsIHF1aWV0KTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoJ05vIGZpbGVzIHRvIGNvbXBpbGUuJyk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KHdhdGNoID8gJ1dhdGNoaW5nIGZvciBjaGFuZ2VzLi4uJyA6ICdDb21waWxpbmcgd2l0aCBTV0MuLi4nKTtcblxuICB0cnkge1xuICAgIGZvcihjb25zdCBmaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICBjb25zdCBmaWxlUmVsYXRpdmVUb1NvdXJjZSA9IHBhdGhSZWxhdGl2ZShzb3VyY2VEaXIsIHBhdGhSZXNvbHZlKHNvdXJjZURpciwgZmlsZSkpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IHBhdGhSZXNvbHZlKHNvdXJjZURpciwgZmlsZVJlbGF0aXZlVG9Tb3VyY2UpO1xuICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IGZpbGVSZWxhdGl2ZVRvU291cmNlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIG1rZGlyU3luYyhvdXRwdXREaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGlzVFNYID0gZmlsZS5lbmRzV2l0aCgnLnRzeCcpO1xuICAgICAgY29uc3Qgc3djT3B0aW9ucyA9IHtcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgICAganNjOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5qc2MsXG4gICAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgICBjb21tZW50czogZmFsc2UsXG4gICAgICAgICAgICBkZWNvcmF0b3JzOiBzd2NDb25maWc/LmpzYz8ucGFyc2VyPy5kZWNvcmF0b3JzID8/IHRydWUsXG4gICAgICAgICAgICBkeW5hbWljSW1wb3J0OiBzd2NDb25maWc/LmpzYz8ucGFyc2VyPy5keW5hbWljSW1wb3J0ID8/IHRydWUsXG4gICAgICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyBhcyBjb25zdCxcbiAgICAgICAgICAgIHRzeDogaXNUU1hcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZXNlcnZlQWxsQ29tbWVudHM6IGZhbHNlLFxuICAgICAgICAgIHRhcmdldDogc3djQ29uZmlnPy5qc2M/LnRhcmdldCA/PyAnZXMyMDIwJyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGlzVFNYID8ge1xuICAgICAgICAgICAgLi4uc3djQ29uZmlnPy5qc2M/LnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtPy5yZWFjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gOiBzd2NDb25maWc/LmpzYz8udHJhbnNmb3JtXG4gICAgICAgIH0sXG4gICAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8ubW9kdWxlLFxuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdDb21waWxlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFNXQyBjb21waWxhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmKGVycm9yLnN0YWNrKSB7XG4gICAgICAgIGxvZyhgXFxuU3RhY2sgVHJhY2U6XFxuJHtlcnJvci5zdGFja31gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGlmKCdmaWxlbmFtZScgaW4gZXJyb3IgfHwgJ2ZpbGUnIGluIGVycm9yKSB7XG4gICAgICAgIGxvZyhgXFxuRmlsZTogJHsoZXJyb3IgYXMgYW55KS5maWxlbmFtZSB8fCAoZXJyb3IgYXMgYW55KS5maWxlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5mYWlsKCdDb2RlIGNvbXBpbGluZyBmYWlsZWQuJyk7XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlcy4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwibmFtZXMiOlsidHJhbnNmb3JtIiwiZXhlY2EiLCJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwicmVhZGRpclN5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwibWtkaXJTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwiam9pbiIsInBhdGhKb2luIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJkaXJuYW1lIiwiTGV4Q29uZmlnIiwiY2hlY2tMaW5rZWRNb2R1bGVzIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNvcHlGaWxlcyIsImNyZWF0ZVNwaW5uZXIiLCJnZXRGaWxlc0J5RXh0IiwicmVtb3ZlRmlsZXMiLCJnZXREaXJOYW1lIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJoYXNGaWxlVHlwZSIsInN0YXJ0UGF0aCIsImV4dCIsImZpbGVzIiwic29tZSIsImZpbGUiLCJmaWxlbmFtZSIsImZpbGVFeHQiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJpbmNsdWRlcyIsImNvbXBpbGUiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjb25maWciLCJmb3JtYXQiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJyZW1vdmUiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsIm91dHB1dERpciIsInNvdXJjZURpciIsInByb2Nlc3MiLCJjd2QiLCJkaXJOYW1lIiwidHlwZXNjcmlwdFBhdGgiLCJ0eXBlc2NyaXB0T3B0aW9ucyIsImdsb2JPcHRpb25zIiwiYWJzb2x1dGUiLCJkb3QiLCJub2RpciIsInRzRmlsZXMiLCJ0c3hGaWxlcyIsImFsbFNvdXJjZUZpbGVzIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJzdGFydCIsInJlc3VsdCIsImFsbCIsImVuY29kaW5nIiwicmVqZWN0IiwiZXhpdENvZGUiLCJoYXNEZWNsYXJhdGlvbnMiLCJlcnJvck91dHB1dCIsInN0ZGVyciIsInN0ZG91dCIsImVycm9yTGluZXMiLCJzcGxpdCIsImZpbHRlciIsImxpbmUiLCJ0cmltIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiZm9yRWFjaCIsImZhaWwiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsIm5vc29ydCIsImpzRmlsZXMiLCJzb3VyY2VGaWxlcyIsImNzc0ZpbGVzIiwicG9zdGNzc1BhdGgiLCJwb3N0Y3NzT3B0aW9ucyIsImdpZkZpbGVzIiwianBnRmlsZXMiLCJwbmdGaWxlcyIsInN2Z0ZpbGVzIiwiaW1hZ2VGaWxlcyIsInR0ZkZpbGVzIiwib3RmRmlsZXMiLCJ3b2ZmRmlsZXMiLCJ3b2ZmMkZpbGVzIiwiZm9udEZpbGVzIiwibWRGaWxlcyIsImZpbGVSZWxhdGl2ZVRvU291cmNlIiwib3V0cHV0RmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsImlzVFNYIiwiZW5kc1dpdGgiLCJzd2NPcHRpb25zIiwianNjIiwicGFyc2VyIiwiY29tbWVudHMiLCJkZWNvcmF0b3JzIiwiZHluYW1pY0ltcG9ydCIsInN5bnRheCIsInRzeCIsInByZXNlcnZlQWxsQ29tbWVudHMiLCJ0YXJnZXQiLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJ0eXBlIiwic291cmNlTWFwcyIsImNvZGUiLCJjb25zb2xlIiwiY29weUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxT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
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9jb21waWxlL2NvbXBpbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7dHJhbnNmb3JtfSBmcm9tICdAc3djL2NvcmUnO1xuaW1wb3J0IHtleGVjYX0gZnJvbSAnZXhlY2EnO1xuaW1wb3J0IHtleGlzdHNTeW5jLCBsc3RhdFN5bmMsIHJlYWRkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMsIG1rZGlyU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7ZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSwgam9pbiBhcyBwYXRoSm9pbiwgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLCByZXNvbHZlIGFzIHBhdGhSZXNvbHZlLCBkaXJuYW1lfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY29weUZpbGVzLCBjcmVhdGVTcGlubmVyLCBnZXRGaWxlc0J5RXh0LCByZW1vdmVGaWxlc30gZnJvbSAnLi4vLi4vdXRpbHMvYXBwLmpzJztcbmltcG9ydCB7Z2V0RGlyTmFtZSwgcmVzb2x2ZUJpbmFyeVBhdGh9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5cbmV4cG9ydCBjb25zdCBoYXNGaWxlVHlwZSA9IChzdGFydFBhdGg6IHN0cmluZywgZXh0OiBzdHJpbmdbXSk6IGJvb2xlYW4gPT4ge1xuICBpZighZXhpc3RzU3luYyhzdGFydFBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZmlsZXM6IHN0cmluZ1tdID0gcmVhZGRpclN5bmMoc3RhcnRQYXRoKTtcblxuICByZXR1cm4gZmlsZXMuc29tZSgoZmlsZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZmlsZW5hbWU6IHN0cmluZyA9IHBhdGhKb2luKHN0YXJ0UGF0aCwgZmlsZSk7XG4gICAgY29uc3QgZmlsZUV4dDogc3RyaW5nID0gcGF0aEV4dG5hbWUoZmlsZW5hbWUpO1xuICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoZmlsZW5hbWUpO1xuXG4gICAgaWYoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gaGFzRmlsZVR5cGUoZmlsZW5hbWUsIGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4dC5pbmNsdWRlcyhmaWxlRXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGlsZSA9IGFzeW5jIChjbWQ6IGFueSwgY2FsbGJhY2s6IGFueSA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7XG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIGNvbmZpZyxcbiAgICBmb3JtYXQgPSAnZXNtJyxcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0LFxuICAgIHJlbW92ZSxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3Qgc3Bpbm5lciA9IGNyZWF0ZVNwaW5uZXIocXVpZXQpO1xuXG4gIGxvZyhgJHtjbGlOYW1lfSBjb21waWxpbmcuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHNvdXJjZUZ1bGxQYXRoLCBzd2M6IHN3Y0NvbmZpZywgdXNlVHlwZXNjcmlwdH0gPSBMZXhDb25maWcuY29uZmlnO1xuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGhcbiAgICA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG91dHB1dFBhdGgpXG4gICAgOiAob3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJykpO1xuICBjb25zdCBzb3VyY2VEaXI6IHN0cmluZyA9IHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgLi8ke3NvdXJjZVBhdGh9YCkgOiBzb3VyY2VGdWxsUGF0aCB8fCAnJztcbiAgY29uc3QgZGlyTmFtZSA9IGdldERpck5hbWUoKTtcblxuICBjaGVja0xpbmtlZE1vZHVsZXMoKTtcblxuICBpZihyZW1vdmUpIHtcbiAgICBhd2FpdCByZW1vdmVGaWxlcyhvdXRwdXREaXIpO1xuICB9XG5cbiAgaWYodXNlVHlwZXNjcmlwdCkge1xuICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgndHNjJywgJ3R5cGVzY3JpcHQnKTtcblxuICAgIGlmKCF0eXBlc2NyaXB0UGF0aCkge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGJpbmFyeSBub3QgZm91bmQgaW4gTGV4J3Mgbm9kZV9tb2R1bGVzIG9yIG1vbm9yZXBvIHJvb3RgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBsb2coJ1BsZWFzZSByZWluc3RhbGwgTGV4IG9yIGNoZWNrIHlvdXIgaW5zdGFsbGF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnM6IHN0cmluZ1tdID0gY29uZmlnXG4gICAgICA/IFsnLXAnLCBjb25maWcsICctLWVtaXREZWNsYXJhdGlvbk9ubHknLCAnLS1za2lwTGliQ2hlY2snXSAvLyBVc2VyIHByb3ZpZGVkIGN1c3RvbSBjb25maWcsIGJ1dCBzdGlsbCBvbmx5IGVtaXQgZGVjbGFyYXRpb25zXG4gICAgICA6ICgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgICAgIGN3ZDogc291cmNlRGlyLFxuICAgICAgICAgIGRvdDogZmFsc2UsXG4gICAgICAgICAgbm9kaXI6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHNGaWxlcyA9IGdsb2JTeW5jKCcqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikudHMnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoJyoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c3gnLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGFsbFNvdXJjZUZpbGVzID0gWy4uLnRzRmlsZXMsIC4uLnRzeEZpbGVzXTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIC4uLkxleENvbmZpZy5nZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpLFxuICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgIF07XG4gICAgICB9KSgpO1xuXG4gICAgc3Bpbm5lci5zdGFydCgnR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNhKHR5cGVzY3JpcHRQYXRoLCB0eXBlc2NyaXB0T3B0aW9ucywge1xuICAgICAgICBhbGw6IHRydWUsXG4gICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICAgICAgcmVqZWN0OiBmYWxzZVxuICAgICAgfSk7XG5cbiAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgIGxvZyhgXFxuRXhpdCBDb2RlOiAke3Jlc3VsdC5leGl0Q29kZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgbG9nKGBcXG5UeXBlU2NyaXB0IENvbW1hbmQ6ICR7dHlwZXNjcmlwdFBhdGh9ICR7dHlwZXNjcmlwdE9wdGlvbnMuam9pbignICcpfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBsb2coYFxcbkVycm9yIE91dHB1dDpcXG4ke2Vycm9yT3V0cHV0fWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTGluZXMgPSBlcnJvck91dHB1dC5zcGxpdCgnXFxuJykuZmlsdGVyKChsaW5lKSA9PlxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnZXJyb3IgVFMnKSB8fFxuICAgICAgICAgICAgbGluZS5pbmNsdWRlcygnRXJyb3I6JykgfHxcbiAgICAgICAgICAgIGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ3NyYy8nKSB8fFxuICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnVFMnKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxvZygnXFxuS2V5IEVycm9yczonLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgICAgICAgICAgbG9nKGAgICR7bGluZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYoZXJyb3JMaW5lcy5sZW5ndGggPiAxMCkge1xuICAgICAgICAgICAgICBsb2coYCAgLi4uIGFuZCAke2Vycm9yTGluZXMubGVuZ3RoIC0gMTB9IG1vcmUgZXJyb3JzYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGZhaWxlZC4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGNvbXBsZXRlZCB3aXRoIGVycm9yc2AsICd3YXJuJywgcXVpZXQpO1xuXG4gICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQgKHdpdGggd2FybmluZ3MpLicpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1N1Y2Nlc3NmdWxseSBnZW5lcmF0ZWQgVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMhJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBzcGlubmVyLmZhaWwoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBoYWQgaXNzdWVzLCBjb250aW51aW5nLi4uJyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb24pLnRzKicsIGdsb2JPcHRpb25zKTtcbiAgY29uc3QganNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYygnKiovISgqLnNwZWN8Ki50ZXN0fCouaW50ZWdyYXRpb24pLmpzJywgZ2xvYk9wdGlvbnMpO1xuICBjb25zdCBzb3VyY2VGaWxlczogc3RyaW5nW10gPSBbLi4udHNGaWxlcywgLi4uanNGaWxlc107XG5cbiAgY29uc3QgY3NzRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmNzcycsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKGNzc0ZpbGVzLmxlbmd0aCkge1xuICAgIGNvbnN0IHBvc3Rjc3NQYXRoOiBzdHJpbmcgPSByZXNvbHZlQmluYXJ5UGF0aCgncG9zdGNzcycsICdwb3N0Y3NzLWNsaScpO1xuXG4gICAgaWYoIXBvc3Rjc3NQYXRoKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFBvc3RDU1MgYmluYXJ5IG5vdCBmb3VuZCBpbiBMZXgncyBub2RlX21vZHVsZXMgb3IgbW9ub3JlcG8gcm9vdGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGxvZygnUGxlYXNlIHJlaW5zdGFsbCBMZXggb3IgY2hlY2sgeW91ciBpbnN0YWxsYXRpb24uJywgJ2luZm8nLCBxdWlldCk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3N0Y3NzT3B0aW9uczogc3RyaW5nW10gPSBbXG4gICAgICBgJHtzb3VyY2VEaXJ9LyoqLyoqLmNzc2AsXG4gICAgICAnLS1iYXNlJyxcbiAgICAgIHNvdXJjZURpcixcbiAgICAgICctLWRpcicsXG4gICAgICBvdXRwdXREaXIsXG4gICAgICAnLS1jb25maWcnLFxuICAgICAgcGF0aFJlc29sdmUoZGlyTmFtZSwgJy4uLy4uL3Bvc3Rjc3MuY29uZmlnLmpzJylcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV4ZWNhKHBvc3Rjc3NQYXRoLCBwb3N0Y3NzT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCd9KTtcbiAgICAgIHNwaW5uZXIuc3VjY2VlZChgU3VjY2Vzc2Z1bGx5IGZvcm1hdHRlZCAke2Nzc0ZpbGVzLmxlbmd0aH0gY3NzIGZpbGVzIWApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgZm9ybWF0dGluZyBjc3MuJyk7XG5cbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZ2lmRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLmdpZicsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBqcGdGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcuanBnJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHBuZ0ZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5wbmcnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgc3ZnRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLnN2ZycsIExleENvbmZpZy5jb25maWcpO1xuICBjb25zdCBpbWFnZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi5naWZGaWxlcywgLi4uanBnRmlsZXMsIC4uLnBuZ0ZpbGVzLCAuLi5zdmdGaWxlc107XG5cbiAgaWYoaW1hZ2VGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGltYWdlRmlsZXMsICdpbWFnZScsIHNwaW5uZXIsIExleENvbmZpZy5jb25maWcpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gbW92ZSBpbWFnZXMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB0dGZGaWxlczogc3RyaW5nW10gPSBnZXRGaWxlc0J5RXh0KCcudHRmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IG90ZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5vdGYnLCBMZXhDb25maWcuY29uZmlnKTtcbiAgY29uc3Qgd29mZkZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy53b2ZmJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IHdvZmYyRmlsZXM6IHN0cmluZ1tdID0gZ2V0RmlsZXNCeUV4dCgnLndvZmYyJywgTGV4Q29uZmlnLmNvbmZpZyk7XG4gIGNvbnN0IGZvbnRGaWxlczogc3RyaW5nW10gPSBbLi4udHRmRmlsZXMsIC4uLm90ZkZpbGVzLCAuLi53b2ZmRmlsZXMsIC4uLndvZmYyRmlsZXNdO1xuXG4gIGlmKGZvbnRGaWxlcy5sZW5ndGgpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY29weUZpbGVzKGZvbnRGaWxlcywgJ2ZvbnQnLCBzcGlubmVyLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIG1vdmUgZm9udHMgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZEZpbGVzOiBzdHJpbmdbXSA9IGdldEZpbGVzQnlFeHQoJy5tZCcsIExleENvbmZpZy5jb25maWcpO1xuXG4gIGlmKG1kRmlsZXMubGVuZ3RoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNvcHlGaWxlcyhtZEZpbGVzLCAnZG9jdW1lbnRzJywgc3Bpbm5lciwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBtb3ZlIGRvY3MgdG8gb3V0cHV0IGRpcmVjdG9yeS4nKTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBpZihzb3VyY2VGaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gV2FybmluZzogTm8gc291cmNlIGZpbGVzIGZvdW5kIHRvIGNvbXBpbGUgaW4gJHtzb3VyY2VEaXJ9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKCdObyBmaWxlcyB0byBjb21waWxlLicpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgc3Bpbm5lci5zdGFydCh3YXRjaCA/ICdXYXRjaGluZyBmb3IgY2hhbmdlcy4uLicgOiAnQ29tcGlsaW5nIHdpdGggU1dDLi4uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0cmFuc2Zvcm1Qcm9taXNlcyA9IHNvdXJjZUZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgY29uc3QgZmlsZVJlbGF0aXZlVG9Tb3VyY2UgPSBwYXRoUmVsYXRpdmUoc291cmNlRGlyLCBmaWxlKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBmaWxlO1xuICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IGZpbGVSZWxhdGl2ZVRvU291cmNlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIG1rZGlyU3luYyhvdXRwdXREaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGlzVFNYID0gZmlsZS5lbmRzV2l0aCgnLnRzeCcpO1xuICAgICAgY29uc3Qgc3djT3B0aW9ucyA9IHtcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgICAganNjOiB7XG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5qc2MsXG4gICAgICAgICAgcGFyc2VyOiB7XG4gICAgICAgICAgICBjb21tZW50czogZmFsc2UsXG4gICAgICAgICAgICBkZWNvcmF0b3JzOiBzd2NDb25maWc/LmpzYz8ucGFyc2VyPy5kZWNvcmF0b3JzID8/IHRydWUsXG4gICAgICAgICAgICBkeW5hbWljSW1wb3J0OiBzd2NDb25maWc/LmpzYz8ucGFyc2VyPy5keW5hbWljSW1wb3J0ID8/IHRydWUsXG4gICAgICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyBhcyBjb25zdCxcbiAgICAgICAgICAgIHRzeDogaXNUU1hcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByZXNlcnZlQWxsQ29tbWVudHM6IGZhbHNlLFxuICAgICAgICAgIHRhcmdldDogc3djQ29uZmlnPy5qc2M/LnRhcmdldCA/PyAnZXMyMDIwJyxcbiAgICAgICAgICB0cmFuc2Zvcm06IGlzVFNYID8ge1xuICAgICAgICAgICAgLi4uc3djQ29uZmlnPy5qc2M/LnRyYW5zZm9ybSxcbiAgICAgICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnIGFzIGNvbnN0LFxuICAgICAgICAgICAgICAuLi5zd2NDb25maWc/LmpzYz8udHJhbnNmb3JtPy5yZWFjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gOiBzd2NDb25maWc/LmpzYz8udHJhbnNmb3JtXG4gICAgICAgIH0sXG4gICAgICAgIG1pbmlmeTogZmFsc2UsXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIC4uLnN3Y0NvbmZpZz8ubW9kdWxlLFxuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKVxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2VNYXBzOiBzd2NDb25maWc/LnNvdXJjZU1hcHMgfHwgJ2lubGluZSdcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYW5zZm9ybShzb3VyY2VDb2RlLCBzd2NPcHRpb25zKTtcblxuICAgICAgd3JpdGVGaWxlU3luYyhvdXRwdXRQYXRoLCByZXN1bHQuY29kZSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0cmFuc2Zvcm1Qcm9taXNlcyk7XG5cbiAgICBzcGlubmVyLnN1Y2NlZWQoJ0NvbXBpbGUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogU1dDIGNvbXBpbGF0aW9uIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFxdWlldCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgc3Bpbm5lci5mYWlsKCdDb2RlIGNvbXBpbGluZyBmYWlsZWQuJyk7XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gIH0gY2F0Y2goY29weUVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlcy4nKTtcblxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgY2FsbGJhY2soMCk7XG4gIHJldHVybiAwO1xufTsiXSwibmFtZXMiOlsidHJhbnNmb3JtIiwiZXhlY2EiLCJleGlzdHNTeW5jIiwibHN0YXRTeW5jIiwicmVhZGRpclN5bmMiLCJyZWFkRmlsZVN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwibWtkaXJTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwiam9pbiIsInBhdGhKb2luIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJkaXJuYW1lIiwiTGV4Q29uZmlnIiwiY2hlY2tMaW5rZWRNb2R1bGVzIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNvcHlGaWxlcyIsImNyZWF0ZVNwaW5uZXIiLCJnZXRGaWxlc0J5RXh0IiwicmVtb3ZlRmlsZXMiLCJnZXREaXJOYW1lIiwicmVzb2x2ZUJpbmFyeVBhdGgiLCJsb2ciLCJoYXNGaWxlVHlwZSIsInN0YXJ0UGF0aCIsImV4dCIsImZpbGVzIiwic29tZSIsImZpbGUiLCJmaWxlbmFtZSIsImZpbGVFeHQiLCJzdGF0IiwiaXNEaXJlY3RvcnkiLCJpbmNsdWRlcyIsImNvbXBpbGUiLCJjbWQiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJjb25maWciLCJmb3JtYXQiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJyZW1vdmUiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJzcGlubmVyIiwicGFyc2VDb25maWciLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidXNlVHlwZXNjcmlwdCIsIm91dHB1dERpciIsInByb2Nlc3MiLCJjd2QiLCJzb3VyY2VEaXIiLCJkaXJOYW1lIiwidHlwZXNjcmlwdFBhdGgiLCJ0eXBlc2NyaXB0T3B0aW9ucyIsImdsb2JPcHRpb25zIiwiYWJzb2x1dGUiLCJkb3QiLCJub2RpciIsInRzRmlsZXMiLCJ0c3hGaWxlcyIsImFsbFNvdXJjZUZpbGVzIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJzdGFydCIsInJlc3VsdCIsImFsbCIsImVuY29kaW5nIiwicmVqZWN0IiwiZXhpdENvZGUiLCJoYXNEZWNsYXJhdGlvbnMiLCJlcnJvck91dHB1dCIsInN0ZGVyciIsInN0ZG91dCIsImVycm9yTGluZXMiLCJzcGxpdCIsImZpbHRlciIsImxpbmUiLCJ0cmltIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsInNsaWNlIiwiZm9yRWFjaCIsImZhaWwiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsIm5vc29ydCIsImpzRmlsZXMiLCJzb3VyY2VGaWxlcyIsImNzc0ZpbGVzIiwicG9zdGNzc1BhdGgiLCJwb3N0Y3NzT3B0aW9ucyIsImdpZkZpbGVzIiwianBnRmlsZXMiLCJwbmdGaWxlcyIsInN2Z0ZpbGVzIiwiaW1hZ2VGaWxlcyIsInR0ZkZpbGVzIiwib3RmRmlsZXMiLCJ3b2ZmRmlsZXMiLCJ3b2ZmMkZpbGVzIiwiZm9udEZpbGVzIiwibWRGaWxlcyIsInRyYW5zZm9ybVByb21pc2VzIiwibWFwIiwiZmlsZVJlbGF0aXZlVG9Tb3VyY2UiLCJvdXRwdXRGaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwiaXNUU1giLCJlbmRzV2l0aCIsInN3Y09wdGlvbnMiLCJqc2MiLCJwYXJzZXIiLCJjb21tZW50cyIsImRlY29yYXRvcnMiLCJkeW5hbWljSW1wb3J0Iiwic3ludGF4IiwidHN4IiwicHJlc2VydmVBbGxDb21tZW50cyIsInRhcmdldCIsInJlYWN0IiwicnVudGltZSIsIm1pbmlmeSIsIm1vZHVsZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwiY29kZSIsIlByb21pc2UiLCJjb25zb2xlIiwiY29weUVycm9yIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxTQUFTLFFBQU8sWUFBWTtBQUNwQyxTQUFRQyxLQUFLLFFBQU8sUUFBUTtBQUM1QixTQUFRQyxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsV0FBVyxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxRQUFPLEtBQUs7QUFDOUYsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FBUUMsV0FBV0MsV0FBVyxFQUFFQyxRQUFRQyxRQUFRLEVBQUVDLFlBQVlDLFlBQVksRUFBRUMsV0FBV0MsV0FBVyxFQUFFQyxPQUFPLFFBQU8sT0FBTztBQUV6SCxTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGtCQUFrQixFQUFFQyxtQkFBbUIsRUFBRUMsU0FBUyxFQUFFQyxhQUFhLEVBQUVDLGFBQWEsRUFBRUMsV0FBVyxRQUFPLHFCQUFxQjtBQUNqSSxTQUFRQyxVQUFVLEVBQUVDLGlCQUFpQixRQUFPLHNCQUFzQjtBQUNsRSxTQUFRQyxHQUFHLFFBQU8scUJBQXFCO0FBRXZDLE9BQU8sTUFBTUMsY0FBYyxDQUFDQyxXQUFtQkM7SUFDN0MsSUFBRyxDQUFDN0IsV0FBVzRCLFlBQVk7UUFDekIsT0FBTztJQUNUO0lBRUEsTUFBTUUsUUFBa0I1QixZQUFZMEI7SUFFcEMsT0FBT0UsTUFBTUMsSUFBSSxDQUFDLENBQUNDO1FBQ2pCLE1BQU1DLFdBQW1CdEIsU0FBU2lCLFdBQVdJO1FBQzdDLE1BQU1FLFVBQWtCekIsWUFBWXdCO1FBQ3BDLE1BQU1FLE9BQU9sQyxVQUFVZ0M7UUFFdkIsSUFBR0UsS0FBS0MsV0FBVyxJQUFJO1lBQ3JCLE9BQU9ULFlBQVlNLFVBQVVK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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.52.0",
3
+ "version": "1.52.2",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/webpack.config.js CHANGED
@@ -652,6 +652,9 @@ export default (webpackEnv, webpackOptions) => {
652
652
  '.gql',
653
653
  '.graphql'
654
654
  ],
655
+ extensionAlias: {
656
+ '.js': ['.ts', '.tsx', '.js', '.jsx']
657
+ },
655
658
  fallback: {
656
659
  assert: relativeNodePath('assert', dirName),
657
660
  buffer: relativeNodePath('buffer', dirName),