@nlabs/lex 1.55.2 → 1.56.1

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.
@@ -2,7 +2,6 @@ const config = {
2
2
  addons: [
3
3
  '@storybook/addon-docs',
4
4
  '@storybook/addon-links',
5
- '@storybook/addon-postcss',
6
5
  {
7
6
  name: '@storybook/addon-styling-webpack',
8
7
  options: {
@@ -56,4 +55,4 @@ const config = {
56
55
  }
57
56
  };
58
57
 
59
- export default config;
58
+ export default config;
@@ -33,7 +33,7 @@ export interface LexConfigType {
33
33
  dev?: DevConfig;
34
34
  entryHTML?: string;
35
35
  entryJs?: string;
36
- env?: object;
36
+ env?: object | null;
37
37
  eslint?: ESLintConfig;
38
38
  gitUrl?: string;
39
39
  vitest?: VitestConfig;
@@ -62,8 +62,8 @@ export declare class LexConfig {
62
62
  static set useTypescript(value: boolean);
63
63
  static getLexDir(): string;
64
64
  static updateConfig(updatedConfig: LexConfigType): LexConfigType;
65
- static addConfigParams(cmd: any, params: LexConfigType): void;
66
- static parseConfig(cmd: any, isRoot?: boolean): Promise<void>;
65
+ static addConfigParams(cmd: Record<string, any>, params: LexConfigType): void;
66
+ static parseConfig(cmd: Record<string, any>, isRoot?: boolean): Promise<void>;
67
67
  static checkTypescriptConfig(): void;
68
68
  static getTypeScriptDeclarationFlags(): string[];
69
69
  static checkLintTypescriptConfig(): void;
package/lib/LexConfig.js CHANGED
@@ -175,7 +175,7 @@ export class LexConfig {
175
175
  LexConfig.config.useTypescript = value;
176
176
  const { entryJs, sourceFullPath, targetEnvironment } = LexConfig.config;
177
177
  if (entryJs === 'index.js' && value) {
178
- const indexPath = pathResolve(cwd, sourceFullPath, 'index.tsx');
178
+ const indexPath = pathResolve(cwd, sourceFullPath || cwd, 'index.tsx');
179
179
  const hasIndexTsx = existsSync(indexPath);
180
180
  if (hasIndexTsx) {
181
181
  LexConfig.config.entryJs = 'index.tsx';
@@ -183,6 +183,12 @@ export class LexConfig {
183
183
  LexConfig.config.entryJs = 'index.ts';
184
184
  }
185
185
  }
186
+ LexConfig.config.swc = LexConfig.config.swc || {
187
+ ...defaultConfigValues.swc
188
+ };
189
+ LexConfig.config.swc.jsc = LexConfig.config.swc.jsc || {
190
+ ...defaultConfigValues.swc.jsc
191
+ };
186
192
  LexConfig.config.swc.jsc.parser = {
187
193
  syntax: 'typescript',
188
194
  tsx: true
@@ -414,4 +420,4 @@ _define_property(LexConfig, "config", {
414
420
  ...defaultConfigValues
415
421
  });
416
422
 
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYnBhY2tDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBlbnRyeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvdXRwdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBsdWdpbnM/OiB1bmtub3duW107XG4gIHN0YXRpY1BhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlDb25maWcge1xuICBwcm92aWRlcj86ICdjdXJzb3InIHwgJ2NvcGlsb3QnIHwgJ29wZW5haScgfCAnYW50aHJvcGljJyB8ICdub25lJztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZDb25maWcge1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBkZXY/OiBEZXZDb25maWc7XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0O1xuICBlc2xpbnQ/OiBFU0xpbnRDb25maWc7XG4gIGdpdFVybD86IHN0cmluZztcbiAgdml0ZXN0PzogVml0ZXN0Q29uZmlnO1xuICBsaWJyYXJ5TmFtZT86IHN0cmluZztcbiAgbGlicmFyeVRhcmdldD86IHN0cmluZztcbiAgb3V0cHV0RmlsZT86IHN0cmluZztcbiAgb3V0cHV0RnVsbFBhdGg/OiBzdHJpbmc7XG4gIG91dHB1dEhhc2g/OiBib29sZWFuO1xuICBvdXRwdXRQYXRoPzogc3RyaW5nO1xuICBwYWNrYWdlTWFuYWdlcj86ICducG0nIHwgJ3lhcm4nO1xuICBwcmVzZXQ/OiAnd2ViJyB8ICdub2RlJyB8ICdsYW1iZGEnIHwgJ21vYmlsZSc7XG4gIHNvdXJjZUZ1bGxQYXRoPzogc3RyaW5nO1xuICBzb3VyY2VQYXRoPzogc3RyaW5nO1xuICBzd2M/OiBTV0NPcHRpb25zO1xuICB0YXJnZXRFbnZpcm9ubWVudD86ICdub2RlJyB8ICd3ZWInO1xuICB1c2VHcmFwaFFsPzogYm9vbGVhbjtcbiAgdXNlVHlwZXNjcmlwdD86IGJvb2xlYW47XG4gIHdlYnBhY2s/OiBXZWJwYWNrQ29uZmlnO1xufVxuXG5leHBvcnQgdHlwZSBDb25maWcgPSBMZXhDb25maWdUeXBlO1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZ1ZhbHVlczogTGV4Q29uZmlnVHlwZSA9IHtcbiAgYWk6IHtcbiAgICBtYXhUb2tlbnM6IDQwMDAsXG4gICAgbW9kZWw6ICdncHQtNG8nLFxuICAgIHByb3ZpZGVyOiAnbm9uZScsXG4gICAgdGVtcGVyYXR1cmU6IDAuMVxuICB9LFxuICBjb25maWdGaWxlczogW10sXG4gIGNvcHlGaWxlczogW10sXG4gIGVudHJ5SFRNTDogJ2luZGV4Lmh0bWwnLFxuICBlbnRyeUpzOiAnaW5kZXguanMnLFxuICBlbnY6IG51bGwsXG4gIGVzbGludDoge30sXG4gIHZpdGVzdDoge30sXG4gIG91dHB1dEZ1bGxQYXRoOiBwYXRoUmVzb2x2ZShjd2QsICcuL2xpYicpLFxuICBvdXRwdXRIYXNoOiBmYWxzZSxcbiAgb3V0cHV0UGF0aDogJy4vbGliJyxcbiAgcGFja2FnZU1hbmFnZXI6ICducG0nLFxuICBwcmVzZXQ6ICd3ZWInLFxuICBzb3VyY2VGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9zcmMnKSxcbiAgc291cmNlUGF0aDogJy4vc3JjJyxcbiAgc3djOiB7XG4gICAgaW5saW5lU291cmNlc0NvbnRlbnQ6IHRydWUsXG4gICAgaXNNb2R1bGU6IHRydWUsXG4gICAganNjOiB7XG4gICAgICBleHRlcm5hbEhlbHBlcnM6IGZhbHNlLFxuICAgICAga2VlcENsYXNzTmFtZXM6IGZhbHNlLFxuICAgICAgbG9vc2U6IGZhbHNlLFxuICAgICAgcGFyc2VyOiB7XG4gICAgICAgIGRlY29yYXRvcnM6IHRydWUsXG4gICAgICAgIGR5bmFtaWNJbXBvcnQ6IHRydWUsXG4gICAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgICB0c3g6IHRydWVcbiAgICAgIH0sXG4gICAgICB0YXJnZXQ6ICdlczIwMjMnLFxuICAgICAgdHJhbnNmb3JtOiB7XG4gICAgICAgIHJlYWN0OiB7XG4gICAgICAgICAgcnVudGltZTogJ2F1dG9tYXRpYydcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWluaWZ5OiBmYWxzZSxcbiAgICBtb2R1bGU6IHtcbiAgICAgIGxhenk6IGZhbHNlLFxuICAgICAgbm9JbnRlcm9wOiBmYWxzZSxcbiAgICAgIHN0cmljdDogZmFsc2UsXG4gICAgICBzdHJpY3RNb2RlOiB0cnVlLFxuICAgICAgdHlwZTogJ2VzNidcbiAgICB9LFxuICAgIHNvdXJjZU1hcHM6ICdpbmxpbmUnXG4gIH0sXG4gIHRhcmdldEVudmlyb25tZW50OiAnd2ViJyxcbiAgdXNlR3JhcGhRbDogZmFsc2UsXG4gIHVzZVR5cGVzY3JpcHQ6IGZhbHNlLFxuICB3ZWJwYWNrOiB7XG4gICAgc3RhdGljUGF0aDogJy4vc3JjL3N0YXRpYydcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhY2thZ2VEaXIgPSAoKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgY29uc3QgY3VycmVudFBrZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsICdwYWNrYWdlLmpzb24nKTtcblxuICBpZihleGlzdHNTeW5jKGN1cnJlbnRQa2dQYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhjdXJyZW50UGtnUGF0aCwgJ3V0ZjgnKSk7XG4gICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgcmV0dXJuIGN3ZDtcbiAgICAgIH1cbiAgICB9IGNhdGNoe1xuICAgICAgcmV0dXJuIGN3ZDtcbiAgICB9XG4gIH1cblxuICBsZXQgc2VhcmNoRGlyID0gY3dkO1xuXG4gIGZvcihsZXQgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG4gICAgY29uc3QgcGtnUGF0aCA9IHBhdGhSZXNvbHZlKHNlYXJjaERpciwgJ3BhY2thZ2UuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocGtnUGF0aCkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGY4JykpO1xuXG4gICAgICAgIGlmKCFwa2cud29ya3NwYWNlcykge1xuICAgICAgICAgIHJldHVybiBzZWFyY2hEaXI7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2h7XG4gICAgICAgIC8vIENvbnRpbnVlIHNlYXJjaGluZ1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoc2VhcmNoRGlyKTtcblxuICAgIGlmKHBhcmVudCA9PT0gc2VhcmNoRGlyKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VhcmNoRGlyID0gcGFyZW50O1xuICB9XG5cbiAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG5cbiAgZm9yKGNvbnN0IGZvcm1hdCBvZiBjb25maWdGb3JtYXRzKSB7XG4gICAgY29uc3QgY29uZmlnUGF0aCA9IGZpbmRGaWxlVXAuc3luYyhgbGV4LmNvbmZpZy4ke2Zvcm1hdH1gLCBjd2QsIDUpO1xuXG4gICAgaWYoY29uZmlnUGF0aCkge1xuICAgICAgcmV0dXJuIGRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGN3ZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCA9IChjb25maWdOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy5idWlsZC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5idWlsZC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHByb2plY3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0QnVpbGRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdEJ1aWxkQ29uZmlnID0gcGF0aFJlc29sdmUoY3dkLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocm9vdEJ1aWxkQ29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RCdWlsZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcubGludC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RMaW50Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0TGludENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmVzbGludC5qc29uJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKHJvb3RMaW50Q29uZmlnKSkge1xuICAgICAgcmV0dXJuIHJvb3RMaW50Q29uZmlnO1xuICAgIH1cbiAgfVxuXG4gIGlmKGNvbmZpZ05hbWUgPT09ICd0c2NvbmZpZy50ZXN0Lmpzb24nKSB7XG4gICAgY29uc3QgcHJvamVjdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiBwcm9qZWN0VGVzdENvbmZpZztcbiAgICB9XG5cbiAgICBjb25zdCByb290VGVzdENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290VGVzdENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290VGVzdENvbmZpZztcbiAgICB9XG4gIH1cblxuICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHByb2plY3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3Qgcm9vdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShjd2QsIGNvbmZpZ05hbWUpO1xuXG4gIGlmKGV4aXN0c1N5bmMocm9vdENvbmZpZ1BhdGgpKSB7XG4gICAgcmV0dXJuIHJvb3RDb25maWdQYXRoO1xuICB9XG5cbiAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuXG4gIHJldHVybiBwYXRoUmVzb2x2ZShsZXhEaXIsIGNvbmZpZ05hbWUpO1xufTtcblxuZXhwb3J0IGNsYXNzIExleENvbmZpZyB7XG4gIHN0YXRpYyBjb25maWc6IExleENvbmZpZ1R5cGUgPSB7XG4gICAgLi4uZGVmYXVsdENvbmZpZ1ZhbHVlc1xuICB9O1xuXG4gIHN0YXRpYyBzZXQgdXNlVHlwZXNjcmlwdCh2YWx1ZTogYm9vbGVhbikge1xuICAgIExleENvbmZpZy5jb25maWcudXNlVHlwZXNjcmlwdCA9IHZhbHVlO1xuICAgIGNvbnN0IHtlbnRyeUpzLCBzb3VyY2VGdWxsUGF0aCwgdGFyZ2V0RW52aXJvbm1lbnR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICAgIGlmKGVudHJ5SnMgPT09ICdpbmRleC5qcycgJiYgdmFsdWUpIHtcbiAgICAgIGNvbnN0IGluZGV4UGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCwgJ2luZGV4LnRzeCcpO1xuICAgICAgY29uc3QgaGFzSW5kZXhUc3g6IGJvb2xlYW4gPSBleGlzdHNTeW5jKGluZGV4UGF0aCk7XG5cbiAgICAgIGlmKGhhc0luZGV4VHN4KSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuZW50cnlKcyA9ICdpbmRleC50c3gnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MucGFyc2VyID0ge1xuICAgICAgc3ludGF4OiAndHlwZXNjcmlwdCcsXG4gICAgICB0c3g6IHRydWVcbiAgICB9O1xuXG4gICAgaWYodGFyZ2V0RW52aXJvbm1lbnQgPT09ICd3ZWInKSB7XG4gICAgICBMZXhDb25maWcuY29uZmlnLnN3Yy5qc2MudHJhbnNmb3JtID0ge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldExleERpcigpOiBzdHJpbmcge1xuICAgIHJldHVybiBkaXJuYW1lKGdldExleFBhY2thZ2VKc29uUGF0aCgpKTtcbiAgfVxuXG4gIHN0YXRpYyB1cGRhdGVDb25maWcodXBkYXRlZENvbmZpZzogTGV4Q29uZmlnVHlwZSk6IExleENvbmZpZ1R5cGUge1xuICAgIGNvbnN0IHtvdXRwdXRGdWxsUGF0aCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgc291cmNlRnVsbFBhdGgsIHVzZVR5cGVzY3JpcHQsIGFpfSA9IHVwZGF0ZWRDb25maWc7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKHVzZVR5cGVzY3JpcHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSB1c2VUeXBlc2NyaXB0O1xuICAgIH1cblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCAmJiBvdXRwdXRGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfVxuXG4gICAgaWYoc291cmNlUGF0aCAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZUZ1bGxQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHVwZGF0ZWRDb25maWcuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBzb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZihhaSkge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haSA9IHsuLi5MZXhDb25maWcuY29uZmlnLmFpLCAuLi5haX07XG5cbiAgICAgIGlmKHByb2Nlc3MuZW52LkNVUlNPUl9JREUgPT09ICd0cnVlJyAmJiBMZXhDb25maWcuY29uZmlnLmFpLnByb3ZpZGVyID09PSAnbm9uZScpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9ICdjdXJzb3InO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZywgLi4udXBkYXRlZENvbmZpZ307XG5cbiAgICByZXR1cm4gTGV4Q29uZmlnLmNvbmZpZztcbiAgfVxuXG4gIHN0YXRpYyBhZGRDb25maWdQYXJhbXMoY21kLCBwYXJhbXM6IExleENvbmZpZ1R5cGUpIHtcbiAgICBjb25zdCBuYW1lUHJvcGVydHk6IHN0cmluZyA9ICdfbmFtZSc7XG4gICAgY29uc3Qge2Vudmlyb25tZW50LCBvdXRwdXRQYXRoLCBzb3VyY2VQYXRoLCB0eXBlc2NyaXB0fSA9IGNtZDtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuXG4gICAgaWYob3V0cHV0UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMub3V0cHV0UGF0aCA9IG91dHB1dFBhdGg7XG4gICAgICBwYXJhbXMub3V0cHV0RnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBvdXRwdXRQYXRoKTtcbiAgICB9IGVsc2UgaWYocGFyYW1zLm91dHB1dFBhdGggJiYgIXBhcmFtcy5vdXRwdXRGdWxsUGF0aCkge1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgcGFyYW1zLm91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnNvdXJjZVBhdGggPSBzb3VyY2VQYXRoO1xuICAgICAgcGFyYW1zLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5zb3VyY2VQYXRoICYmICFwYXJhbXMuc291cmNlRnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHBhcmFtcy5zb3VyY2VQYXRoKTtcbiAgICB9XG5cbiAgICBpZih0eXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy51c2VUeXBlc2NyaXB0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZihlbnZpcm9ubWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudGFyZ2V0RW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudCA9PT0gJ3dlYicgPyAnd2ViJyA6ICdub2RlJztcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVudi5MRVhfQ09ORklHID0gSlNPTi5zdHJpbmdpZnkoXG4gICAgICB7XG4gICAgICAgIC4uLkxleENvbmZpZy51cGRhdGVDb25maWcocGFyYW1zKSxcbiAgICAgICAgY29tbWFuZE5hbWU6IGNtZFtuYW1lUHJvcGVydHldLFxuICAgICAgICBpc1N0YXRpYzogY21kLnN0YXRpY1xuICAgICAgfSwgbnVsbCwgMFxuICAgICk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgcGFyc2VDb25maWcoY21kLCBpc1Jvb3Q6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qge2NsaU5hbWUgPSAnTGV4JywgbGV4Q29uZmlnLCBsZXhDb25maWdOYW1lLCBxdWlldCwgdHlwZXNjcmlwdCwgZGVidWcgPSBmYWxzZX0gPSBjbWQ7XG4gICAgY29uc3QgY29uZmlnRm9ybWF0cyA9IFsnanMnLCAnbWpzJywgJ2NqcycsICd0cycsICdqc29uJ107XG4gICAgY29uc3QgY29uZmlnQmFzZU5hbWU6IHN0cmluZyA9IGxleENvbmZpZ05hbWUgfHwgJ2xleC5jb25maWcnO1xuICAgIGxldCBjb25maWdQYXRoOiBzdHJpbmcgPSBsZXhDb25maWcgfHwgJyc7XG4gICAgbGV0IGNvbmZpZ0V4aXN0czogYm9vbGVhbiA9IGxleENvbmZpZyA/IGV4aXN0c1N5bmMoY29uZmlnUGF0aCkgOiBmYWxzZTtcblxuICAgIGlmKCFjb25maWdQYXRoIHx8ICFjb25maWdFeGlzdHMpIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZyhgU2VhcmNoaW5nIGZvciBjb25maWcgZmlsZXMgd2l0aCBiYXNlIG5hbWU6ICR7Y29uZmlnQmFzZU5hbWV9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICB9XG5cbiAgICAgIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgICAgICBjb25zdCBwb3RlbnRpYWxQYXRoID0gaXNSb290XG4gICAgICAgICAgPyBwYXRoUmVzb2x2ZShjd2QsIGAuLyR7Y29uZmlnQmFzZU5hbWV9LiR7Zm9ybWF0fWApXG4gICAgICAgICAgOiByZWxhdGl2ZUZpbGVQYXRoKGAke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gLCBjd2QpO1xuXG4gICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgbG9nKGBDaGVja2luZyBmb3IgY29uZmlnIGZpbGU6ICR7cG90ZW50aWFsUGF0aH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGV4aXN0c1N5bmMocG90ZW50aWFsUGF0aCkpIHtcbiAgICAgICAgICBjb25maWdQYXRoID0gcG90ZW50aWFsUGF0aDtcbiAgICAgICAgICBjb25maWdFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoY29uZmlnRXhpc3RzKSB7XG4gICAgICBsb2coYFVzaW5nICR7Y2xpTmFtZX0gY29uZmlndXJhdGlvbiBmaWxlOiAke2NvbmZpZ1BhdGh9YCwgJ25vdGUnLCBxdWlldCk7XG4gICAgICBjb25zdCBleHQ6IHN0cmluZyA9IHBhdGhFeHRuYW1lKGNvbmZpZ1BhdGgpO1xuXG4gICAgICBpZihleHQgPT09ICcuanNvbicpIHtcbiAgICAgICAgY29uc3QgY29uZmlnQ29udGVudDogc3RyaW5nID0gcmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGY4Jyk7XG5cbiAgICAgICAgaWYoY29uZmlnQ29udGVudCkge1xuICAgICAgICAgIGxldCBjb25maWdKc29uOiBMZXhDb25maWdUeXBlO1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSBKU09OLnBhcnNlKGNvbmZpZ0NvbnRlbnQpPy5kZWZhdWx0IHx8IHt9O1xuICAgICAgICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIHBhcnNlIEpTT04gY29uZmlnOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgY29uZmlnSnNvbiA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBjb25maWdKc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IENvbmZpZyBmaWxlIG1hbGZvcm1lZCwgJHtjb25maWdQYXRofWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmKFsnLmpzJywgJy5tanMnLCAnLmNqcycsICcudHMnXS5pbmNsdWRlcyhleHQpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IGxleEN1c3RvbUNvbmZpZztcblxuICAgICAgICAgIGlmKGV4dCA9PT0gJy5janMnKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlVXJsID0gbmV3IFVSTChgZmlsZTovLy8ke3BhdGhSZXNvbHZlKGNvbmZpZ1BhdGgpfWApLmhyZWY7XG5cbiAgICAgICAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGxvZyhgTG9hZGluZyBDb21tb25KUyBjb25maWcgZnJvbTogJHtmaWxlVXJsfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV4Q3VzdG9tQ29uZmlnID0gYXdhaXQgaW1wb3J0KGZpbGVVcmwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgRVNNL1RTIGNvbmZpZyBmcm9tOiAke2NvbmZpZ1BhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChjb25maWdQYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBjb25maWcgPSBsZXhDdXN0b21Db25maWcuZGVmYXVsdCB8fCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgbG9nKGBMb2FkZWQgY29uZmlnOiAke0pTT04uc3RyaW5naWZ5KGNvbmZpZywgbnVsbCwgMil9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoIWNvbmZpZykge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IFdhcm5pbmc6IENvbmZpZyBmaWxlIGxvYWRlZCBidXQgbm8gY29uZmlndXJhdGlvbiBmb3VuZGAsICd3YXJuJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBjb25maWcgfHwge30pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gbG9hZCBjb25maWcgZmlsZTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtdXN0IGJlIGEgSlMsIENKUywgTUpTLCBUUywgb3IgSlNPTiBmaWxlLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgbG9nKCdObyBjb25maWcgZmlsZSBmb3VuZC4gVXNpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uLicsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBMZXhDb25maWcudXNlVHlwZXNjcmlwdCA9ICEhdHlwZXNjcmlwdDtcbiAgICAgIExleENvbmZpZy5hZGRDb25maWdQYXJhbXMoY21kLCBMZXhDb25maWcuY29uZmlnKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY2hlY2tUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG4gICAgY29uc3QgdHNjb25maWdQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAnLi90c2NvbmZpZy5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1BhdGgpKSB7XG4gICAgICBjb25zdCBsZXhEaXIgPSBMZXhDb25maWcuZ2V0TGV4RGlyKCk7XG4gICAgICBjb25zdCBiYXNlQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLmJhc2UuanNvbicpO1xuICAgICAgY29uc3QgdGVtcGxhdGVDb25maWdQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVtcGxhdGUuanNvbicpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGV4aXN0c1N5bmMoYmFzZUNvbmZpZ1BhdGgpID8gYmFzZUNvbmZpZ1BhdGggOiB0ZW1wbGF0ZUNvbmZpZ1BhdGg7XG5cbiAgICAgIGlmKGV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1BhdGgsIHJlYWRGaWxlU3luYyhzb3VyY2VQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjd2QgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG91dHB1dFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dFBhdGggfHwgJy4vbGliJztcbiAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUoY3dkLCBvdXRwdXRQYXRoKTtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VQYXRoIHx8ICcuL3NyYyc7XG4gICAgY29uc3Qgc291cmNlRnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlUGF0aCk7XG4gICAgY29uc3QgcmVsYXRpdmVPdXREaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBvdXRwdXRGdWxsUGF0aCkgfHwgJy4vbGliJztcbiAgICBjb25zdCByZWxhdGl2ZVJvb3REaXIgPSBwYXRoUmVsYXRpdmUoY3dkLCBzb3VyY2VGdWxsUGF0aCkgfHwgJy4vc3JjJztcblxuICAgIHJldHVybiBbXG4gICAgICAnLS1lbWl0RGVjbGFyYXRpb25Pbmx5JywgLy8gQ1JJVElDQUw6IE9ubHkgZW1pdCAuZC50cyBmaWxlcywgbm8gSlMgZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uJywgLy8gR2VuZXJhdGUgZGVjbGFyYXRpb24gZmlsZXNcbiAgICAgICctLWRlY2xhcmF0aW9uTWFwJywgLy8gR2VuZXJhdGUgc291cmNlIG1hcHMgZm9yIGRlY2xhcmF0aW9uc1xuICAgICAgJy0tb3V0RGlyJywgcmVsYXRpdmVPdXREaXIsXG4gICAgICAnLS1yb290RGlyJywgcmVsYXRpdmVSb290RGlyLFxuICAgICAgJy0tc2tpcExpYkNoZWNrJywgLy8gU2tpcCB0eXBlIGNoZWNraW5nIG9mIGRlY2xhcmF0aW9uIGZpbGVzIChmYXN0ZXIsIG1vcmUgbGVuaWVudClcbiAgICAgICctLWVzTW9kdWxlSW50ZXJvcCcsXG4gICAgICAnLS1hbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzJyxcbiAgICAgICctLW1vZHVsZScsICdOb2RlTmV4dCcsXG4gICAgICAnLS1tb2R1bGVSZXNvbHV0aW9uJywgJ05vZGVOZXh0JyxcbiAgICAgICctLXRhcmdldCcsICdFU05leHQnLFxuICAgICAgJy0tanN4JywgJ3JlYWN0LWpzeCcsXG4gICAgICAnLS1pc29sYXRlZE1vZHVsZXMnLFxuICAgICAgJy0tcmVzb2x2ZUpzb25Nb2R1bGUnLFxuICAgICAgJy0tYWxsb3dKcydcbiAgICAgIC8vIE5vdGU6IC0tbm9VbnVzZWRMb2NhbHMgYW5kIC0tbm9VbnVzZWRQYXJhbWV0ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgICAvLyBhbmQgd291bGQgYWN0dWFsbHkgZW5hYmxlIHN0cmljdCBjaGVja2luZywgd2hpY2ggd2Ugd2FudCB0byBhdm9pZCBmb3IgZmFzdGVyIGRlY2xhcmF0aW9uIGdlbmVyYXRpb25cbiAgICBdO1xuICB9XG5cbiAgc3RhdGljIGNoZWNrTGludFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnTGludFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcubGludC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ0xpbnRQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcubGludC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ0xpbnRQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVGVzdFR5cGVzY3JpcHRDb25maWcoKSB7XG4gICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnVGVzdFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGxleERpciwgJy4vdHNjb25maWcudGVzdC5qc29uJyk7XG5cbiAgICBpZighZXhpc3RzU3luYyh0c2NvbmZpZ1Rlc3RQYXRoKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aFJlc29sdmUobGV4RGlyLCAndHNjb25maWcudGVzdC5qc29uJyk7XG4gICAgICBpZihleGlzdHNTeW5jKHRlbXBsYXRlUGF0aCkpIHtcbiAgICAgICAgd3JpdGVGaWxlU3luYyh0c2NvbmZpZ1Rlc3RQYXRoLCByZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCB0eXBlIFNXQ09wdGlvbnMgPSBPcHRpb25zO1xuIl0sIm5hbWVzIjpbImZpbmRGaWxlVXAiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsImRpcm5hbWUiLCJleHRuYW1lIiwicGF0aEV4dG5hbWUiLCJyZWxhdGl2ZSIsInBhdGhSZWxhdGl2ZSIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsIlVSTCIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlbGF0aXZlRmlsZVBhdGgiLCJsb2ciLCJjd2QiLCJwcm9jZXNzIiwiZGVmYXVsdENvbmZpZ1ZhbHVlcyIsImFpIiwibWF4VG9rZW5zIiwibW9kZWwiLCJwcm92aWRlciIsInRlbXBlcmF0dXJlIiwiY29uZmlnRmlsZXMiLCJjb3B5RmlsZXMiLCJlbnRyeUhUTUwiLCJlbnRyeUpzIiwiZW52IiwiZXNsaW50Iiwidml0ZXN0Iiwib3V0cHV0RnVsbFBhdGgiLCJvdXRwdXRIYXNoIiwib3V0cHV0UGF0aCIsInBhY2thZ2VNYW5hZ2VyIiwicHJlc2V0Iiwic291cmNlRnVsbFBhdGgiLCJzb3VyY2VQYXRoIiwic3djIiwiaW5saW5lU291cmNlc0NvbnRlbnQiLCJpc01vZHVsZSIsImpzYyIsImV4dGVybmFsSGVscGVycyIsImtlZXBDbGFzc05hbWVzIiwibG9vc2UiLCJwYXJzZXIiLCJkZWNvcmF0b3JzIiwiZHluYW1pY0ltcG9ydCIsInN5bnRheCIsInRzeCIsInRhcmdldCIsInRyYW5zZm9ybSIsInJlYWN0IiwicnVudGltZSIsIm1pbmlmeSIsIm1vZHVsZSIsImxhenkiLCJub0ludGVyb3AiLCJzdHJpY3QiLCJzdHJpY3RNb2RlIiwidHlwZSIsInNvdXJjZU1hcHMiLCJ0YXJnZXRFbnZpcm9ubWVudCIsInVzZUdyYXBoUWwiLCJ1c2VUeXBlc2NyaXB0Iiwid2VicGFjayIsInN0YXRpY1BhdGgiLCJnZXRQYWNrYWdlRGlyIiwiY3VycmVudFBrZ1BhdGgiLCJwa2ciLCJKU09OIiwicGFyc2UiLCJ3b3Jrc3BhY2VzIiwic2VhcmNoRGlyIiwiaSIsInBrZ1BhdGgiLCJwYXJlbnQiLCJjb25maWdGb3JtYXRzIiwiZm9ybWF0IiwiY29uZmlnUGF0aCIsInN5bmMiLCJnZXRUeXBlU2NyaXB0Q29uZmlnUGF0aCIsImNvbmZpZ05hbWUiLCJwYWNrYWdlRGlyIiwicHJvamVjdEJ1aWxkQ29uZmlnIiwicm9vdEJ1aWxkQ29uZmlnIiwicHJvamVjdExpbnRDb25maWciLCJyb290TGludENvbmZpZyIsInByb2plY3RUZXN0Q29uZmlnIiwicm9vdFRlc3RDb25maWciLCJwcm9qZWN0Q29uZmlnUGF0aCIsInJvb3RDb25maWdQYXRoIiwibGV4RGlyIiwiTGV4Q29uZmlnIiwiZ2V0TGV4RGlyIiwidmFsdWUiLCJjb25maWciLCJpbmRleFBhdGgiLCJoYXNJbmRleFRzeCIsInVwZGF0ZUNvbmZpZyIsInVwZGF0ZWRDb25maWciLCJ1bmRlZmluZWQiLCJDVVJTT1JfSURFIiwiYWRkQ29uZmlnUGFyYW1zIiwiY21kIiwicGFyYW1zIiwibmFtZVByb3BlcnR5IiwiZW52aXJvbm1lbnQiLCJ0eXBlc2NyaXB0IiwiTEVYX0NPTkZJRyIsInN0cmluZ2lmeSIsImNvbW1hbmROYW1lIiwiaXNTdGF0aWMiLCJzdGF0aWMiLCJwYXJzZUNvbmZpZyIsImlzUm9vdCIsImNsaU5hbWUiLCJsZXhDb25maWciLCJsZXhDb25maWdOYW1lIiwicXVpZXQiLCJkZWJ1ZyIsImNvbmZpZ0Jhc2VOYW1lIiwiY29uZmlnRXhpc3RzIiwicG90ZW50aWFsUGF0aCIsImV4dCIsImNvbmZpZ0NvbnRlbnQiLCJjb25maWdKc29uIiwiZGVmYXVsdCIsImVycm9yIiwibWVzc2FnZSIsImluY2x1ZGVzIiwibGV4Q3VzdG9tQ29uZmlnIiwiZmlsZVVybCIsImhyZWYiLCJjb25zb2xlIiwiY2hlY2tUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdQYXRoIiwiYmFzZUNvbmZpZ1BhdGgiLCJ0ZW1wbGF0ZUNvbmZpZ1BhdGgiLCJnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncyIsInJlbGF0aXZlT3V0RGlyIiwicmVsYXRpdmVSb290RGlyIiwiY2hlY2tMaW50VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnTGludFBhdGgiLCJ0ZW1wbGF0ZVBhdGgiLCJjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnIiwidHNjb25maWdUZXN0UGF0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOzs7Q0FHQyxHQUNELE9BQU9BLGdCQUFnQixlQUFlO0FBQ3RDLFNBQVFDLFVBQVUsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUMzRCxTQUNFQyxPQUFPLEVBQ1BDLFdBQVdDLFdBQVcsRUFDdEJDLFlBQVlDLFlBQVksRUFDeEJDLFdBQVdDLFdBQVcsUUFDakIsT0FBTztBQUNkLFNBQVFDLEdBQUcsUUFBTyxNQUFNO0FBRXhCLFNBQVFDLHFCQUFxQixFQUFFQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUFDeEUsU0FBUUMsR0FBRyxRQUFPLGlCQUFpQjtBQUtuQyxNQUFNQyxNQUFjQyxRQUFRRCxHQUFHO0FBZ0UvQixPQUFPLE1BQU1FLHNCQUFxQztJQUNoREMsSUFBSTtRQUNGQyxXQUFXO1FBQ1hDLE9BQU87UUFDUEMsVUFBVTtRQUNWQyxhQUFhO0lBQ2Y7SUFDQUMsYUFBYSxFQUFFO0lBQ2ZDLFdBQVcsRUFBRTtJQUNiQyxXQUFXO0lBQ1hDLFNBQVM7SUFDVEMsS0FBSztJQUNMQyxRQUFRLENBQUM7SUFDVEMsUUFBUSxDQUFDO0lBQ1RDLGdCQUFnQnBCLFlBQVlLLEtBQUs7SUFDakNnQixZQUFZO0lBQ1pD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
423
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MZXhDb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTgtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBmaW5kRmlsZVVwIGZyb20gJ2ZpbmQtZmlsZS11cCc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSBhcyBwYXRoRXh0bmFtZSxcbiAgcmVsYXRpdmUgYXMgcGF0aFJlbGF0aXZlLFxuICByZXNvbHZlIGFzIHBhdGhSZXNvbHZlXG59IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtVUkx9IGZyb20gJ3VybCc7XG5cbmltcG9ydCB7Z2V0TGV4UGFja2FnZUpzb25QYXRoLCByZWxhdGl2ZUZpbGVQYXRofSBmcm9tICcuL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4vdXRpbHMvbG9nLmpzJztcblxuaW1wb3J0IHR5cGUge09wdGlvbnN9IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQgdHlwZSB7TGludGVyfSBmcm9tICdlc2xpbnQnO1xuXG5jb25zdCBjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCk7XG5cblxuZXhwb3J0IGludGVyZmFjZSBWaXRlc3RDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdlYnBhY2tDb25maWcge1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xuICBlbnRyeT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvdXRwdXQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbW9kdWxlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHBsdWdpbnM/OiB1bmtub3duW107XG4gIHN0YXRpY1BhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQUlDb25maWcge1xuICBwcm92aWRlcj86ICdjdXJzb3InIHwgJ2NvcGlsb3QnIHwgJ29wZW5haScgfCAnYW50aHJvcGljJyB8ICdub25lJztcbiAgYXBpS2V5Pzogc3RyaW5nO1xuICBtb2RlbD86IHN0cmluZztcbiAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXZDb25maWcge1xuICBwb3J0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVTTGludENvbmZpZyB7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIGV4dGVuZHM/OiBzdHJpbmdbXTtcbiAgcnVsZXM/OiBMaW50ZXIuUnVsZXNSZWNvcmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGV4Q29uZmlnVHlwZSB7XG4gIGFpPzogQUlDb25maWc7XG4gIGNvbmZpZ0ZpbGVzPzogc3RyaW5nW107XG4gIGNvcHlGaWxlcz86IHN0cmluZ1tdO1xuICBkZXY/OiBEZXZDb25maWc7XG4gIGVudHJ5SFRNTD86IHN0cmluZztcbiAgZW50cnlKcz86IHN0cmluZztcbiAgZW52Pzogb2JqZWN0IHwgbnVsbDtcbiAgZXNsaW50PzogRVNMaW50Q29uZmlnO1xuICBnaXRVcmw/OiBzdHJpbmc7XG4gIHZpdGVzdD86IFZpdGVzdENvbmZpZztcbiAgbGlicmFyeU5hbWU/OiBzdHJpbmc7XG4gIGxpYnJhcnlUYXJnZXQ/OiBzdHJpbmc7XG4gIG91dHB1dEZpbGU/OiBzdHJpbmc7XG4gIG91dHB1dEZ1bGxQYXRoPzogc3RyaW5nO1xuICBvdXRwdXRIYXNoPzogYm9vbGVhbjtcbiAgb3V0cHV0UGF0aD86IHN0cmluZztcbiAgcGFja2FnZU1hbmFnZXI/OiAnbnBtJyB8ICd5YXJuJztcbiAgcHJlc2V0PzogJ3dlYicgfCAnbm9kZScgfCAnbGFtYmRhJyB8ICdtb2JpbGUnO1xuICBzb3VyY2VGdWxsUGF0aD86IHN0cmluZztcbiAgc291cmNlUGF0aD86IHN0cmluZztcbiAgc3djPzogU1dDT3B0aW9ucztcbiAgdGFyZ2V0RW52aXJvbm1lbnQ/OiAnbm9kZScgfCAnd2ViJztcbiAgdXNlR3JhcGhRbD86IGJvb2xlYW47XG4gIHVzZVR5cGVzY3JpcHQ/OiBib29sZWFuO1xuICB3ZWJwYWNrPzogV2VicGFja0NvbmZpZztcbn1cblxuZXhwb3J0IHR5cGUgQ29uZmlnID0gTGV4Q29uZmlnVHlwZTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWdWYWx1ZXM6IExleENvbmZpZ1R5cGUgPSB7XG4gIGFpOiB7XG4gICAgbWF4VG9rZW5zOiA0MDAwLFxuICAgIG1vZGVsOiAnZ3B0LTRvJyxcbiAgICBwcm92aWRlcjogJ25vbmUnLFxuICAgIHRlbXBlcmF0dXJlOiAwLjFcbiAgfSxcbiAgY29uZmlnRmlsZXM6IFtdLFxuICBjb3B5RmlsZXM6IFtdLFxuICBlbnRyeUhUTUw6ICdpbmRleC5odG1sJyxcbiAgZW50cnlKczogJ2luZGV4LmpzJyxcbiAgZW52OiBudWxsLFxuICBlc2xpbnQ6IHt9LFxuICB2aXRlc3Q6IHt9LFxuICBvdXRwdXRGdWxsUGF0aDogcGF0aFJlc29sdmUoY3dkLCAnLi9saWInKSxcbiAgb3V0cHV0SGFzaDogZmFsc2UsXG4gIG91dHB1dFBhdGg6ICcuL2xpYicsXG4gIHBhY2thZ2VNYW5hZ2VyOiAnbnBtJyxcbiAgcHJlc2V0OiAnd2ViJyxcbiAgc291cmNlRnVsbFBhdGg6IHBhdGhSZXNvbHZlKGN3ZCwgJy4vc3JjJyksXG4gIHNvdXJjZVBhdGg6ICcuL3NyYycsXG4gIHN3Yzoge1xuICAgIGlubGluZVNvdXJjZXNDb250ZW50OiB0cnVlLFxuICAgIGlzTW9kdWxlOiB0cnVlLFxuICAgIGpzYzoge1xuICAgICAgZXh0ZXJuYWxIZWxwZXJzOiBmYWxzZSxcbiAgICAgIGtlZXBDbGFzc05hbWVzOiBmYWxzZSxcbiAgICAgIGxvb3NlOiBmYWxzZSxcbiAgICAgIHBhcnNlcjoge1xuICAgICAgICBkZWNvcmF0b3JzOiB0cnVlLFxuICAgICAgICBkeW5hbWljSW1wb3J0OiB0cnVlLFxuICAgICAgICBzeW50YXg6ICd0eXBlc2NyaXB0JyxcbiAgICAgICAgdHN4OiB0cnVlXG4gICAgICB9LFxuICAgICAgdGFyZ2V0OiAnZXMyMDIzJyxcbiAgICAgIHRyYW5zZm9ybToge1xuICAgICAgICByZWFjdDoge1xuICAgICAgICAgIHJ1bnRpbWU6ICdhdXRvbWF0aWMnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1pbmlmeTogZmFsc2UsXG4gICAgbW9kdWxlOiB7XG4gICAgICBsYXp5OiBmYWxzZSxcbiAgICAgIG5vSW50ZXJvcDogZmFsc2UsXG4gICAgICBzdHJpY3Q6IGZhbHNlLFxuICAgICAgc3RyaWN0TW9kZTogdHJ1ZSxcbiAgICAgIHR5cGU6ICdlczYnXG4gICAgfSxcbiAgICBzb3VyY2VNYXBzOiAnaW5saW5lJ1xuICB9LFxuICB0YXJnZXRFbnZpcm9ubWVudDogJ3dlYicsXG4gIHVzZUdyYXBoUWw6IGZhbHNlLFxuICB1c2VUeXBlc2NyaXB0OiBmYWxzZSxcbiAgd2VicGFjazoge1xuICAgIHN0YXRpY1BhdGg6ICcuL3NyYy9zdGF0aWMnXG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYWNrYWdlRGlyID0gKCk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IGN1cnJlbnRQa2dQYXRoID0gcGF0aFJlc29sdmUoY3dkLCAncGFja2FnZS5qc29uJyk7XG5cbiAgaWYoZXhpc3RzU3luYyhjdXJyZW50UGtnUGF0aCkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoY3VycmVudFBrZ1BhdGgsICd1dGY4JykpO1xuICAgICAgaWYoIXBrZy53b3Jrc3BhY2VzKSB7XG4gICAgICAgIHJldHVybiBjd2Q7XG4gICAgICB9XG4gICAgfSBjYXRjaHtcbiAgICAgIHJldHVybiBjd2Q7XG4gICAgfVxuICB9XG5cbiAgbGV0IHNlYXJjaERpciA9IGN3ZDtcblxuICBmb3IobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGNvbnN0IHBrZ1BhdGggPSBwYXRoUmVzb2x2ZShzZWFyY2hEaXIsICdwYWNrYWdlLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHBrZ1BhdGgpKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhwa2dQYXRoLCAndXRmOCcpKTtcblxuICAgICAgICBpZighcGtnLndvcmtzcGFjZXMpIHtcbiAgICAgICAgICByZXR1cm4gc2VhcmNoRGlyO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoe1xuICAgICAgICAvLyBDb250aW51ZSBzZWFyY2hpbmdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKHNlYXJjaERpcik7XG5cbiAgICBpZihwYXJlbnQgPT09IHNlYXJjaERpcikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlYXJjaERpciA9IHBhcmVudDtcbiAgfVxuXG4gIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuXG4gIGZvcihjb25zdCBmb3JtYXQgb2YgY29uZmlnRm9ybWF0cykge1xuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBmaW5kRmlsZVVwLnN5bmMoYGxleC5jb25maWcuJHtmb3JtYXR9YCwgY3dkLCA1KTtcblxuICAgIGlmKGNvbmZpZ1BhdGgpIHtcbiAgICAgIHJldHVybiBkaXJuYW1lKGNvbmZpZ1BhdGgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjd2Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGggPSAoY29uZmlnTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcbiAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcuYnVpbGQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0QnVpbGRDb25maWcgPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCAndHNjb25maWcuYnVpbGQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhwcm9qZWN0QnVpbGRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdEJ1aWxkQ29uZmlnO1xuICAgIH1cblxuICAgIGNvbnN0IHJvb3RCdWlsZENvbmZpZyA9IHBhdGhSZXNvbHZlKGN3ZCwgJ3RzY29uZmlnLmJ1aWxkLmpzb24nKTtcbiAgICBpZihleGlzdHNTeW5jKHJvb3RCdWlsZENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290QnVpbGRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoY29uZmlnTmFtZSA9PT0gJ3RzY29uZmlnLmxpbnQuanNvbicpIHtcbiAgICBjb25zdCBwcm9qZWN0TGludENvbmZpZyA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdExpbnRDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdExpbnRDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdExpbnRDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy5lc2xpbnQuanNvbicpO1xuXG4gICAgaWYoZXhpc3RzU3luYyhyb290TGludENvbmZpZykpIHtcbiAgICAgIHJldHVybiByb290TGludENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZihjb25maWdOYW1lID09PSAndHNjb25maWcudGVzdC5qc29uJykge1xuICAgIGNvbnN0IHByb2plY3RUZXN0Q29uZmlnID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgIGlmKGV4aXN0c1N5bmMocHJvamVjdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcHJvamVjdFRlc3RDb25maWc7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9vdFRlc3RDb25maWcgPSBwYXRoUmVzb2x2ZShjd2QsICd0c2NvbmZpZy50ZXN0Lmpzb24nKTtcblxuICAgIGlmKGV4aXN0c1N5bmMocm9vdFRlc3RDb25maWcpKSB7XG4gICAgICByZXR1cm4gcm9vdFRlc3RDb25maWc7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiBwcm9qZWN0Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IHJvb3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUoY3dkLCBjb25maWdOYW1lKTtcblxuICBpZihleGlzdHNTeW5jKHJvb3RDb25maWdQYXRoKSkge1xuICAgIHJldHVybiByb290Q29uZmlnUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcblxuICByZXR1cm4gcGF0aFJlc29sdmUobGV4RGlyLCBjb25maWdOYW1lKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBMZXhDb25maWcge1xuICBzdGF0aWMgY29uZmlnOiBMZXhDb25maWdUeXBlID0ge1xuICAgIC4uLmRlZmF1bHRDb25maWdWYWx1ZXNcbiAgfTtcblxuICBzdGF0aWMgc2V0IHVzZVR5cGVzY3JpcHQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMZXhDb25maWcuY29uZmlnLnVzZVR5cGVzY3JpcHQgPSB2YWx1ZTtcbiAgICBjb25zdCB7ZW50cnlKcywgc291cmNlRnVsbFBhdGgsIHRhcmdldEVudmlyb25tZW50fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgICBpZihlbnRyeUpzID09PSAnaW5kZXguanMnICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBpbmRleFBhdGg6IHN0cmluZyA9IHBhdGhSZXNvbHZlKGN3ZCwgc291cmNlRnVsbFBhdGggfHwgY3dkLCAnaW5kZXgudHN4Jyk7XG4gICAgICBjb25zdCBoYXNJbmRleFRzeDogYm9vbGVhbiA9IGV4aXN0c1N5bmMoaW5kZXhQYXRoKTtcblxuICAgICAgaWYoaGFzSW5kZXhUc3gpIHtcbiAgICAgICAgTGV4Q29uZmlnLmNvbmZpZy5lbnRyeUpzID0gJ2luZGV4LnRzeCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBMZXhDb25maWcuY29uZmlnLmVudHJ5SnMgPSAnaW5kZXgudHMnO1xuICAgICAgfVxuICAgIH1cblxuICAgIExleENvbmZpZy5jb25maWcuc3djID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MgfHwgey4uLmRlZmF1bHRDb25maWdWYWx1ZXMuc3djIX07XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjID0gTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjIHx8IHsuLi5kZWZhdWx0Q29uZmlnVmFsdWVzLnN3YyEuanNjIX07XG4gICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnBhcnNlciA9IHtcbiAgICAgIHN5bnRheDogJ3R5cGVzY3JpcHQnLFxuICAgICAgdHN4OiB0cnVlXG4gICAgfTtcblxuICAgIGlmKHRhcmdldEVudmlyb25tZW50ID09PSAnd2ViJykge1xuICAgICAgTGV4Q29uZmlnLmNvbmZpZy5zd2MuanNjLnRyYW5zZm9ybSA9IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICBydW50aW1lOiAnYXV0b21hdGljJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRMZXhEaXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZGlybmFtZShnZXRMZXhQYWNrYWdlSnNvblBhdGgoKSk7XG4gIH1cblxuICBzdGF0aWMgdXBkYXRlQ29uZmlnKHVwZGF0ZWRDb25maWc6IExleENvbmZpZ1R5cGUpOiBMZXhDb25maWdUeXBlIHtcbiAgICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIG91dHB1dFBhdGgsIHNvdXJjZVBhdGgsIHNvdXJjZUZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0LCBhaX0gPSB1cGRhdGVkQ29uZmlnO1xuICAgIGNvbnN0IHBhY2thZ2VEaXIgPSBnZXRQYWNrYWdlRGlyKCk7XG5cbiAgICBpZih1c2VUeXBlc2NyaXB0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIExleENvbmZpZy51c2VUeXBlc2NyaXB0ID0gdXNlVHlwZXNjcmlwdDtcbiAgICB9XG5cbiAgICBpZihvdXRwdXRQYXRoICE9PSB1bmRlZmluZWQgJiYgb3V0cHV0RnVsbFBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdXBkYXRlZENvbmZpZy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIG91dHB1dFBhdGgpO1xuICAgIH1cblxuICAgIGlmKHNvdXJjZVBhdGggIT09IHVuZGVmaW5lZCAmJiBzb3VyY2VGdWxsUGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB1cGRhdGVkQ29uZmlnLnNvdXJjZUZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYoYWkpIHtcbiAgICAgIExleENvbmZpZy5jb25maWcuYWkgPSB7Li4uTGV4Q29uZmlnLmNvbmZpZy5haSwgLi4uYWl9O1xuXG4gICAgICBpZihwcm9jZXNzLmVudi5DVVJTT1JfSURFID09PSAndHJ1ZScgJiYgTGV4Q29uZmlnLmNvbmZpZy5haS5wcm92aWRlciA9PT0gJ25vbmUnKSB7XG4gICAgICAgIExleENvbmZpZy5jb25maWcuYWkucHJvdmlkZXIgPSAnY3Vyc29yJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBMZXhDb25maWcuY29uZmlnID0gey4uLkxleENvbmZpZy5jb25maWcsIC4uLnVwZGF0ZWRDb25maWd9O1xuXG4gICAgcmV0dXJuIExleENvbmZpZy5jb25maWc7XG4gIH1cblxuICBzdGF0aWMgYWRkQ29uZmlnUGFyYW1zKGNtZDogUmVjb3JkPHN0cmluZywgYW55PiwgcGFyYW1zOiBMZXhDb25maWdUeXBlKSB7XG4gICAgY29uc3QgbmFtZVByb3BlcnR5OiBzdHJpbmcgPSAnX25hbWUnO1xuICAgIGNvbnN0IHtlbnZpcm9ubWVudCwgb3V0cHV0UGF0aCwgc291cmNlUGF0aCwgdHlwZXNjcmlwdH0gPSBjbWQ7XG4gICAgY29uc3QgcGFja2FnZURpciA9IGdldFBhY2thZ2VEaXIoKTtcblxuICAgIGlmKG91dHB1dFBhdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLm91dHB1dFBhdGggPSBvdXRwdXRQYXRoO1xuICAgICAgcGFyYW1zLm91dHB1dEZ1bGxQYXRoID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgb3V0cHV0UGF0aCk7XG4gICAgfSBlbHNlIGlmKHBhcmFtcy5vdXRwdXRQYXRoICYmICFwYXJhbXMub3V0cHV0RnVsbFBhdGgpIHtcbiAgICAgIHBhcmFtcy5vdXRwdXRGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHBhcmFtcy5vdXRwdXRQYXRoKTtcbiAgICB9XG5cbiAgICBpZihzb3VyY2VQYXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5zb3VyY2VQYXRoID0gc291cmNlUGF0aDtcbiAgICAgIHBhcmFtcy5zb3VyY2VGdWxsUGF0aCA9IHBhdGhSZXNvbHZlKHBhY2thZ2VEaXIsIHNvdXJjZVBhdGgpO1xuICAgIH0gZWxzZSBpZihwYXJhbXMuc291cmNlUGF0aCAmJiAhcGFyYW1zLnNvdXJjZUZ1bGxQYXRoKSB7XG4gICAgICBwYXJhbXMuc291cmNlRnVsbFBhdGggPSBwYXRoUmVzb2x2ZShwYWNrYWdlRGlyLCBwYXJhbXMuc291cmNlUGF0aCk7XG4gICAgfVxuXG4gICAgaWYodHlwZXNjcmlwdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMudXNlVHlwZXNjcmlwdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYoZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcGFyYW1zLnRhcmdldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT09ICd3ZWInID8gJ3dlYicgOiAnbm9kZSc7XG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbnYuTEVYX0NPTkZJRyA9IEpTT04uc3RyaW5naWZ5KFxuICAgICAge1xuICAgICAgICAuLi5MZXhDb25maWcudXBkYXRlQ29uZmlnKHBhcmFtcyksXG4gICAgICAgIGNvbW1hbmROYW1lOiBjbWRbbmFtZVByb3BlcnR5XSxcbiAgICAgICAgaXNTdGF0aWM6IGNtZC5zdGF0aWNcbiAgICAgIH0sIG51bGwsIDBcbiAgICApO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHBhcnNlQ29uZmlnKGNtZDogUmVjb3JkPHN0cmluZywgYW55PiwgaXNSb290OiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHtjbGlOYW1lID0gJ0xleCcsIGxleENvbmZpZywgbGV4Q29uZmlnTmFtZSwgcXVpZXQsIHR5cGVzY3JpcHQsIGRlYnVnID0gZmFsc2V9ID0gY21kO1xuICAgIGNvbnN0IGNvbmZpZ0Zvcm1hdHMgPSBbJ2pzJywgJ21qcycsICdjanMnLCAndHMnLCAnanNvbiddO1xuICAgIGNvbnN0IGNvbmZpZ0Jhc2VOYW1lOiBzdHJpbmcgPSBsZXhDb25maWdOYW1lIHx8ICdsZXguY29uZmlnJztcbiAgICBsZXQgY29uZmlnUGF0aDogc3RyaW5nID0gbGV4Q29uZmlnIHx8ICcnO1xuICAgIGxldCBjb25maWdFeGlzdHM6IGJvb2xlYW4gPSBsZXhDb25maWcgPyBleGlzdHNTeW5jKGNvbmZpZ1BhdGgpIDogZmFsc2U7XG5cbiAgICBpZighY29uZmlnUGF0aCB8fCAhY29uZmlnRXhpc3RzKSB7XG4gICAgICBpZihkZWJ1Zykge1xuICAgICAgICBsb2coYFNlYXJjaGluZyBmb3IgY29uZmlnIGZpbGVzIHdpdGggYmFzZSBuYW1lOiAke2NvbmZpZ0Jhc2VOYW1lfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBmb3IoY29uc3QgZm9ybWF0IG9mIGNvbmZpZ0Zvcm1hdHMpIHtcbiAgICAgICAgY29uc3QgcG90ZW50aWFsUGF0aCA9IGlzUm9vdFxuICAgICAgICAgID8gcGF0aFJlc29sdmUoY3dkLCBgLi8ke2NvbmZpZ0Jhc2VOYW1lfS4ke2Zvcm1hdH1gKVxuICAgICAgICAgIDogcmVsYXRpdmVGaWxlUGF0aChgJHtjb25maWdCYXNlTmFtZX0uJHtmb3JtYXR9YCwgY3dkKTtcblxuICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgIGxvZyhgQ2hlY2tpbmcgZm9yIGNvbmZpZyBmaWxlOiAke3BvdGVudGlhbFBhdGh9YCwgJ2luZm8nLCBxdWlldCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihleGlzdHNTeW5jKHBvdGVudGlhbFBhdGgpKSB7XG4gICAgICAgICAgY29uZmlnUGF0aCA9IHBvdGVudGlhbFBhdGg7XG4gICAgICAgICAgY29uZmlnRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKGNvbmZpZ0V4aXN0cykge1xuICAgICAgbG9nKGBVc2luZyAke2NsaU5hbWV9IGNvbmZpZ3VyYXRpb24gZmlsZTogJHtjb25maWdQYXRofWAsICdub3RlJywgcXVpZXQpO1xuICAgICAgY29uc3QgZXh0OiBzdHJpbmcgPSBwYXRoRXh0bmFtZShjb25maWdQYXRoKTtcblxuICAgICAgaWYoZXh0ID09PSAnLmpzb24nKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0NvbnRlbnQ6IHN0cmluZyA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmOCcpO1xuXG4gICAgICAgIGlmKGNvbmZpZ0NvbnRlbnQpIHtcbiAgICAgICAgICBsZXQgY29uZmlnSnNvbjogTGV4Q29uZmlnVHlwZTtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25maWdKc29uID0gSlNPTi5wYXJzZShjb25maWdDb250ZW50KT8uZGVmYXVsdCB8fCB7fTtcbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEZhaWxlZCB0byBwYXJzZSBKU09OIGNvbmZpZzogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGNvbmZpZ0pzb24gPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnSnNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb25maWcgZmlsZSBtYWxmb3JtZWQsICR7Y29uZmlnUGF0aH1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZihbJy5qcycsICcubWpzJywgJy5janMnLCAnLnRzJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBsZXhDdXN0b21Db25maWc7XG5cbiAgICAgICAgICBpZihleHQgPT09ICcuY2pzJykge1xuICAgICAgICAgICAgY29uc3QgZmlsZVVybCA9IG5ldyBVUkwoYGZpbGU6Ly8vJHtwYXRoUmVzb2x2ZShjb25maWdQYXRoKX1gKS5ocmVmO1xuXG4gICAgICAgICAgICBpZihkZWJ1Zykge1xuICAgICAgICAgICAgICBsb2coYExvYWRpbmcgQ29tbW9uSlMgY29uZmlnIGZyb206ICR7ZmlsZVVybH1gLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxleEN1c3RvbUNvbmZpZyA9IGF3YWl0IGltcG9ydChmaWxlVXJsKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgICAgbG9nKGBMb2FkaW5nIEVTTS9UUyBjb25maWcgZnJvbTogJHtjb25maWdQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXhDdXN0b21Db25maWcgPSBhd2FpdCBpbXBvcnQoY29uZmlnUGF0aCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY29uZmlnID0gbGV4Q3VzdG9tQ29uZmlnLmRlZmF1bHQgfHwgbGV4Q3VzdG9tQ29uZmlnO1xuXG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIGxvZyhgTG9hZGVkIGNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWAsICdpbmZvJywgcXVpZXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmKCFjb25maWcpIHtcbiAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBDb25maWcgZmlsZSBsb2FkZWQgYnV0IG5vIGNvbmZpZ3VyYXRpb24gZm91bmRgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgY29uZmlnIHx8IHt9KTtcbiAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGxvYWQgY29uZmlnIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgaWYoZGVidWcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ29uZmlnIGZpbGUgbXVzdCBiZSBhIEpTLCBDSlMsIE1KUywgVFMsIG9yIEpTT04gZmlsZS5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKGRlYnVnKSB7XG4gICAgICAgIGxvZygnTm8gY29uZmlnIGZpbGUgZm91bmQuIFVzaW5nIGRlZmF1bHQgY29uZmlndXJhdGlvbi4nLCAnaW5mbycsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgTGV4Q29uZmlnLnVzZVR5cGVzY3JpcHQgPSAhIXR5cGVzY3JpcHQ7XG4gICAgICBMZXhDb25maWcuYWRkQ29uZmlnUGFyYW1zKGNtZCwgTGV4Q29uZmlnLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGNoZWNrVHlwZXNjcmlwdENvbmZpZygpIHtcbiAgICBjb25zdCBwYWNrYWdlRGlyID0gZ2V0UGFja2FnZURpcigpO1xuICAgIGNvbnN0IHRzY29uZmlnUGF0aDogc3RyaW5nID0gcGF0aFJlc29sdmUocGFja2FnZURpciwgJy4vdHNjb25maWcuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdQYXRoKSkge1xuICAgICAgY29uc3QgbGV4RGlyID0gTGV4Q29uZmlnLmdldExleERpcigpO1xuICAgICAgY29uc3QgYmFzZUNvbmZpZ1BhdGggPSBwYXRoUmVzb2x2ZShsZXhEaXIsICd0c2NvbmZpZy5iYXNlLmpzb24nKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlQ29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLnRlbXBsYXRlLmpzb24nKTtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBleGlzdHNTeW5jKGJhc2VDb25maWdQYXRoKSA/IGJhc2VDb25maWdQYXRoIDogdGVtcGxhdGVDb25maWdQYXRoO1xuXG4gICAgICBpZihleGlzdHNTeW5jKHNvdXJjZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdQYXRoLCByZWFkRmlsZVN5bmMoc291cmNlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY3dkID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRQYXRoIHx8ICcuL2xpYic7XG4gICAgY29uc3Qgb3V0cHV0RnVsbFBhdGggPSBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8IHBhdGhSZXNvbHZlKGN3ZCwgb3V0cHV0UGF0aCk7XG4gICAgY29uc3Qgc291cmNlUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlUGF0aCB8fCAnLi9zcmMnO1xuICAgIGNvbnN0IHNvdXJjZUZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShjd2QsIHNvdXJjZVBhdGgpO1xuICAgIGNvbnN0IHJlbGF0aXZlT3V0RGlyID0gcGF0aFJlbGF0aXZlKGN3ZCwgb3V0cHV0RnVsbFBhdGgpIHx8ICcuL2xpYic7XG4gICAgY29uc3QgcmVsYXRpdmVSb290RGlyID0gcGF0aFJlbGF0aXZlKGN3ZCwgc291cmNlRnVsbFBhdGgpIHx8ICcuL3NyYyc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgJy0tZW1pdERlY2xhcmF0aW9uT25seScsIC8vIENSSVRJQ0FMOiBPbmx5IGVtaXQgLmQudHMgZmlsZXMsIG5vIEpTIGZpbGVzXG4gICAgICAnLS1kZWNsYXJhdGlvbicsIC8vIEdlbmVyYXRlIGRlY2xhcmF0aW9uIGZpbGVzXG4gICAgICAnLS1kZWNsYXJhdGlvbk1hcCcsIC8vIEdlbmVyYXRlIHNvdXJjZSBtYXBzIGZvciBkZWNsYXJhdGlvbnNcbiAgICAgICctLW91dERpcicsIHJlbGF0aXZlT3V0RGlyLFxuICAgICAgJy0tcm9vdERpcicsIHJlbGF0aXZlUm9vdERpcixcbiAgICAgICctLXNraXBMaWJDaGVjaycsIC8vIFNraXAgdHlwZSBjaGVja2luZyBvZiBkZWNsYXJhdGlvbiBmaWxlcyAoZmFzdGVyLCBtb3JlIGxlbmllbnQpXG4gICAgICAnLS1lc01vZHVsZUludGVyb3AnLFxuICAgICAgJy0tYWxsb3dTeW50aGV0aWNEZWZhdWx0SW1wb3J0cycsXG4gICAgICAnLS1tb2R1bGUnLCAnTm9kZU5leHQnLFxuICAgICAgJy0tbW9kdWxlUmVzb2x1dGlvbicsICdOb2RlTmV4dCcsXG4gICAgICAnLS10YXJnZXQnLCAnRVNOZXh0JyxcbiAgICAgICctLWpzeCcsICdyZWFjdC1qc3gnLFxuICAgICAgJy0taXNvbGF0ZWRNb2R1bGVzJyxcbiAgICAgICctLXJlc29sdmVKc29uTW9kdWxlJyxcbiAgICAgICctLWFsbG93SnMnXG4gICAgICAvLyBOb3RlOiAtLW5vVW51c2VkTG9jYWxzIGFuZCAtLW5vVW51c2VkUGFyYW1ldGVycyBhcmUgbm90IG5lZWRlZCBmb3IgZGVjbGFyYXRpb24gZ2VuZXJhdGlvblxuICAgICAgLy8gYW5kIHdvdWxkIGFjdHVhbGx5IGVuYWJsZSBzdHJpY3QgY2hlY2tpbmcsIHdoaWNoIHdlIHdhbnQgdG8gYXZvaWQgZm9yIGZhc3RlciBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBjaGVja0xpbnRUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ0xpbnRQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLmxpbnQuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdMaW50UGF0aCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLmxpbnQuanNvbicpO1xuICAgICAgaWYoZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdMaW50UGF0aCwgcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBjaGVja1Rlc3RUeXBlc2NyaXB0Q29uZmlnKCkge1xuICAgIGNvbnN0IGxleERpciA9IExleENvbmZpZy5nZXRMZXhEaXIoKTtcbiAgICBjb25zdCB0c2NvbmZpZ1Rlc3RQYXRoOiBzdHJpbmcgPSBwYXRoUmVzb2x2ZShsZXhEaXIsICcuL3RzY29uZmlnLnRlc3QuanNvbicpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmModHNjb25maWdUZXN0UGF0aCkpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHBhdGhSZXNvbHZlKGxleERpciwgJ3RzY29uZmlnLnRlc3QuanNvbicpO1xuICAgICAgaWYoZXhpc3RzU3luYyh0ZW1wbGF0ZVBhdGgpKSB7XG4gICAgICAgIHdyaXRlRmlsZVN5bmModHNjb25maWdUZXN0UGF0aCwgcmVhZEZpbGVTeW5jKHRlbXBsYXRlUGF0aCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgdHlwZSBTV0NPcHRpb25zID0gT3B0aW9ucztcbiJdLCJuYW1lcyI6WyJmaW5kRmlsZVVwIiwiZXhpc3RzU3luYyIsInJlYWRGaWxlU3luYyIsIndyaXRlRmlsZVN5bmMiLCJkaXJuYW1lIiwiZXh0bmFtZSIsInBhdGhFeHRuYW1lIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJVUkwiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZWxhdGl2ZUZpbGVQYXRoIiwibG9nIiwiY3dkIiwicHJvY2VzcyIsImRlZmF1bHRDb25maWdWYWx1ZXMiLCJhaSIsIm1heFRva2VucyIsIm1vZGVsIiwicHJvdmlkZXIiLCJ0ZW1wZXJhdHVyZSIsImNvbmZpZ0ZpbGVzIiwiY29weUZpbGVzIiwiZW50cnlIVE1MIiwiZW50cnlKcyIsImVudiIsImVzbGludCIsInZpdGVzdCIsIm91dHB1dEZ1bGxQYXRoIiwib3V0cHV0SGFzaCIsIm91dHB1dFBhdGgiLCJwYWNrYWdlTWFuYWdlciIsInByZXNldCIsInNvdXJjZUZ1bGxQYXRoIiwic291cmNlUGF0aCIsInN3YyIsImlubGluZVNvdXJjZXNDb250ZW50IiwiaXNNb2R1bGUiLCJqc2MiLCJleHRlcm5hbEhlbHBlcnMiLCJrZWVwQ2xhc3NOYW1lcyIsImxvb3NlIiwicGFyc2VyIiwiZGVjb3JhdG9ycyIsImR5bmFtaWNJbXBvcnQiLCJzeW50YXgiLCJ0c3giLCJ0YXJnZXQiLCJ0cmFuc2Zvcm0iLCJyZWFjdCIsInJ1bnRpbWUiLCJtaW5pZnkiLCJtb2R1bGUiLCJsYXp5Iiwibm9JbnRlcm9wIiwic3RyaWN0Iiwic3RyaWN0TW9kZSIsInR5cGUiLCJzb3VyY2VNYXBzIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsIndlYnBhY2siLCJzdGF0aWNQYXRoIiwiZ2V0UGFja2FnZURpciIsImN1cnJlbnRQa2dQYXRoIiwicGtnIiwiSlNPTiIsInBhcnNlIiwid29ya3NwYWNlcyIsInNlYXJjaERpciIsImkiLCJwa2dQYXRoIiwicGFyZW50IiwiY29uZmlnRm9ybWF0cyIsImZvcm1hdCIsImNvbmZpZ1BhdGgiLCJzeW5jIiwiZ2V0VHlwZVNjcmlwdENvbmZpZ1BhdGgiLCJjb25maWdOYW1lIiwicGFja2FnZURpciIsInByb2plY3RCdWlsZENvbmZpZyIsInJvb3RCdWlsZENvbmZpZyIsInByb2plY3RMaW50Q29uZmlnIiwicm9vdExpbnRDb25maWciLCJwcm9qZWN0VGVzdENvbmZpZyIsInJvb3RUZXN0Q29uZmlnIiwicHJvamVjdENvbmZpZ1BhdGgiLCJyb290Q29uZmlnUGF0aCIsImxleERpciIsIkxleENvbmZpZyIsImdldExleERpciIsInZhbHVlIiwiY29uZmlnIiwiaW5kZXhQYXRoIiwiaGFzSW5kZXhUc3giLCJ1cGRhdGVDb25maWciLCJ1cGRhdGVkQ29uZmlnIiwidW5kZWZpbmVkIiwiQ1VSU09SX0lERSIsImFkZENvbmZpZ1BhcmFtcyIsImNtZCIsInBhcmFtcyIsIm5hbWVQcm9wZXJ0eSIsImVudmlyb25tZW50IiwidHlwZXNjcmlwdCIsIkxFWF9DT05GSUciLCJzdHJpbmdpZnkiLCJjb21tYW5kTmFtZSIsImlzU3RhdGljIiwic3RhdGljIiwicGFyc2VDb25maWciLCJpc1Jvb3QiLCJjbGlOYW1lIiwibGV4Q29uZmlnIiwibGV4Q29uZmlnTmFtZSIsInF1aWV0IiwiZGVidWciLCJjb25maWdCYXNlTmFtZSIsImNvbmZpZ0V4aXN0cyIsInBvdGVudGlhbFBhdGgiLCJleHQiLCJjb25maWdDb250ZW50IiwiY29uZmlnSnNvbiIsImRlZmF1bHQiLCJlcnJvciIsIm1lc3NhZ2UiLCJpbmNsdWRlcyIsImxleEN1c3RvbUNvbmZpZyIsImZpbGVVcmwiLCJocmVmIiwiY29uc29sZSIsImNoZWNrVHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnUGF0aCIsImJhc2VDb25maWdQYXRoIiwidGVtcGxhdGVDb25maWdQYXRoIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWxhdGl2ZU91dERpciIsInJlbGF0aXZlUm9vdERpciIsImNoZWNrTGludFR5cGVzY3JpcHRDb25maWciLCJ0c2NvbmZpZ0xpbnRQYXRoIiwidGVtcGxhdGVQYXRoIiwiY2hlY2tUZXN0VHlwZXNjcmlwdENvbmZpZyIsInRzY29uZmlnVGVzdFBhdGgiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxnQkFBZ0IsZUFBZTtBQUN0QyxTQUFRQyxVQUFVLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxRQUFPLEtBQUs7QUFDM0QsU0FDRUMsT0FBTyxFQUNQQyxXQUFXQyxXQUFXLEVBQ3RCQyxZQUFZQyxZQUFZLEVBQ3hCQyxXQUFXQyxXQUFXLFFBQ2pCLE9BQU87QUFDZCxTQUFRQyxHQUFHLFFBQU8sTUFBTTtBQUV4QixTQUFRQyxxQkFBcUIsRUFBRUMsZ0JBQWdCLFFBQU8sa0JBQWtCO0FBQ3hFLFNBQVFDLEdBQUcsUUFBTyxpQkFBaUI7QUFLbkMsTUFBTUMsTUFBY0MsUUFB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
@@ -1,3 +1,4 @@
1
+ import type { Spinner } from '../../utils/app.js';
1
2
  export interface BuildOptions {
2
3
  readonly assist?: boolean;
3
4
  readonly analyze?: boolean;
@@ -15,7 +16,7 @@ export interface BuildOptions {
15
16
  readonly watch?: boolean;
16
17
  }
17
18
  export type BuildCallback = (status: number) => void;
18
- export declare const buildWithSWC: (spinner: any, commandOptions: BuildOptions, callback: BuildCallback) => Promise<1 | 0>;
19
- export declare const buildWithWebpack: (spinner: any, cmd: any, callback: any) => Promise<1 | 0>;
19
+ export declare const buildWithSWC: (spinner: Spinner, commandOptions: BuildOptions, callback: BuildCallback) => Promise<1 | 0>;
20
+ export declare const buildWithWebpack: (spinner: Spinner, cmd: Record<string, any>, callback: BuildCallback) => Promise<1 | 0>;
20
21
  export declare const build: (cmd: BuildOptions, callback?: BuildCallback) => Promise<number>;
21
22
  export default build;
@@ -85,7 +85,7 @@ export const buildWithSWC = async (spinner, commandOptions, callback)=>{
85
85
  });
86
86
  await Promise.all(transformPromises);
87
87
  spinner.succeed('Build completed with SWC');
88
- displayBuildStatus('SWC', outputDir, quiet);
88
+ displayBuildStatus('SWC', outputDir, quiet ?? false);
89
89
  callback(0);
90
90
  return 0;
91
91
  } catch (error) {
@@ -440,4 +440,4 @@ What are the key optimization opportunities for this build configuration? Consid
440
440
  };
441
441
  export default build;
442
442
 
443
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIHJlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZSxcbiAgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZVxufSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY3JlYXRlU3Bpbm5lciwgY3JlYXRlUHJvZ3Jlc3NCYXIsIGhhbmRsZVdlYnBhY2tQcm9ncmVzcywgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge1xuICByZXNvbHZlV2VicGFja1BhdGhzLFxuICBnZXRMZXhQYWNrYWdlSnNvblBhdGgsXG4gIHJlc29sdmVCaW5hcnlQYXRoXG59IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5pbXBvcnQge3Byb2Nlc3NUcmFuc2xhdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zbGF0aW9ucy5qcyc7XG5pbXBvcnQge2FpRnVuY3Rpb259IGZyb20gJy4uL2FpL2FpLmpzJztcbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5pbXBvcnQgdHlwZSB7U1dDT3B0aW9uc30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcblxubGV0IGN1cnJlbnRGaWxlbmFtZTogc3RyaW5nO1xubGV0IGN1cnJlbnREaXJuYW1lOiBzdHJpbmc7XG5cbnRyeSB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IGV2YWwoJ3JlcXVpcmUoXCJ1cmxcIikuZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpJyk7XG4gIGN1cnJlbnREaXJuYW1lID0gZGlybmFtZShjdXJyZW50RmlsZW5hbWUpO1xufSBjYXRjaCB7XG4gIGN1cnJlbnRGaWxlbmFtZSA9IHByb2Nlc3MuY3dkKCk7XG4gIGN1cnJlbnREaXJuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICByZWFkb25seSBhc3Npc3Q/OiBib29sZWFuO1xuICByZWFkb25seSBhbmFseXplPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgYnVuZGxlcj86ICd3ZWJwYWNrJyB8ICdzd2MnO1xuICByZWFkb25seSBjbGlOYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBlbnRyeT86IHN0cmluZztcbiAgcmVhZG9ubHkgZm9ybWF0Pzogc3RyaW5nO1xuICByZWFkb25seSBvdXRwdXRQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHJlbW92ZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNvdXJjZVBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRlc3Q/OiBib29sZWFuO1xuICByZWFkb25seSB0cmFuc2xhdGlvbnM/OiBib29sZWFuO1xuICByZWFkb25seSB2YXJpYWJsZXM/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdhdGNoPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgQnVpbGRDYWxsYmFjayA9IChzdGF0dXM6IG51bWJlcikgPT4gdm9pZDtcblxuY29uc3QgZGlzcGxheUJ1aWxkU3RhdHVzID0gKGJ1bmRsZXI6IHN0cmluZywgb3V0cHV0UGF0aDogc3RyaW5nLCBxdWlldDogYm9vbGVhbiwgc3RhdHM/OiB7bW9kdWxlcz86IG51bWJlcjsgYXNzZXRzPzogbnVtYmVyOyBzaXplPzogc3RyaW5nfSkgPT4ge1xuICBpZihxdWlldCkgcmV0dXJuO1xuXG4gIGxldCBzdGF0c0luZm8gPSAnJztcbiAgaWYoc3RhdHMgJiYgc3RhdHMubW9kdWxlcyAmJiBzdGF0cy5hc3NldHMpIHtcbiAgICBzdGF0c0luZm8gPSBgXFxuJHtjaGFsay5ncmVlbignTW9kdWxlczonKX0gICAgJHtjaGFsay5jeWFuKHN0YXRzLm1vZHVsZXMpfVxcbmAgK1xuICAgICAgYCR7Y2hhbGsuZ3JlZW4oJ0Fzc2V0czonKX0gICAgICR7Y2hhbGsuY3lhbihzdGF0cy5hc3NldHMpfVxcbmAgK1xuICAgICAgYCR7Y2hhbGsuZ3JlZW4oJ1NpemU6Jyl9ICAgICAgICR7Y2hhbGsuY3lhbihzdGF0cy5zaXplKX1cXG5gO1xuICB9XG5cbiAgY29uc3Qgc3RhdHVzQm94ID0gYm94ZW4oXG4gICAgYCR7Y2hhbGsuY3lhbi5ib2xkKCfwn4+X77iPICBCdWlsZCBDb21wbGV0ZWQgU3VjY2Vzc2Z1bGx5ICcpfVxcblxcbmAgK1xuICAgIGAke2NoYWxrLmdyZWVuKCdCdW5kbGVyOicpfSAgICAke2NoYWxrLmN5YW4oYnVuZGxlcil9XFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ091dHB1dDonKX0gICAgICR7Y2hhbGsudW5kZXJsaW5lKG91dHB1dFBhdGgpfSR7c3RhdHNJbmZvfVxcbmAgK1xuICAgIGAke2NoYWxrLnllbGxvdygnUmVhZHkgZm9yIGRlcGxveW1lbnQhIPCfmoAnKX1gLFxuICAgIHtcbiAgICAgIHBhZGRpbmc6IDEsXG4gICAgICBtYXJnaW46IDEsXG4gICAgICBib3JkZXJTdHlsZTogJ3JvdW5kJyxcbiAgICAgIGJvcmRlckNvbG9yOiAnZ3JlZW4nLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzFhMWExYSdcbiAgICB9XG4gICk7XG5cbiAgY29uc29sZS5sb2coJ1xcbicgKyBzdGF0dXNCb3ggKyAnXFxuJyk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoU1dDID0gYXN5bmMgKHNwaW5uZXIsIGNvbW1hbmRPcHRpb25zOiBCdWlsZE9wdGlvbnMsIGNhbGxiYWNrOiBCdWlsZENhbGxiYWNrKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgZm9ybWF0ID0gJ2VzbScsXG4gICAgb3V0cHV0UGF0aCxcbiAgICBxdWlldCxcbiAgICBzb3VyY2VQYXRoLFxuICAgIHdhdGNoXG4gIH0gPSBjb21tYW5kT3B0aW9ucztcbiAgY29uc3Qge1xuICAgIG91dHB1dEZ1bGxQYXRoLFxuICAgIHNvdXJjZUZ1bGxQYXRoLFxuICAgIHN3Yzogc3djQ29uZmlnLFxuICAgIHRhcmdldEVudmlyb25tZW50LFxuICAgIHVzZUdyYXBoUWwsXG4gICAgdXNlVHlwZXNjcmlwdFxuICB9ID0gTGV4Q29uZmlnLmNvbmZpZztcbiAgY29uc3Qgc291cmNlRGlyOiBzdHJpbmcgPSBzb3VyY2VQYXRoID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgYC4vJHtzb3VyY2VQYXRofWApIDogc291cmNlRnVsbFBhdGggfHwgJyc7XG5cbiAgY29uc3QgZ2xvYk9wdGlvbnMgPSB7XG4gICAgYWJzb2x1dGU6IHRydWUsXG4gICAgY3dkOiBzb3VyY2VEaXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBub2RpcjogdHJ1ZSxcbiAgICBub3NvcnQ6IHRydWVcbiAgfTtcbiAgY29uc3QgdHNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgKiovISgqLnNwZWN8Ki50ZXN0KS50cypgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IGpzRmlsZXM6IHN0cmluZ1tdID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdCkuanNgLCBnbG9iT3B0aW9ucyk7XG4gIGNvbnN0IHNvdXJjZUZpbGVzOiBzdHJpbmdbXSA9IFsuLi50c0ZpbGVzLCAuLi5qc0ZpbGVzXTtcblxuICBjb25zdCBvdXRwdXREaXI6IHN0cmluZyA9IG91dHB1dFBhdGhcbiAgICA/IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksIG91dHB1dFBhdGgpXG4gICAgOiAob3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJykpO1xuXG4gIHRyeSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQnVpbGRpbmcgd2l0aCBTV0MuLi4nKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybVByb21pc2VzID0gc291cmNlRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBmaWxlUmVsYXRpdmVUb1NvdXJjZSA9IHBhdGhSZWxhdGl2ZShzb3VyY2VEaXIsIGZpbGUpO1xuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGZpbGU7IC8vIGZpbGUgaXMgYWxyZWFkeSBhYnNvbHV0ZVxuICAgICAgY29uc3Qgb3V0cHV0RmlsZSA9IGZpbGVSZWxhdGl2ZVRvU291cmNlLnJlcGxhY2UoL1xcLih0c3x0c3gpJC8sICcuanMnKTtcbiAgICAgIGNvbnN0IG91dHB1dFBhdGggPSBwYXRoUmVzb2x2ZShvdXRwdXREaXIsIG91dHB1dEZpbGUpO1xuICAgICAgY29uc3Qgb3V0cHV0RGlyUGF0aCA9IGRpcm5hbWUob3V0cHV0UGF0aCk7XG5cbiAgICAgIGlmKCFleGlzdHNTeW5jKG91dHB1dERpclBhdGgpKSB7XG4gICAgICAgIGNvbnN0IHtta2RpclN5bmN9ID0gYXdhaXQgaW1wb3J0KCdmcycpO1xuICAgICAgICBta2RpclN5bmMob3V0cHV0RGlyUGF0aCwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzb3VyY2VDb2RlID0gcmVhZEZpbGVTeW5jKHNvdXJjZVBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBzd2NPcHRpb25zID0ge1xuICAgICAgICAuLi5zd2NDb25maWcsXG4gICAgICAgIGZpbGVuYW1lOiBmaWxlLFxuICAgICAgICBtb2R1bGU6IHtcbiAgICAgICAgICB0eXBlOiBmb3JtYXQgPT09ICdjanMnID8gJ2NvbW1vbmpzJyBhcyBjb25zdCA6IChzd2NDb25maWc/Lm1vZHVsZT8udHlwZSBhcyAnZXM2JyB8fCAnZXM2JyksXG4gICAgICAgICAgLi4uc3djQ29uZmlnPy5tb2R1bGVcbiAgICAgICAgfSxcbiAgICAgIH0gYXMgUGFydGlhbDxTV0NPcHRpb25zPjtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdHJhbnNmb3JtKHNvdXJjZUNvZGUsIHN3Y09wdGlvbnMpO1xuXG4gICAgICBjb25zdCB7d3JpdGVGaWxlU3luY30gPSBhd2FpdCBpbXBvcnQoJ2ZzJyk7XG4gICAgICB3cml0ZUZpbGVTeW5jKG91dHB1dFBhdGgsIHJlc3VsdC5jb2RlKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHRyYW5zZm9ybVByb21pc2VzKTtcblxuICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHdpdGggU1dDJyk7XG4gICAgZGlzcGxheUJ1aWxkU3RhdHVzKCdTV0MnLCBvdXRwdXREaXIsIHF1aWV0KTtcbiAgICBjYWxsYmFjaygwKTtcbiAgICByZXR1cm4gMDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZyhgXFxuJHtjb21tYW5kT3B0aW9ucy5jbGlOYW1lIHx8ICdMZXgnfSBFcnJvcjogU1dDIGJ1aWxkIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cblxuICAgICAgaWYoJ2ZpbGVuYW1lJyBpbiBlcnJvciB8fCAnZmlsZScgaW4gZXJyb3IpIHtcbiAgICAgICAgbG9nKGBcXG5GaWxlOiAkeyhlcnJvciBhcyBhbnkpLmZpbGVuYW1lIHx8IChlcnJvciBhcyBhbnkpLmZpbGV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkIHdpdGggU1dDJyk7XG4gICAgaWYoIXF1aWV0KSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdcXG5GdWxsIEVycm9yIERldGFpbHM6JywgZXJyb3IpO1xuICAgIH1cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkV2l0aFdlYnBhY2sgPSBhc3luYyAoc3Bpbm5lciwgY21kLCBjYWxsYmFjaykgPT4ge1xuICBjb25zdCB7XG4gICAgYW5hbHl6ZSxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZ05hbWUsXG4gICAgZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYsXG4gICAgZGV2dG9vbCxcbiAgICBkaXNhYmxlSW50ZXJwcmV0LFxuICAgIGVudHJ5LFxuICAgIGVudixcbiAgICBmYWlsT25XYXJuaW5ncyxcbiAgICBqc29uLFxuICAgIG1lcmdlLFxuICAgIG1vZGUsXG4gICAgbmFtZSxcbiAgICBub2RlRW52LFxuICAgIG5vRGV2dG9vbCxcbiAgICBub1N0YXRzLFxuICAgIG5vVGFyZ2V0LFxuICAgIG5vV2F0Y2gsXG4gICAgbm9XYXRjaE9wdGlvbnNTdGRpbixcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgc3RhdHMsXG4gICAgdGFyZ2V0LFxuICAgIHdhdGNoLFxuICAgIHdhdGNoT3B0aW9uc1N0ZGluXG4gIH0gPSBjbWQ7XG5cbiAgY29uc3QgZW50cnlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoZW50cnkpID8gZW50cnlbMF0gOiBlbnRyeTtcblxuICBsZXQgd2VicGFja0NvbmZpZzogc3RyaW5nO1xuXG4gIGlmKGNvbmZpZykge1xuICAgIGNvbnN0IGlzUmVsYXRpdmVDb25maWc6IGJvb2xlYW4gPSBjb25maWcuc3Vic3RyKDAsIDIpID09PSAnLi8nO1xuICAgIHdlYnBhY2tDb25maWcgPSBpc1JlbGF0aXZlQ29uZmlnID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgY29uZmlnKSA6IGNvbmZpZztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9qZWN0Q29uZmlnUGF0aCA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy5qcycpO1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoVHMgPSBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnd2VicGFjay5jb25maWcudHMnKTtcbiAgICBjb25zdCBoYXNQcm9qZWN0Q29uZmlnID0gZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aCkgfHwgZXhpc3RzU3luYyhwcm9qZWN0Q29uZmlnUGF0aFRzKTtcblxuICAgIGlmKGhhc1Byb2plY3RDb25maWcpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpID8gcHJvamVjdENvbmZpZ1BhdGhUcyA6IHByb2plY3RDb25maWdQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7d2VicGFja0NvbmZpZzogcmVzb2x2ZWRDb25maWd9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gcmVzb2x2ZWRDb25maWc7XG4gICAgfVxuICB9XG5cbiAgaWYoIWV4aXN0c1N5bmMod2VicGFja0NvbmZpZykpIHtcbiAgICBjb25zdCBsZXhQYWNrYWdlUGF0aCA9IGdldExleFBhY2thZ2VKc29uUGF0aCgpO1xuICAgIGNvbnN0IGxleFBhY2thZ2VEaXIgPSBkaXJuYW1lKGxleFBhY2thZ2VQYXRoKTtcbiAgICBjb25zdCBsZXhXZWJwYWNrQ29uZmlnID0gcGF0aFJlc29sdmUobGV4UGFja2FnZURpciwgJ3dlYnBhY2suY29uZmlnLmpzJyk7XG5cbiAgICBpZihleGlzdHNTeW5jKGxleFdlYnBhY2tDb25maWcpKSB7XG4gICAgICB3ZWJwYWNrQ29uZmlnID0gbGV4V2VicGFja0NvbmZpZztcbiAgICAgIGNvbnNvbGUubG9nKCdVc2luZyBMZXggd2VicGFjayBjb25maWc6Jywgd2VicGFja0NvbmZpZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogQ291bGQgbm90IGZpbmQgd2VicGFjay5jb25maWcuanNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0J1aWxkIGZhaWxlZC4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd2VicGFja09wdGlvbnM6IHN0cmluZ1tdID0gW1xuICAgICctLWNvbG9yJyxcbiAgICAnLS1wcm9ncmVzcycsXG4gICAgJy0tY29uZmlnJywgd2VicGFja0NvbmZpZ1xuICBdO1xuXG4gIGlmKGFuYWx5emUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tYW5hbHl6ZScpO1xuICBpZihjb25maWdOYW1lKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWNvbmZpZ05hbWUnLCBjb25maWdOYW1lKTtcbiAgaWYoZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tZGVmaW5lUHJvY2Vzc0Vudk5vZGVFbnYnLCBkZWZpbmVQcm9jZXNzRW52Tm9kZUVudik7XG4gIGlmKGRldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tZGV2dG9vbCcsIGRldnRvb2wpO1xuICBpZihkaXNhYmxlSW50ZXJwcmV0KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWRpc2FibGVJbnRlcnByZXQnKTtcbiAgaWYoZW50cnlWYWx1ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnRyeScsIGVudHJ5VmFsdWUudG9TdHJpbmcoKSk7XG4gIGlmKGVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1lbnYnLCBlbnYpO1xuICBpZihmYWlsT25XYXJuaW5ncykgd2VicGFja09wdGlvbnMucHVzaCgnLS1mYWlsT25XYXJuaW5ncycpO1xuICBpZihqc29uKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWpzb24nLCBqc29uKTtcbiAgaWYobW9kZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1tb2RlJywgbW9kZSk7XG4gIGlmKG1lcmdlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1lcmdlJyk7XG4gIGlmKG5hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbmFtZScsIG5hbWUpO1xuICBpZihub0RldnRvb2wpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9EZXZ0b29sJyk7XG4gIGlmKG5vU3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9TdGF0cycpO1xuICBpZihub1RhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1RhcmdldCcpO1xuICBpZihub1dhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2gnKTtcbiAgaWYobm9XYXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1dhdGNoT3B0aW9uc1N0ZGluJyk7XG4gIGlmKG5vZGVFbnYpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9kZUVudicsIG5vZGVFbnYpO1xuICBpZihvdXRwdXRQYXRoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW91dHB1dC1wYXRoJywgb3V0cHV0UGF0aC50b1N0cmluZygpKTsgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgaWYoc3RhdHMpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tc3RhdHMnLCBzdGF0cyk7XG4gIGlmKHRhcmdldCkgd2VicGFja09wdGlvbnMucHVzaCgnLS10YXJnZXQnLCB0YXJnZXQpO1xuICBpZih3YXRjaCkgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaCcpO1xuICBpZih3YXRjaE9wdGlvbnNTdGRpbikgd2VicGFja09wdGlvbnMucHVzaCgnLS13YXRjaE9wdGlvbnNTdGRpbicpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qge3dlYnBhY2tQYXRofSA9IHJlc29sdmVXZWJwYWNrUGF0aHMoY3VycmVudERpcm5hbWUpO1xuXG4gICAgbGV0IGV4ZWN1dGFibGVQYXRoID0gd2VicGFja1BhdGg7XG4gICAgbGV0IGZpbmFsV2VicGFja09wdGlvbnM6IHN0cmluZ1tdO1xuXG4gICAgaWYod2VicGFja1BhdGggPT09ICducHgnKSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWyd3ZWJwYWNrJywgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSBpZih3ZWJwYWNrUGF0aC5lbmRzV2l0aCgnLmpzJykpIHtcbiAgICAgIGV4ZWN1dGFibGVQYXRoID0gJ25vZGUnO1xuICAgICAgZmluYWxXZWJwYWNrT3B0aW9ucyA9IFt3ZWJwYWNrUGF0aCwgLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gWy4uLndlYnBhY2tPcHRpb25zXTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZFByb2Nlc3MgPSBleGVjYShleGVjdXRhYmxlUGF0aCwgZmluYWxXZWJwYWNrT3B0aW9ucywge2VuY29kaW5nOiAndXRmOCcsIHN0ZGlvOiAncGlwZSd9KTtcblxuICAgIGxldCBidWlsZENvbXBsZXRlZCA9IGZhbHNlO1xuICAgIGxldCBidWlsZFN0YXRzID0ge1xuICAgICAgbW9kdWxlczogMCxcbiAgICAgIGFzc2V0czogMCxcbiAgICAgIHNpemU6ICcwIEInXG4gICAgfTtcblxuICAgIGNoaWxkUHJvY2Vzcy5zdGRvdXQ/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuXG4gICAgICBoYW5kbGVXZWJwYWNrUHJvZ3Jlc3Mob3V0cHV0LCBzcGlubmVyLCBxdWlldCwgJ/Cfj5fvuI8nLCAnV2VicGFjayBCdWlsZGluZycpO1xuXG4gICAgICBpZighYnVpbGRDb21wbGV0ZWQgJiYgb3V0cHV0LmluY2x1ZGVzKCdjb21waWxlZCBzdWNjZXNzZnVsbHknKSkge1xuICAgICAgICBidWlsZENvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcblxuICAgICAgICBjb25zdCBtb2R1bGVNYXRjaCA9IG91dHB1dC5tYXRjaCgvKFxcZCspIG1vZHVsZXMvKTtcbiAgICAgICAgY29uc3QgYXNzZXRNYXRjaCA9IG91dHB1dC5tYXRjaCgvKFxcZCspIGFzc2V0cy8pO1xuICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSBvdXRwdXQubWF0Y2goL2Fzc2V0cyBieSBzdGF0dXMgKFtcXGQuXSsgXFx3KykvKSB8fCBvdXRwdXQubWF0Y2goL2Fzc2V0cyBieSBwYXRoLio/KFtcXGQuXSsgXFx3KykvKTtcblxuICAgICAgICBpZihtb2R1bGVNYXRjaCkgYnVpbGRTdGF0cy5tb2R1bGVzID0gcGFyc2VJbnQobW9kdWxlTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgaWYoYXNzZXRNYXRjaCkgYnVpbGRTdGF0cy5hc3NldHMgPSBwYXJzZUludChhc3NldE1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKHNpemVNYXRjaCkgYnVpbGRTdGF0cy5zaXplID0gc2l6ZU1hdGNoWzFdO1xuXG4gICAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNoaWxkUHJvY2Vzcy5zdGRlcnI/Lm9uKCdkYXRhJywgKGRhdGE6IEJ1ZmZlcikgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZGF0YS50b1N0cmluZygpO1xuXG4gICAgICBoYW5kbGVXZWJwYWNrUHJvZ3Jlc3Mob3V0cHV0LCBzcGlubmVyLCBxdWlldCwgJ/Cfj5fvuI8nLCAnV2VicGFjayBCdWlsZGluZycpO1xuXG4gICAgICBpZighYnVpbGRDb21wbGV0ZWQgJiYgb3V0cHV0LmluY2x1ZGVzKCdjb21waWxlZCBzdWNjZXNzZnVsbHknKSkge1xuICAgICAgICBidWlsZENvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQnVpbGQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnKTtcblxuICAgICAgICBjb25zdCBtb2R1bGVNYXRjaCA9IG91dHB1dC5tYXRjaCgvKFxcZCspIG1vZHVsZXMvKTtcbiAgICAgICAgY29uc3QgYXNzZXRNYXRjaCA9IG91dHB1dC5tYXRjaCgvKFxcZCspIGFzc2V0cy8pO1xuICAgICAgICBjb25zdCBzaXplTWF0Y2ggPSBvdXRwdXQubWF0Y2goL2Fzc2V0cyBieSBzdGF0dXMgKFtcXGQuXSsgXFx3KykvKSB8fCBvdXRwdXQubWF0Y2goL2Fzc2V0cyBieSBwYXRoLio/KFtcXGQuXSsgXFx3KykvKTtcblxuICAgICAgICBpZihtb2R1bGVNYXRjaCkgYnVpbGRTdGF0cy5tb2R1bGVzID0gcGFyc2VJbnQobW9kdWxlTWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgaWYoYXNzZXRNYXRjaCkgYnVpbGRTdGF0cy5hc3NldHMgPSBwYXJzZUludChhc3NldE1hdGNoWzFdLCAxMCk7XG4gICAgICAgIGlmKHNpemVNYXRjaCkgYnVpbGRTdGF0cy5zaXplID0gc2l6ZU1hdGNoWzFdO1xuXG4gICAgICAgIGRpc3BsYXlCdWlsZFN0YXR1cygnd2VicGFjaycsIExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYicsIHF1aWV0LCBidWlsZFN0YXRzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGF3YWl0IGNoaWxkUHJvY2VzcztcblxuICAgIGlmKCFidWlsZENvbXBsZXRlZCkge1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgICAgZGlzcGxheUJ1aWxkU3RhdHVzKCd3ZWJwYWNrJywgTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJywgcXVpZXQsIGJ1aWxkU3RhdHMpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBXZWJwYWNrIGJ1aWxkIGZhaWxlZGAsICdlcnJvcicsIHF1aWV0KTtcbiAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgaWYoZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgbG9nKGBcXG5TdGFjayBUcmFjZTpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2coYFxcbldlYnBhY2sgT3B0aW9uczogJHt3ZWJwYWNrT3B0aW9ucy5zbGljZSgwLCA1KS5qb2luKCcgJyl9Li4uYCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQuJyk7XG5cbiAgICBpZihjbWQuYXNzaXN0KSB7XG4gICAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIHdlYnBhY2sgZXJyb3IuLi4nKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgICAgcHJvbXB0OiBgRml4IHRoaXMgd2VicGFjayBidWlsZCBlcnJvcjogJHtlcnJvci5tZXNzYWdlfVxcblxcbkVycm9yIGRldGFpbHM6XFxuJHtlcnJvci50b1N0cmluZygpfVxcblxcbkNvbmZpZ3VyYXRpb24gdXNlZDpcXG4ke0pTT04uc3RyaW5naWZ5KHdlYnBhY2tPcHRpb25zLCBudWxsLCAyKX1gLFxuICAgICAgICAgIHRhc2s6ICdoZWxwJyxcbiAgICAgICAgICBjb250ZXh0OiB0cnVlLFxuICAgICAgICAgIHF1aWV0XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnQUkgYW5hbHlzaXMgY29tcGxldGUnKTtcbiAgICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBhc3Npc3RhbmNlJyk7XG4gICAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FJIGFzc2lzdGFuY2UgZXJyb3I6JywgYWlFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMSk7XG4gICAgcmV0dXJuIDE7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZCA9IGFzeW5jIChjbWQ6IEJ1aWxkT3B0aW9ucywgY2FsbGJhY2s6IEJ1aWxkQ2FsbGJhY2sgPSAoKSA9PiAoe30pKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3Qge1xuICAgIGJ1bmRsZXIgPSAnd2VicGFjaycsXG4gICAgY2xpTmFtZSA9ICdMZXgnLFxuICAgIHF1aWV0ID0gZmFsc2UsXG4gICAgcmVtb3ZlID0gZmFsc2UsXG4gICAgdGVzdCA9IGZhbHNlLFxuICAgIHRyYW5zbGF0aW9ucyA9IGZhbHNlLFxuICAgIHZhcmlhYmxlcyA9ICd7fSdcbiAgfSA9IGNtZDtcblxuICBjb25zdCBzcGlubmVyID0gY3JlYXRlU3Bpbm5lcihxdWlldCk7XG5cbiAgbG9nKGAke2NsaU5hbWV9IGJ1aWxkaW5nLi4uYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgYXdhaXQgTGV4Q29uZmlnLnBhcnNlQ29uZmlnKGNtZCk7XG5cbiAgY29uc3Qge291dHB1dEZ1bGxQYXRoLCB1c2VUeXBlc2NyaXB0fSA9IExleENvbmZpZy5jb25maWc7XG5cbiAgY2hlY2tMaW5rZWRNb2R1bGVzKCk7XG5cbiAgbGV0IHZhcmlhYmxlc09iajogb2JqZWN0ID0ge05PREVfRU5WOiAncHJvZHVjdGlvbid9O1xuXG4gIGlmKHZhcmlhYmxlcykge1xuICAgIHRyeSB7XG4gICAgICB2YXJpYWJsZXNPYmogPSBKU09OLnBhcnNlKHZhcmlhYmxlcyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3B0aW9uIGlzIG5vdCBhIHZhbGlkIEpTT04gb2JqZWN0LmAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzLmVudiA9IHsuLi5wcm9jZXNzLmVudiwgLi4udmFyaWFibGVzT2JqfTtcblxuICBpZih0ZXN0KSB7XG4gICAgbG9nKCdUZXN0IG1vZGU6IEJ1aWxkIGVudmlyb25tZW50IGxvYWRlZCwgZXhpdGluZycsICdpbmZvJywgcXVpZXQpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodHJhbnNsYXRpb25zKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnUHJvY2Vzc2luZyB0cmFuc2xhdGlvbnMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgJ2xpYic7XG5cbiAgICAgIGF3YWl0IHByb2Nlc3NUcmFuc2xhdGlvbnMoc291cmNlUGF0aCwgb3V0cHV0UGF0aCwgcXVpZXQpO1xuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUcmFuc2xhdGlvbnMgcHJvY2Vzc2VkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICB9IGNhdGNoKHRyYW5zbGF0aW9uRXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zOiAke3RyYW5zbGF0aW9uRXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBzcGlubmVyLmZhaWwoJ0ZhaWxlZCB0byBwcm9jZXNzIHRyYW5zbGF0aW9ucy4nKTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgc3Bpbm5lci5zdGFydCgnQnVpbGRpbmcgY29kZS4uLicpO1xuXG4gIGlmKHJlbW92ZSkge1xuICAgIGF3YWl0IHJlbW92ZUZpbGVzKG91dHB1dEZ1bGxQYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGxldCBidWlsZFJlc3VsdCA9IDA7XG5cbiAgaWYoYnVuZGxlciA9PT0gJ3N3YycpIHtcbiAgICBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkV2l0aFNXQyhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoV2VicGFjayhzcGlubmVyLCBjbWQsIChzdGF0dXMpID0+IHtcbiAgICAgIGJ1aWxkUmVzdWx0ID0gc3RhdHVzO1xuICAgIH0pO1xuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDAgJiYgY21kLmFuYWx5emUpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdBSSBpcyBhbmFseXppbmcgdGhlIGJ1aWxkIG91dHB1dCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHtcbiAgICAgICAgb3V0cHV0UGF0aDogTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCxcbiAgICAgICAgZW50cnlQb2ludHM6IGJ1bmRsZXIgPT09ICdzd2MnID9cbiAgICAgICAgICBgU291cmNlIGZpbGVzOiAke0xleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGh9LyoqLyoue3RzLGpzfWAgOlxuICAgICAgICAgIExleENvbmZpZy5jb25maWcud2VicGFjaz8uZW50cnkgfHwgJ1Vua25vd24gZW50cnkgcG9pbnRzJ1xuICAgICAgfTtcblxuICAgICAgYXdhaXQgYWlGdW5jdGlvbih7XG4gICAgICAgIHByb21wdDogYEFuYWx5emUgdGhpcyBidWlsZCBmb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXM6XG5cbkJ1aWxkIFR5cGU6ICR7YnVuZGxlcn1cbkZvcm1hdDogJHtjbWQuZm9ybWF0IHx8ICdkZWZhdWx0J31cbkVudmlyb25tZW50OiAke0xleENvbmZpZy5jb25maWcudGFyZ2V0RW52aXJvbm1lbnR9XG4ke0pTT04uc3RyaW5naWZ5KHN0YXRzLCBudWxsLCAyKX1cblxuV2hhdCBhcmUgdGhlIGtleSBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcyBmb3IgdGhpcyBidWlsZCBjb25maWd1cmF0aW9uPyBDb25zaWRlcjpcbjEuIEJ1bmRsZSBzaXplIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzXG4yLiBDb2RlIHNwbGl0dGluZyByZWNvbW1lbmRhdGlvbnNcbjMuIFRyZWUtc2hha2luZyBpbXByb3ZlbWVudHNcbjQuIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50c1xuNS4gRGVwZW5kZW5jeSBvcHRpbWl6YXRpb25zYCxcbiAgICAgICAgdGFzazogJ29wdGltaXplJyxcbiAgICAgICAgY29udGV4dDogdHJ1ZSxcbiAgICAgICAgcXVpZXRcbiAgICAgIH0pO1xuXG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0FJIGJ1aWxkIGFuYWx5c2lzIGNvbXBsZXRlJyk7XG4gICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICBzcGlubmVyLmZhaWwoJ0NvdWxkIG5vdCBnZW5lcmF0ZSBBSSBvcHRpbWl6YXRpb24gYW5hbHlzaXMnKTtcbiAgICAgIGlmKCFxdWlldCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdBSSBhbmFseXNpcyBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZihidWlsZFJlc3VsdCA9PT0gMCkge1xuICAgIHRyeSB7XG4gICAgICBpZih1c2VUeXBlc2NyaXB0ICYmIGJ1bmRsZXIgPT09ICdzd2MnKSB7XG4gICAgICAgIGNvbnN0IHR5cGVzY3JpcHRQYXRoID0gcmVzb2x2ZUJpbmFyeVBhdGgoJ3RzYycsICd0eXBlc2NyaXB0Jyk7XG5cbiAgICAgICAgaWYodHlwZXNjcmlwdFBhdGgpIHtcbiAgICAgICAgICBzcGlubmVyLnN0YXJ0KCdHZW5lcmF0aW5nIFR5cGVTY3JpcHQgZGVjbGFyYXRpb25zLi4uJyk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5zb3VyY2VGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9zcmMnKTtcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dEZ1bGxQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9saWInKTtcbiAgICAgICAgICAgIGNvbnN0IGdsb2JPcHRpb25zID0ge1xuICAgICAgICAgICAgICBjd2Q6IHNvdXJjZUZ1bGxQYXRoLFxuICAgICAgICAgICAgICBkb3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBub2RpcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYWJzb2x1dGU6IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCB0c0ZpbGVzID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c2AsIGdsb2JPcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHRzeEZpbGVzID0gZ2xvYlN5bmMoYCoqLyEoKi5zcGVjfCoudGVzdHwqLmludGVncmF0aW9uKS50c3hgLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCBhbGxTb3VyY2VGaWxlcyA9IFsuLi50c0ZpbGVzLCAuLi50c3hGaWxlc107XG4gICAgICAgICAgICBjb25zdCB0eXBlc2NyaXB0T3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgLi4uTGV4Q29uZmlnLmdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzKCksXG4gICAgICAgICAgICAgIC4uLmFsbFNvdXJjZUZpbGVzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY2EodHlwZXNjcmlwdFBhdGgsIHR5cGVzY3JpcHRPcHRpb25zLCB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgICAgICAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgICAgICAgcmVqZWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgYWxsOiB0cnVlXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYocmVzdWx0LmV4aXRDb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGhhc0RlY2xhcmF0aW9ucyA9IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdXcml0aW5nJykgfHwgcmVzdWx0LmFsbD8uaW5jbHVkZXMoJ0RlY2xhcmF0aW9uJykgfHwgZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yT3V0cHV0ID0gcmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IHJlc3VsdC5hbGwgfHwgJ1Vua25vd24gZXJyb3InO1xuXG4gICAgICAgICAgICAgIGlmKCFoYXNEZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBmYWlsZWRgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG5FeGl0IENvZGU6ICR7cmVzdWx0LmV4aXRDb2RlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICBsb2coYFxcblR5cGVTY3JpcHQgQ29tbWFuZDogJHt0eXBlc2NyaXB0UGF0aH0gJHt0eXBlc2NyaXB0T3B0aW9ucy5zbGljZSgwLCAxMCkuam9pbignICcpfS4uLmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICBsb2coYFxcbkVycm9yIE91dHB1dDpcXG4ke2Vycm9yT3V0cHV0fWAsICdlcnJvcicsIHF1aWV0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTGluZXMgPSBlcnJvck91dHB1dC5zcGxpdCgnXFxuJykuZmlsdGVyKGxpbmUgPT5cbiAgICAgICAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ2Vycm9yIFRTJykgfHxcbiAgICAgICAgICAgICAgICAgIGxpbmUuaW5jbHVkZXMoJ0Vycm9yOicpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdzcmMvJykgfHxcbiAgICAgICAgICAgICAgICAgIGxpbmUudHJpbSgpLnN0YXJ0c1dpdGgoJ1RTJylcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgaWYoZXJyb3JMaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBsb2coYFxcbktleSBFcnJvcnM6YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgICAgZXJyb3JMaW5lcy5zbGljZSgwLCAxMCkuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbG9nKGAgICR7bGluZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgbG9nKGAgIC4uLiBhbmQgJHtlcnJvckxpbmVzLmxlbmd0aCAtIDEwfSBtb3JlIGVycm9yc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzcGlubmVyLmZhaWwoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBoYWQgZXJyb3JzIChjb250aW51aW5nIGFueXdheSkuJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IFdhcm5pbmc6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBjb21wbGV0ZWQgd2l0aCBlcnJvcnNgLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICBpZighcXVpZXQgJiYgZXJyb3JPdXRwdXQpIHtcbiAgICAgICAgICAgICAgICAgIGxvZyhgXFxuV2FybmluZ3M6XFxuJHtlcnJvck91dHB1dH1gLCAnd2FybicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQgKHdpdGggd2FybmluZ3MpLicpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzcGlubmVyLnN1Y2NlZWQoJ1R5cGVTY3JpcHQgZGVjbGFyYXRpb25zIGdlbmVyYXRlZCEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFR5cGVTY3JpcHQgZGVjbGFyYXRpb24gZ2VuZXJhdGlvbiBleGNlcHRpb25gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICBsb2coYFxcbkVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5zdGFjaykge1xuICAgICAgICAgICAgICBsb2coYFxcblN0YWNrOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gaGFkIGlzc3VlcyAoY29udGludWluZyBhbnl3YXkpLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBjb3B5Q29uZmlndXJlZEZpbGVzKHNwaW5uZXIsIExleENvbmZpZy5jb25maWcsIHF1aWV0KTtcbiAgICB9IGNhdGNoKGNvcHlFcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gY29weSBjb25maWd1cmVkIGZpbGVzOiAke2NvcHlFcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIGNhbGxiYWNrKDEpO1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2soYnVpbGRSZXN1bHQpO1xuICByZXR1cm4gYnVpbGRSZXN1bHQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZDtcbiJdLCJuYW1lcyI6WyJ0cmFuc2Zvcm0iLCJleGVjYSIsImV4aXN0c1N5bmMiLCJyZWFkRmlsZVN5bmMiLCJzeW5jIiwiZ2xvYlN5bmMiLCJkaXJuYW1lIiwicmVsYXRpdmUiLCJwYXRoUmVsYXRpdmUiLCJyZXNvbHZlIiwicGF0aFJlc29sdmUiLCJMZXhDb25maWciLCJjaGVja0xpbmtlZE1vZHVsZXMiLCJjb3B5Q29uZmlndXJlZEZpbGVzIiwiY3JlYXRlU3Bpbm5lciIsImhhbmRsZVdlYnBhY2tQcm9ncmVzcyIsInJlbW92ZUZpbGVzIiwicmVzb2x2ZVdlYnBhY2tQYXRocyIsImdldExleFBhY2thZ2VKc29uUGF0aCIsInJlc29sdmVCaW5hcnlQYXRoIiwibG9nIiwicHJvY2Vzc1RyYW5zbGF0aW9ucyIsImFpRnVuY3Rpb24iLCJib3hlbiIsImNoYWxrIiwiY3VycmVudEZpbGVuYW1lIiwiY3VycmVudERpcm5hbWUiLCJldmFsIiwicHJvY2VzcyIsImN3ZCIsImRpc3BsYXlCdWlsZFN0YXR1cyIsImJ1bmRsZXIiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJzdGF0cyIsInN0YXRzSW5mbyIsIm1vZHVsZXMiLCJhc3NldHMiLCJncmVlbiIsImN5YW4iLCJzaXplIiwic3RhdHVzQm94IiwiYm9sZCIsInVuZGVybGluZSIsInllbGxvdyIsInBhZGRpbmciLCJtYXJnaW4iLCJib3JkZXJTdHlsZSIsImJvcmRlckNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwiY29uc29sZSIsImJ1aWxkV2l0aFNXQyIsInNwaW5uZXIiLCJjb21tYW5kT3B0aW9ucyIsImNhbGxiYWNrIiwiY2xpTmFtZSIsImZvcm1hdCIsInNvdXJjZVBhdGgiLCJ3YXRjaCIsIm91dHB1dEZ1bGxQYXRoIiwic291cmNlRnVsbFBhdGgiLCJzd2MiLCJzd2NDb25maWciLCJ0YXJnZXRFbnZpcm9ubWVudCIsInVzZUdyYXBoUWwiLCJ1c2VUeXBlc2NyaXB0IiwiY29uZmlnIiwic291cmNlRGlyIiwiZ2xvYk9wdGlvbnMiLCJhYnNvbHV0ZSIsImRvdCIsIm5vZGlyIiwibm9zb3J0IiwidHNGaWxlcyIsImpzRmlsZXMiLCJzb3VyY2VGaWxlcyIsIm91dHB1dERpciIsInN0YXJ0IiwidHJhbnNmb3JtUHJvbWlzZXMiLCJtYXAiLCJmaWxlIiwiZmlsZVJlbGF0aXZlVG9Tb3VyY2UiLCJvdXRwdXRGaWxlIiwicmVwbGFjZSIsIm91dHB1dERpclBhdGgiLCJta2RpclN5bmMiLCJyZWN1cnNpdmUiLCJzb3VyY2VDb2RlIiwic3djT3B0aW9ucyIsImZpbGVuYW1lIiwibW9kdWxlIiwidHlwZSIsInJlc3VsdCIsIndyaXRlRmlsZVN5bmMiLCJjb2RlIiwiUHJvbWlzZSIsImFsbCIsInN1Y2NlZWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJFcnJvciIsInN0YWNrIiwiZmFpbCIsImJ1aWxkV2l0aFdlYnBhY2siLCJjbWQiLCJhbmFseXplIiwiY29uZmlnTmFtZSIsImRlZmluZVByb2Nlc3NFbnZOb2RlRW52IiwiZGV2dG9vbCIsImRpc2FibGVJbnRlcnByZXQiLCJlbnRyeSIsImVudiIsImZhaWxPbldhcm5pbmdzIiwianNvbiIsIm1lcmdlIiwibW9kZSIsIm5hbWUiLCJub2RlRW52Iiwibm9EZXZ0b29sIiwibm9TdGF0cyIsIm5vVGFyZ2V0Iiwibm9XYXRjaCIsIm5vV2F0Y2hPcHRpb25zU3RkaW4iLCJ0YXJnZXQiLCJ3YXRjaE9wdGlvbnNTdGRpbiIsImVudHJ5VmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ3ZWJwYWNrQ29uZmlnIiwiaXNSZWxhdGl2ZUNvbmZpZyIsInN1YnN0ciIsInByb2plY3RDb25maWdQYXRoIiwicHJvamVjdENvbmZpZ1BhdGhUcyIsImhhc1Byb2plY3RDb25maWciLCJyZXNvbHZlZENvbmZpZyIsImxleFBhY2thZ2VQYXRoIiwibGV4UGFja2FnZURpciIsImxleFdlYnBhY2tDb25maWciLCJ3ZWJwYWNrT3B0aW9ucyIsInB1c2giLCJ0b1N0cmluZyIsIndlYnBhY2tQYXRoIiwiZXhlY3V0YWJsZVBhdGgiLCJmaW5hbFdlYnBhY2tPcHRpb25zIiwiZW5kc1dpdGgiLCJjaGlsZFByb2Nlc3MiLCJlbmNvZGluZyIsInN0ZGlvIiwiYnVpbGRDb21wbGV0ZWQiLCJidWlsZFN0YXRzIiwic3Rkb3V0Iiwib24iLCJkYXRhIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJtb2R1bGVNYXRjaCIsIm1hdGNoIiwiYXNzZXRNYXRjaCIsInNpemVNYXRjaCIsInBhcnNlSW50Iiwic3RkZXJyIiwic2xpY2UiLCJqb2luIiwiYXNzaXN0IiwicHJvbXB0IiwiSlNPTiIsInN0cmluZ2lmeSIsInRhc2siLCJjb250ZXh0IiwiYWlFcnJvciIsImJ1aWxkIiwicmVtb3ZlIiwidGVzdCIsInRyYW5zbGF0aW9ucyIsInZhcmlhYmxlcyIsInBhcnNlQ29uZmlnIiwidmFyaWFibGVzT2JqIiwiTk9ERV9FTlYiLCJwYXJzZSIsInRyYW5zbGF0aW9uRXJyb3IiLCJidWlsZFJlc3VsdCIsInN0YXR1cyIsImVudHJ5UG9pbnRzIiwid2VicGFjayIsInR5cGVzY3JpcHRQYXRoIiwidHN4RmlsZXMiLCJhbGxTb3VyY2VGaWxlcyIsInR5cGVzY3JpcHRPcHRpb25zIiwiZ2V0VHlwZVNjcmlwdERlY2xhcmF0aW9uRmxhZ3MiLCJyZWplY3QiLCJleGl0Q29kZSIsImhhc0RlY2xhcmF0aW9ucyIsImVycm9yT3V0cHV0IiwiZXJyb3JMaW5lcyIsInNwbGl0IiwiZmlsdGVyIiwibGluZSIsInRyaW0iLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiZm9yRWFjaCIsImNvcHlFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsU0FBUyxRQUFPLFlBQVk7QUFDcEMsU0FBUUMsS0FBSyxRQUFPLFFBQVE7QUFDNUIsU0FBUUMsVUFBVSxFQUFFQyxZQUFZLFFBQU8sS0FBSztBQUM1QyxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUNFQyxPQUFPLEVBQ1BDLFlBQVlDLFlBQVksRUFDeEJDLFdBQVdDLFdBQVcsUUFDakIsT0FBTztBQUVkLFNBQVFDLFNBQVMsUUFBTyxxQkFBcUI7QUFDN0MsU0FBUUMsa0JBQWtCLEVBQUVDLG1CQUFtQixFQUFFQyxhQUFhLEVBQXFCQyxxQkFBcUIsRUFBRUMsV0FBVyxRQUFPLHFCQUFxQjtBQUNqSixTQUNFQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixFQUNyQkMsaUJBQWlCLFFBQ1osc0JBQXNCO0FBQzdCLFNBQVFDLEdBQUcsUUFBTyxxQkFBcUI7QUFDdkMsU0FBUUMsbUJBQW1CLFFBQU8sOEJBQThCO0FBQ2hFLFNBQVFDLFVBQVUsUUFBTyxjQUFjO0FBQ3ZDLE9BQU9D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
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21tYW5kcy9idWlsZC9idWlsZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOC1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt0cmFuc2Zvcm19IGZyb20gJ0Bzd2MvY29yZSc7XG5pbXBvcnQge2V4ZWNhfSBmcm9tICdleGVjYSc7XG5pbXBvcnQge2V4aXN0c1N5bmMsIHJlYWRGaWxlU3luY30gZnJvbSAnZnMnO1xuaW1wb3J0IHtzeW5jIGFzIGdsb2JTeW5jfSBmcm9tICdnbG9iJztcbmltcG9ydCB7XG4gIGRpcm5hbWUsXG4gIHJlbGF0aXZlIGFzIHBhdGhSZWxhdGl2ZSxcbiAgcmVzb2x2ZSBhcyBwYXRoUmVzb2x2ZVxufSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtMZXhDb25maWd9IGZyb20gJy4uLy4uL0xleENvbmZpZy5qcyc7XG5pbXBvcnQge2NoZWNrTGlua2VkTW9kdWxlcywgY29weUNvbmZpZ3VyZWRGaWxlcywgY3JlYXRlU3Bpbm5lciwgY3JlYXRlUHJvZ3Jlc3NCYXIsIGhhbmRsZVdlYnBhY2tQcm9ncmVzcywgcmVtb3ZlRmlsZXN9IGZyb20gJy4uLy4uL3V0aWxzL2FwcC5qcyc7XG5pbXBvcnQge1xuICByZXNvbHZlV2VicGFja1BhdGhzLFxuICBnZXRMZXhQYWNrYWdlSnNvblBhdGgsXG4gIHJlc29sdmVCaW5hcnlQYXRoXG59IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUuanMnO1xuaW1wb3J0IHtsb2d9IGZyb20gJy4uLy4uL3V0aWxzL2xvZy5qcyc7XG5pbXBvcnQge3Byb2Nlc3NUcmFuc2xhdGlvbnN9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zbGF0aW9ucy5qcyc7XG5pbXBvcnQge2FpRnVuY3Rpb259IGZyb20gJy4uL2FpL2FpLmpzJztcbmltcG9ydCBib3hlbiBmcm9tICdib3hlbic7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5pbXBvcnQgdHlwZSB7U1dDT3B0aW9uc30gZnJvbSAnLi4vLi4vTGV4Q29uZmlnLmpzJztcbmltcG9ydCB0eXBlIHtTcGlubmVyfSBmcm9tICcuLi8uLi91dGlscy9hcHAuanMnO1xuXG5sZXQgY3VycmVudEZpbGVuYW1lOiBzdHJpbmc7XG5sZXQgY3VycmVudERpcm5hbWU6IHN0cmluZztcblxudHJ5IHtcbiAgY3VycmVudEZpbGVuYW1lID0gZXZhbCgncmVxdWlyZShcInVybFwiKS5maWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCknKTtcbiAgY3VycmVudERpcm5hbWUgPSBkaXJuYW1lKGN1cnJlbnRGaWxlbmFtZSk7XG59IGNhdGNoIHtcbiAgY3VycmVudEZpbGVuYW1lID0gcHJvY2Vzcy5jd2QoKTtcbiAgY3VycmVudERpcm5hbWUgPSBwcm9jZXNzLmN3ZCgpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGFzc2lzdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFuYWx5emU/OiBib29sZWFuO1xuICByZWFkb25seSBidW5kbGVyPzogJ3dlYnBhY2snIHwgJ3N3Yyc7XG4gIHJlYWRvbmx5IGNsaU5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5Pzogc3RyaW5nO1xuICByZWFkb25seSBmb3JtYXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG91dHB1dFBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVtb3ZlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlUGF0aD86IHN0cmluZztcbiAgcmVhZG9ubHkgdGVzdD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRyYW5zbGF0aW9ucz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IHN0cmluZztcbiAgcmVhZG9ubHkgd2F0Y2g/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBCdWlsZENhbGxiYWNrID0gKHN0YXR1czogbnVtYmVyKSA9PiB2b2lkO1xuXG5jb25zdCBkaXNwbGF5QnVpbGRTdGF0dXMgPSAoYnVuZGxlcjogc3RyaW5nLCBvdXRwdXRQYXRoOiBzdHJpbmcsIHF1aWV0OiBib29sZWFuLCBzdGF0cz86IHttb2R1bGVzPzogbnVtYmVyOyBhc3NldHM/OiBudW1iZXI7IHNpemU/OiBzdHJpbmd9KSA9PiB7XG4gIGlmKHF1aWV0KSByZXR1cm47XG5cbiAgbGV0IHN0YXRzSW5mbyA9ICcnO1xuICBpZihzdGF0cyAmJiBzdGF0cy5tb2R1bGVzICYmIHN0YXRzLmFzc2V0cykge1xuICAgIHN0YXRzSW5mbyA9IGBcXG4ke2NoYWxrLmdyZWVuKCdNb2R1bGVzOicpfSAgICAke2NoYWxrLmN5YW4oc3RhdHMubW9kdWxlcyl9XFxuYCArXG4gICAgICBgJHtjaGFsay5ncmVlbignQXNzZXRzOicpfSAgICAgJHtjaGFsay5jeWFuKHN0YXRzLmFzc2V0cyl9XFxuYCArXG4gICAgICBgJHtjaGFsay5ncmVlbignU2l6ZTonKX0gICAgICAgJHtjaGFsay5jeWFuKHN0YXRzLnNpemUpfVxcbmA7XG4gIH1cblxuICBjb25zdCBzdGF0dXNCb3ggPSBib3hlbihcbiAgICBgJHtjaGFsay5jeWFuLmJvbGQoJ/Cfj5fvuI8gIEJ1aWxkIENvbXBsZXRlZCBTdWNjZXNzZnVsbHkgJyl9XFxuXFxuYCArXG4gICAgYCR7Y2hhbGsuZ3JlZW4oJ0J1bmRsZXI6Jyl9ICAgICR7Y2hhbGsuY3lhbihidW5kbGVyKX1cXG5gICtcbiAgICBgJHtjaGFsay5ncmVlbignT3V0cHV0OicpfSAgICAgJHtjaGFsay51bmRlcmxpbmUob3V0cHV0UGF0aCl9JHtzdGF0c0luZm99XFxuYCArXG4gICAgYCR7Y2hhbGsueWVsbG93KCdSZWFkeSBmb3IgZGVwbG95bWVudCEg8J+agCcpfWAsXG4gICAge1xuICAgICAgcGFkZGluZzogMSxcbiAgICAgIG1hcmdpbjogMSxcbiAgICAgIGJvcmRlclN0eWxlOiAncm91bmQnLFxuICAgICAgYm9yZGVyQ29sb3I6ICdncmVlbicsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMWExYTFhJ1xuICAgIH1cbiAgKTtcblxuICBjb25zb2xlLmxvZygnXFxuJyArIHN0YXR1c0JveCArICdcXG4nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFdpdGhTV0MgPSBhc3luYyAoc3Bpbm5lcjogU3Bpbm5lciwgY29tbWFuZE9wdGlvbnM6IEJ1aWxkT3B0aW9ucywgY2FsbGJhY2s6IEJ1aWxkQ2FsbGJhY2spID0+IHtcbiAgY29uc3Qge1xuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBmb3JtYXQgPSAnZXNtJyxcbiAgICBvdXRwdXRQYXRoLFxuICAgIHF1aWV0LFxuICAgIHNvdXJjZVBhdGgsXG4gICAgd2F0Y2hcbiAgfSA9IGNvbW1hbmRPcHRpb25zO1xuICBjb25zdCB7XG4gICAgb3V0cHV0RnVsbFBhdGgsXG4gICAgc291cmNlRnVsbFBhdGgsXG4gICAgc3djOiBzd2NDb25maWcsXG4gICAgdGFyZ2V0RW52aXJvbm1lbnQsXG4gICAgdXNlR3JhcGhRbCxcbiAgICB1c2VUeXBlc2NyaXB0XG4gIH0gPSBMZXhDb25maWcuY29uZmlnO1xuICBjb25zdCBzb3VyY2VEaXI6IHN0cmluZyA9IHNvdXJjZVBhdGggPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBgLi8ke3NvdXJjZVBhdGh9YCkgOiBzb3VyY2VGdWxsUGF0aCB8fCAnJztcblxuICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICBhYnNvbHV0ZTogdHJ1ZSxcbiAgICBjd2Q6IHNvdXJjZURpcixcbiAgICBkb3Q6IGZhbHNlLFxuICAgIG5vZGlyOiB0cnVlLFxuICAgIG5vc29ydDogdHJ1ZVxuICB9O1xuICBjb25zdCB0c0ZpbGVzOiBzdHJpbmdbXSA9IGdsb2JTeW5jKGAqKi8hKCouc3BlY3wqLnRlc3QpLnRzKmAsIGdsb2JPcHRpb25zKTtcbiAgY29uc3QganNGaWxlczogc3RyaW5nW10gPSBnbG9iU3luYyhgKiovISgqLnNwZWN8Ki50ZXN0KS5qc2AsIGdsb2JPcHRpb25zKTtcbiAgY29uc3Qgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gWy4uLnRzRmlsZXMsIC4uLmpzRmlsZXNdO1xuXG4gIGNvbnN0IG91dHB1dERpcjogc3RyaW5nID0gb3V0cHV0UGF0aFxuICAgID8gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3V0cHV0UGF0aClcbiAgICA6IChvdXRwdXRGdWxsUGF0aCB8fCBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCAnLi9saWInKSk7XG5cbiAgdHJ5IHtcbiAgICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyB3aXRoIFNXQy4uLicpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtUHJvbWlzZXMgPSBzb3VyY2VGaWxlcy5tYXAoYXN5bmMgKGZpbGUpID0+IHtcbiAgICAgIGNvbnN0IGZpbGVSZWxhdGl2ZVRvU291cmNlID0gcGF0aFJlbGF0aXZlKHNvdXJjZURpciwgZmlsZSk7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gZmlsZTsgLy8gZmlsZSBpcyBhbHJlYWR5IGFic29sdXRlXG4gICAgICBjb25zdCBvdXRwdXRGaWxlID0gZmlsZVJlbGF0aXZlVG9Tb3VyY2UucmVwbGFjZSgvXFwuKHRzfHRzeCkkLywgJy5qcycpO1xuICAgICAgY29uc3Qgb3V0cHV0UGF0aCA9IHBhdGhSZXNvbHZlKG91dHB1dERpciwgb3V0cHV0RmlsZSk7XG4gICAgICBjb25zdCBvdXRwdXREaXJQYXRoID0gZGlybmFtZShvdXRwdXRQYXRoKTtcblxuICAgICAgaWYoIWV4aXN0c1N5bmMob3V0cHV0RGlyUGF0aCkpIHtcbiAgICAgICAgY29uc3Qge21rZGlyU3luY30gPSBhd2FpdCBpbXBvcnQoJ2ZzJyk7XG4gICAgICAgIG1rZGlyU3luYyhvdXRwdXREaXJQYXRoLCB7cmVjdXJzaXZlOiB0cnVlfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSByZWFkRmlsZVN5bmMoc291cmNlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IHN3Y09wdGlvbnMgPSB7XG4gICAgICAgIC4uLnN3Y0NvbmZpZyxcbiAgICAgICAgZmlsZW5hbWU6IGZpbGUsXG4gICAgICAgIG1vZHVsZToge1xuICAgICAgICAgIHR5cGU6IGZvcm1hdCA9PT0gJ2NqcycgPyAnY29tbW9uanMnIGFzIGNvbnN0IDogKHN3Y0NvbmZpZz8ubW9kdWxlPy50eXBlIGFzICdlczYnIHx8ICdlczYnKSxcbiAgICAgICAgICAuLi5zd2NDb25maWc/Lm1vZHVsZVxuICAgICAgICB9LFxuICAgICAgfSBhcyBQYXJ0aWFsPFNXQ09wdGlvbnM+O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFuc2Zvcm0oc291cmNlQ29kZSwgc3djT3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IHt3cml0ZUZpbGVTeW5jfSA9IGF3YWl0IGltcG9ydCgnZnMnKTtcbiAgICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0UGF0aCwgcmVzdWx0LmNvZGUpO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodHJhbnNmb3JtUHJvbWlzZXMpO1xuXG4gICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgd2l0aCBTV0MnKTtcbiAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ1NXQycsIG91dHB1dERpciwgcXVpZXQgPz8gZmFsc2UpO1xuICAgIGNhbGxiYWNrKDApO1xuICAgIHJldHVybiAwO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nKGBcXG4ke2NvbW1hbmRPcHRpb25zLmNsaU5hbWUgfHwgJ0xleCd9IEVycm9yOiBTV0MgYnVpbGQgZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhgXFxuRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZihlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrIFRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuXG4gICAgICBpZignZmlsZW5hbWUnIGluIGVycm9yIHx8ICdmaWxlJyBpbiBlcnJvcikge1xuICAgICAgICBsb2coYFxcbkZpbGU6ICR7KGVycm9yIGFzIGFueSkuZmlsZW5hbWUgfHwgKGVycm9yIGFzIGFueSkuZmlsZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3Bpbm5lci5mYWlsKCdCdWlsZCBmYWlsZWQgd2l0aCBTV0MnKTtcbiAgICBpZighcXVpZXQpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1xcbkZ1bGwgRXJyb3IgRGV0YWlsczonLCBlcnJvcik7XG4gICAgfVxuICAgIGNhbGxiYWNrKDEpO1xuICAgIHJldHVybiAxO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRXaXRoV2VicGFjayA9IGFzeW5jIChcbiAgc3Bpbm5lcjogU3Bpbm5lcixcbiAgY21kOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBjYWxsYmFjazogQnVpbGRDYWxsYmFja1xuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhbmFseXplLFxuICAgIGNsaU5hbWUgPSAnTGV4JyxcbiAgICBjb25maWcsXG4gICAgY29uZmlnTmFtZSxcbiAgICBkZWZpbmVQcm9jZXNzRW52Tm9kZUVudixcbiAgICBkZXZ0b29sLFxuICAgIGRpc2FibGVJbnRlcnByZXQsXG4gICAgZW50cnksXG4gICAgZW52LFxuICAgIGZhaWxPbldhcm5pbmdzLFxuICAgIGpzb24sXG4gICAgbWVyZ2UsXG4gICAgbW9kZSxcbiAgICBuYW1lLFxuICAgIG5vZGVFbnYsXG4gICAgbm9EZXZ0b29sLFxuICAgIG5vU3RhdHMsXG4gICAgbm9UYXJnZXQsXG4gICAgbm9XYXRjaCxcbiAgICBub1dhdGNoT3B0aW9uc1N0ZGluLFxuICAgIG91dHB1dFBhdGgsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICBzdGF0cyxcbiAgICB0YXJnZXQsXG4gICAgd2F0Y2gsXG4gICAgd2F0Y2hPcHRpb25zU3RkaW5cbiAgfSA9IGNtZDtcblxuICBjb25zdCBlbnRyeVZhbHVlID0gQXJyYXkuaXNBcnJheShlbnRyeSkgPyBlbnRyeVswXSA6IGVudHJ5O1xuXG4gIGxldCB3ZWJwYWNrQ29uZmlnOiBzdHJpbmc7XG5cbiAgaWYoY29uZmlnKSB7XG4gICAgY29uc3QgaXNSZWxhdGl2ZUNvbmZpZzogYm9vbGVhbiA9IGNvbmZpZy5zdWJzdHIoMCwgMikgPT09ICcuLyc7XG4gICAgd2VicGFja0NvbmZpZyA9IGlzUmVsYXRpdmVDb25maWcgPyBwYXRoUmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBjb25maWcpIDogY29uZmlnO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHByb2plY3RDb25maWdQYXRoID0gcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3dlYnBhY2suY29uZmlnLmpzJyk7XG4gICAgY29uc3QgcHJvamVjdENvbmZpZ1BhdGhUcyA9IHBhdGhSZXNvbHZlKHByb2Nlc3MuY3dkKCksICd3ZWJwYWNrLmNvbmZpZy50cycpO1xuICAgIGNvbnN0IGhhc1Byb2plY3RDb25maWcgPSBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoKSB8fCBleGlzdHNTeW5jKHByb2plY3RDb25maWdQYXRoVHMpO1xuXG4gICAgaWYoaGFzUHJvamVjdENvbmZpZykge1xuICAgICAgd2VicGFja0NvbmZpZyA9IGV4aXN0c1N5bmMocHJvamVjdENvbmZpZ1BhdGhUcykgPyBwcm9qZWN0Q29uZmlnUGF0aFRzIDogcHJvamVjdENvbmZpZ1BhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHt3ZWJwYWNrQ29uZmlnOiByZXNvbHZlZENvbmZpZ30gPSByZXNvbHZlV2VicGFja1BhdGhzKGN1cnJlbnREaXJuYW1lKTtcbiAgICAgIHdlYnBhY2tDb25maWcgPSByZXNvbHZlZENvbmZpZztcbiAgICB9XG4gIH1cblxuICBpZighZXhpc3RzU3luYyh3ZWJwYWNrQ29uZmlnKSkge1xuICAgIGNvbnN0IGxleFBhY2thZ2VQYXRoID0gZ2V0TGV4UGFja2FnZUpzb25QYXRoKCk7XG4gICAgY29uc3QgbGV4UGFja2FnZURpciA9IGRpcm5hbWUobGV4UGFja2FnZVBhdGgpO1xuICAgIGNvbnN0IGxleFdlYnBhY2tDb25maWcgPSBwYXRoUmVzb2x2ZShsZXhQYWNrYWdlRGlyLCAnd2VicGFjay5jb25maWcuanMnKTtcblxuICAgIGlmKGV4aXN0c1N5bmMobGV4V2VicGFja0NvbmZpZykpIHtcbiAgICAgIHdlYnBhY2tDb25maWcgPSBsZXhXZWJwYWNrQ29uZmlnO1xuICAgICAgY29uc29sZS5sb2coJ1VzaW5nIExleCB3ZWJwYWNrIGNvbmZpZzonLCB3ZWJwYWNrQ29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBDb3VsZCBub3QgZmluZCB3ZWJwYWNrLmNvbmZpZy5qc2AsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnQnVpbGQgZmFpbGVkLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB3ZWJwYWNrT3B0aW9uczogc3RyaW5nW10gPSBbXG4gICAgJy0tY29sb3InLFxuICAgICctLXByb2dyZXNzJyxcbiAgICAnLS1jb25maWcnLCB3ZWJwYWNrQ29uZmlnXG4gIF07XG5cbiAgaWYoYW5hbHl6ZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1hbmFseXplJyk7XG4gIGlmKGNvbmZpZ05hbWUpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tY29uZmlnTmFtZScsIGNvbmZpZ05hbWUpO1xuICBpZihkZWZpbmVQcm9jZXNzRW52Tm9kZUVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1kZWZpbmVQcm9jZXNzRW52Tm9kZUVudicsIGRlZmluZVByb2Nlc3NFbnZOb2RlRW52KTtcbiAgaWYoZGV2dG9vbCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1kZXZ0b29sJywgZGV2dG9vbCk7XG4gIGlmKGRpc2FibGVJbnRlcnByZXQpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tZGlzYWJsZUludGVycHJldCcpO1xuICBpZihlbnRyeVZhbHVlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWVudHJ5JywgZW50cnlWYWx1ZS50b1N0cmluZygpKTtcbiAgaWYoZW52KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWVudicsIGVudik7XG4gIGlmKGZhaWxPbldhcm5pbmdzKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLWZhaWxPbldhcm5pbmdzJyk7XG4gIGlmKGpzb24pIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tanNvbicsIGpzb24pO1xuICBpZihtb2RlKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW1vZGUnLCBtb2RlKTtcbiAgaWYobWVyZ2UpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbWVyZ2UnKTtcbiAgaWYobmFtZSkgd2VicGFja09wdGlvbnMucHVzaCgnLS1uYW1lJywgbmFtZSk7XG4gIGlmKG5vRGV2dG9vbCkgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub0RldnRvb2wnKTtcbiAgaWYobm9TdGF0cykgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub1N0YXRzJyk7XG4gIGlmKG5vVGFyZ2V0KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vVGFyZ2V0Jyk7XG4gIGlmKG5vV2F0Y2gpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tbm9XYXRjaCcpO1xuICBpZihub1dhdGNoT3B0aW9uc1N0ZGluKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLW5vV2F0Y2hPcHRpb25zU3RkaW4nKTtcbiAgaWYobm9kZUVudikgd2VicGFja09wdGlvbnMucHVzaCgnLS1ub2RlRW52Jywgbm9kZUVudik7XG4gIGlmKG91dHB1dFBhdGgpIHdlYnBhY2tPcHRpb25zLnB1c2goJy0tb3V0cHV0LXBhdGgnLCBvdXRwdXRQYXRoLnRvU3RyaW5nKCkpOyAvLyBDb252ZXJ0IHRvIHN0cmluZ1xuICBpZihzdGF0cykgd2VicGFja09wdGlvbnMucHVzaCgnLS1zdGF0cycsIHN0YXRzKTtcbiAgaWYodGFyZ2V0KSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLXRhcmdldCcsIHRhcmdldCk7XG4gIGlmKHdhdGNoKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLXdhdGNoJyk7XG4gIGlmKHdhdGNoT3B0aW9uc1N0ZGluKSB3ZWJwYWNrT3B0aW9ucy5wdXNoKCctLXdhdGNoT3B0aW9uc1N0ZGluJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7d2VicGFja1BhdGh9ID0gcmVzb2x2ZVdlYnBhY2tQYXRocyhjdXJyZW50RGlybmFtZSk7XG5cbiAgICBsZXQgZXhlY3V0YWJsZVBhdGggPSB3ZWJwYWNrUGF0aDtcbiAgICBsZXQgZmluYWxXZWJwYWNrT3B0aW9uczogc3RyaW5nW107XG5cbiAgICBpZih3ZWJwYWNrUGF0aCA9PT0gJ25weCcpIHtcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbJ3dlYnBhY2snLCAuLi53ZWJwYWNrT3B0aW9uc107XG4gICAgfSBlbHNlIGlmKHdlYnBhY2tQYXRoLmVuZHNXaXRoKCcuanMnKSkge1xuICAgICAgZXhlY3V0YWJsZVBhdGggPSAnbm9kZSc7XG4gICAgICBmaW5hbFdlYnBhY2tPcHRpb25zID0gW3dlYnBhY2tQYXRoLCAuLi53ZWJwYWNrT3B0aW9uc107XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmFsV2VicGFja09wdGlvbnMgPSBbLi4ud2VicGFja09wdGlvbnNdO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkUHJvY2VzcyA9IGV4ZWNhKGV4ZWN1dGFibGVQYXRoLCBmaW5hbFdlYnBhY2tPcHRpb25zLCB7ZW5jb2Rpbmc6ICd1dGY4Jywgc3RkaW86ICdwaXBlJ30pO1xuXG4gICAgbGV0IGJ1aWxkQ29tcGxldGVkID0gZmFsc2U7XG4gICAgbGV0IGJ1aWxkU3RhdHMgPSB7XG4gICAgICBtb2R1bGVzOiAwLFxuICAgICAgYXNzZXRzOiAwLFxuICAgICAgc2l6ZTogJzAgQidcbiAgICB9O1xuXG4gICAgY2hpbGRQcm9jZXNzLnN0ZG91dD8ub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG5cbiAgICAgIGhhbmRsZVdlYnBhY2tQcm9ncmVzcyhvdXRwdXQsIHNwaW5uZXIsIHF1aWV0LCAn8J+Pl++4jycsICdXZWJwYWNrIEJ1aWxkaW5nJyk7XG5cbiAgICAgIGlmKCFidWlsZENvbXBsZXRlZCAmJiBvdXRwdXQuaW5jbHVkZXMoJ2NvbXBpbGVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICAgIGJ1aWxkQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuXG4gICAgICAgIGNvbnN0IG1vZHVsZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC8oXFxkKykgbW9kdWxlcy8pO1xuICAgICAgICBjb25zdCBhc3NldE1hdGNoID0gb3V0cHV0Lm1hdGNoKC8oXFxkKykgYXNzZXRzLyk7XG4gICAgICAgIGNvbnN0IHNpemVNYXRjaCA9IG91dHB1dC5tYXRjaCgvYXNzZXRzIGJ5IHN0YXR1cyAoW1xcZC5dKyBcXHcrKS8pIHx8IG91dHB1dC5tYXRjaCgvYXNzZXRzIGJ5IHBhdGguKj8oW1xcZC5dKyBcXHcrKS8pO1xuXG4gICAgICAgIGlmKG1vZHVsZU1hdGNoKSBidWlsZFN0YXRzLm1vZHVsZXMgPSBwYXJzZUludChtb2R1bGVNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihhc3NldE1hdGNoKSBidWlsZFN0YXRzLmFzc2V0cyA9IHBhcnNlSW50KGFzc2V0TWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgaWYoc2l6ZU1hdGNoKSBidWlsZFN0YXRzLnNpemUgPSBzaXplTWF0Y2hbMV07XG5cbiAgICAgICAgZGlzcGxheUJ1aWxkU3RhdHVzKCd3ZWJwYWNrJywgTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJywgcXVpZXQsIGJ1aWxkU3RhdHMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY2hpbGRQcm9jZXNzLnN0ZGVycj8ub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBjb25zdCBvdXRwdXQgPSBkYXRhLnRvU3RyaW5nKCk7XG5cbiAgICAgIGhhbmRsZVdlYnBhY2tQcm9ncmVzcyhvdXRwdXQsIHNwaW5uZXIsIHF1aWV0LCAn8J+Pl++4jycsICdXZWJwYWNrIEJ1aWxkaW5nJyk7XG5cbiAgICAgIGlmKCFidWlsZENvbXBsZXRlZCAmJiBvdXRwdXQuaW5jbHVkZXMoJ2NvbXBpbGVkIHN1Y2Nlc3NmdWxseScpKSB7XG4gICAgICAgIGJ1aWxkQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdCdWlsZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuXG4gICAgICAgIGNvbnN0IG1vZHVsZU1hdGNoID0gb3V0cHV0Lm1hdGNoKC8oXFxkKykgbW9kdWxlcy8pO1xuICAgICAgICBjb25zdCBhc3NldE1hdGNoID0gb3V0cHV0Lm1hdGNoKC8oXFxkKykgYXNzZXRzLyk7XG4gICAgICAgIGNvbnN0IHNpemVNYXRjaCA9IG91dHB1dC5tYXRjaCgvYXNzZXRzIGJ5IHN0YXR1cyAoW1xcZC5dKyBcXHcrKS8pIHx8IG91dHB1dC5tYXRjaCgvYXNzZXRzIGJ5IHBhdGguKj8oW1xcZC5dKyBcXHcrKS8pO1xuXG4gICAgICAgIGlmKG1vZHVsZU1hdGNoKSBidWlsZFN0YXRzLm1vZHVsZXMgPSBwYXJzZUludChtb2R1bGVNYXRjaFsxXSwgMTApO1xuICAgICAgICBpZihhc3NldE1hdGNoKSBidWlsZFN0YXRzLmFzc2V0cyA9IHBhcnNlSW50KGFzc2V0TWF0Y2hbMV0sIDEwKTtcbiAgICAgICAgaWYoc2l6ZU1hdGNoKSBidWlsZFN0YXRzLnNpemUgPSBzaXplTWF0Y2hbMV07XG5cbiAgICAgICAgZGlzcGxheUJ1aWxkU3RhdHVzKCd3ZWJwYWNrJywgTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJywgcXVpZXQsIGJ1aWxkU3RhdHMpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXdhaXQgY2hpbGRQcm9jZXNzO1xuXG4gICAgaWYoIWJ1aWxkQ29tcGxldGVkKSB7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ0J1aWxkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICBkaXNwbGF5QnVpbGRTdGF0dXMoJ3dlYnBhY2snLCBMZXhDb25maWcuY29uZmlnLm91dHB1dEZ1bGxQYXRoIHx8ICdsaWInLCBxdWlldCwgYnVpbGRTdGF0cyk7XG4gICAgfVxuXG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IFdlYnBhY2sgYnVpbGQgZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIGxvZyhgXFxuRXJyb3I6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZihlcnJvci5zdGFjaykge1xuICAgICAgICBsb2coYFxcblN0YWNrIFRyYWNlOlxcbiR7ZXJyb3Iuc3RhY2t9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxvZyhgXFxuV2VicGFjayBPcHRpb25zOiAke3dlYnBhY2tPcHRpb25zLnNsaWNlKDAsIDUpLmpvaW4oJyAnKX0uLi5gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICBzcGlubmVyLmZhaWwoJ0J1aWxkIGZhaWxlZC4nKTtcblxuICAgIGlmKGNtZC5hc3Npc3QpIHtcbiAgICAgIHNwaW5uZXIuc3RhcnQoJ0FJIGlzIGFuYWx5emluZyB0aGUgd2VicGFjayBlcnJvci4uLicpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBhaUZ1bmN0aW9uKHtcbiAgICAgICAgICBwcm9tcHQ6IGBGaXggdGhpcyB3ZWJwYWNrIGJ1aWxkIGVycm9yOiAke2Vycm9yLm1lc3NhZ2V9XFxuXFxuRXJyb3IgZGV0YWlsczpcXG4ke2Vycm9yLnRvU3RyaW5nKCl9XFxuXFxuQ29uZmlndXJhdGlvbiB1c2VkOlxcbiR7SlNPTi5zdHJpbmdpZnkod2VicGFja09wdGlvbnMsIG51bGwsIDIpfWAsXG4gICAgICAgICAgdGFzazogJ2hlbHAnLFxuICAgICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgICAgcXVpZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSBhbmFseXNpcyBjb21wbGV0ZScpO1xuICAgICAgfSBjYXRjaChhaUVycm9yKSB7XG4gICAgICAgIHNwaW5uZXIuZmFpbCgnQ291bGQgbm90IGdlbmVyYXRlIEFJIGFzc2lzdGFuY2UnKTtcbiAgICAgICAgaWYoIXF1aWV0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignQUkgYXNzaXN0YW5jZSBlcnJvcjonLCBhaUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmKCFxdWlldCkge1xuICAgICAgY29uc29sZS5lcnJvcignXFxuRnVsbCBFcnJvciBEZXRhaWxzOicsIGVycm9yKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjaygxKTtcbiAgICByZXR1cm4gMTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkID0gYXN5bmMgKGNtZDogQnVpbGRPcHRpb25zLCBjYWxsYmFjazogQnVpbGRDYWxsYmFjayA9ICgpID0+ICh7fSkpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCB7XG4gICAgYnVuZGxlciA9ICd3ZWJwYWNrJyxcbiAgICBjbGlOYW1lID0gJ0xleCcsXG4gICAgcXVpZXQgPSBmYWxzZSxcbiAgICByZW1vdmUgPSBmYWxzZSxcbiAgICB0ZXN0ID0gZmFsc2UsXG4gICAgdHJhbnNsYXRpb25zID0gZmFsc2UsXG4gICAgdmFyaWFibGVzID0gJ3t9J1xuICB9ID0gY21kO1xuXG4gIGNvbnN0IHNwaW5uZXIgPSBjcmVhdGVTcGlubmVyKHF1aWV0KTtcblxuICBsb2coYCR7Y2xpTmFtZX0gYnVpbGRpbmcuLi5gLCAnaW5mbycsIHF1aWV0KTtcblxuICBhd2FpdCBMZXhDb25maWcucGFyc2VDb25maWcoY21kKTtcblxuICBjb25zdCB7b3V0cHV0RnVsbFBhdGgsIHVzZVR5cGVzY3JpcHR9ID0gTGV4Q29uZmlnLmNvbmZpZztcblxuICBjaGVja0xpbmtlZE1vZHVsZXMoKTtcblxuICBsZXQgdmFyaWFibGVzT2JqOiBvYmplY3QgPSB7Tk9ERV9FTlY6ICdwcm9kdWN0aW9uJ307XG5cbiAgaWYodmFyaWFibGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhcmlhYmxlc09iaiA9IEpTT04ucGFyc2UodmFyaWFibGVzKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2coYFxcbiR7Y2xpTmFtZX0gRXJyb3I6IEVudmlyb25tZW50IHZhcmlhYmxlcyBvcHRpb24gaXMgbm90IGEgdmFsaWQgSlNPTiBvYmplY3QuYCwgJ2Vycm9yJywgcXVpZXQpO1xuXG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3MuZW52ID0gey4uLnByb2Nlc3MuZW52LCAuLi52YXJpYWJsZXNPYmp9O1xuXG4gIGlmKHRlc3QpIHtcbiAgICBsb2coJ1Rlc3QgbW9kZTogQnVpbGQgZW52aXJvbm1lbnQgbG9hZGVkLCBleGl0aW5nJywgJ2luZm8nLCBxdWlldCk7XG4gICAgY2FsbGJhY2soMCk7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBpZih0cmFuc2xhdGlvbnMpIHtcbiAgICBzcGlubmVyLnN0YXJ0KCdQcm9jZXNzaW5nIHRyYW5zbGF0aW9ucy4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRoIHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgICBjb25zdCBvdXRwdXRQYXRoID0gTGV4Q29uZmlnLmNvbmZpZy5vdXRwdXRGdWxsUGF0aCB8fCAnbGliJztcblxuICAgICAgYXdhaXQgcHJvY2Vzc1RyYW5zbGF0aW9ucyhzb3VyY2VQYXRoLCBvdXRwdXRQYXRoLCBxdWlldCk7XG4gICAgICBzcGlubmVyLnN1Y2NlZWQoJ1RyYW5zbGF0aW9ucyBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH0gY2F0Y2godHJhbnNsYXRpb25FcnJvcikge1xuICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBGYWlsZWQgdG8gcHJvY2VzcyB0cmFuc2xhdGlvbnM6ICR7dHJhbnNsYXRpb25FcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIHByb2Nlc3MgdHJhbnNsYXRpb25zLicpO1xuICAgICAgY2FsbGJhY2soMSk7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cblxuICBzcGlubmVyLnN0YXJ0KCdCdWlsZGluZyBjb2RlLi4uJyk7XG5cbiAgaWYocmVtb3ZlKSB7XG4gICAgYXdhaXQgcmVtb3ZlRmlsZXMob3V0cHV0RnVsbFBhdGggfHwgJycpO1xuICB9XG5cbiAgbGV0IGJ1aWxkUmVzdWx0ID0gMDtcblxuICBpZihidW5kbGVyID09PSAnc3djJykge1xuICAgIGJ1aWxkUmVzdWx0ID0gYXdhaXQgYnVpbGRXaXRoU1dDKHNwaW5uZXIsIGNtZCwgKHN0YXR1cykgPT4ge1xuICAgICAgYnVpbGRSZXN1bHQgPSBzdGF0dXM7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFdpdGhXZWJwYWNrKHNwaW5uZXIsIGNtZCwgKHN0YXR1czogbnVtYmVyKSA9PiB7XG4gICAgICBidWlsZFJlc3VsdCA9IHN0YXR1cztcbiAgICB9KTtcbiAgfVxuXG4gIGlmKGJ1aWxkUmVzdWx0ID09PSAwICYmIGNtZC5hbmFseXplKSB7XG4gICAgc3Bpbm5lci5zdGFydCgnQUkgaXMgYW5hbHl6aW5nIHRoZSBidWlsZCBvdXRwdXQgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHMgPSB7XG4gICAgICAgIG91dHB1dFBhdGg6IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGgsXG4gICAgICAgIGVudHJ5UG9pbnRzOiBidW5kbGVyID09PSAnc3djJyA/XG4gICAgICAgICAgYFNvdXJjZSBmaWxlczogJHtMZXhDb25maWcuY29uZmlnLnNvdXJjZUZ1bGxQYXRofS8qKi8qLnt0cyxqc31gIDpcbiAgICAgICAgICBMZXhDb25maWcuY29uZmlnLndlYnBhY2s/LmVudHJ5IHx8ICdVbmtub3duIGVudHJ5IHBvaW50cydcbiAgICAgIH07XG5cbiAgICAgIGF3YWl0IGFpRnVuY3Rpb24oe1xuICAgICAgICBwcm9tcHQ6IGBBbmFseXplIHRoaXMgYnVpbGQgZm9yIG9wdGltaXphdGlvbiBvcHBvcnR1bml0aWVzOlxuXG5CdWlsZCBUeXBlOiAke2J1bmRsZXJ9XG5Gb3JtYXQ6ICR7Y21kLmZvcm1hdCB8fCAnZGVmYXVsdCd9XG5FbnZpcm9ubWVudDogJHtMZXhDb25maWcuY29uZmlnLnRhcmdldEVudmlyb25tZW50fVxuJHtKU09OLnN0cmluZ2lmeShzdGF0cywgbnVsbCwgMil9XG5cbldoYXQgYXJlIHRoZSBrZXkgb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMgZm9yIHRoaXMgYnVpbGQgY29uZmlndXJhdGlvbj8gQ29uc2lkZXI6XG4xLiBCdW5kbGUgc2l6ZSBvcHRpbWl6YXRpb24gc3RyYXRlZ2llc1xuMi4gQ29kZSBzcGxpdHRpbmcgcmVjb21tZW5kYXRpb25zXG4zLiBUcmVlLXNoYWtpbmcgaW1wcm92ZW1lbnRzXG40LiBQZXJmb3JtYW5jZSBlbmhhbmNlbWVudHNcbjUuIERlcGVuZGVuY3kgb3B0aW1pemF0aW9uc2AsXG4gICAgICAgIHRhc2s6ICdvcHRpbWl6ZScsXG4gICAgICAgIGNvbnRleHQ6IHRydWUsXG4gICAgICAgIHF1aWV0XG4gICAgICB9KTtcblxuICAgICAgc3Bpbm5lci5zdWNjZWVkKCdBSSBidWlsZCBhbmFseXNpcyBjb21wbGV0ZScpO1xuICAgIH0gY2F0Y2goYWlFcnJvcikge1xuICAgICAgc3Bpbm5lci5mYWlsKCdDb3VsZCBub3QgZ2VuZXJhdGUgQUkgb3B0aW1pemF0aW9uIGFuYWx5c2lzJyk7XG4gICAgICBpZighcXVpZXQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignQUkgYW5hbHlzaXMgZXJyb3I6JywgYWlFcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYoYnVpbGRSZXN1bHQgPT09IDApIHtcbiAgICB0cnkge1xuICAgICAgaWYodXNlVHlwZXNjcmlwdCAmJiBidW5kbGVyID09PSAnc3djJykge1xuICAgICAgICBjb25zdCB0eXBlc2NyaXB0UGF0aCA9IHJlc29sdmVCaW5hcnlQYXRoKCd0c2MnLCAndHlwZXNjcmlwdCcpO1xuXG4gICAgICAgIGlmKHR5cGVzY3JpcHRQYXRoKSB7XG4gICAgICAgICAgc3Bpbm5lci5zdGFydCgnR2VuZXJhdGluZyBUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucy4uLicpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcuc291cmNlRnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vc3JjJyk7XG4gICAgICAgICAgICBjb25zdCBvdXRwdXRGdWxsUGF0aCA9IExleENvbmZpZy5jb25maWcub3V0cHV0RnVsbFBhdGggfHwgcGF0aFJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJy4vbGliJyk7XG4gICAgICAgICAgICBjb25zdCBnbG9iT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgY3dkOiBzb3VyY2VGdWxsUGF0aCxcbiAgICAgICAgICAgICAgZG90OiBmYWxzZSxcbiAgICAgICAgICAgICAgbm9kaXI6IHRydWUsXG4gICAgICAgICAgICAgIGFic29sdXRlOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdHNGaWxlcyA9IGdsb2JTeW5jKGAqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikudHNgLCBnbG9iT3B0aW9ucyk7XG4gICAgICAgICAgICBjb25zdCB0c3hGaWxlcyA9IGdsb2JTeW5jKGAqKi8hKCouc3BlY3wqLnRlc3R8Ki5pbnRlZ3JhdGlvbikudHN4YCwgZ2xvYk9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgYWxsU291cmNlRmlsZXMgPSBbLi4udHNGaWxlcywgLi4udHN4RmlsZXNdO1xuICAgICAgICAgICAgY29uc3QgdHlwZXNjcmlwdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgIC4uLkxleENvbmZpZy5nZXRUeXBlU2NyaXB0RGVjbGFyYXRpb25GbGFncygpLFxuICAgICAgICAgICAgICAuLi5hbGxTb3VyY2VGaWxlc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNhKHR5cGVzY3JpcHRQYXRoLCB0eXBlc2NyaXB0T3B0aW9ucywge1xuICAgICAgICAgICAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgICAgICAgICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgICAgICAgICAgIHJlamVjdDogZmFsc2UsXG4gICAgICAgICAgICAgIGFsbDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICBjb25zdCBoYXNEZWNsYXJhdGlvbnMgPSByZXN1bHQuYWxsPy5pbmNsdWRlcygnV3JpdGluZycpIHx8IHJlc3VsdC5hbGw/LmluY2x1ZGVzKCdEZWNsYXJhdGlvbicpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICBjb25zdCBlcnJvck91dHB1dCA9IHJlc3VsdC5zdGRlcnIgfHwgcmVzdWx0LnN0ZG91dCB8fCByZXN1bHQuYWxsIHx8ICdVbmtub3duIGVycm9yJztcblxuICAgICAgICAgICAgICBpZighaGFzRGVjbGFyYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZmFpbGVkYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuRXhpdCBDb2RlOiAke3Jlc3VsdC5leGl0Q29kZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG5UeXBlU2NyaXB0IENvbW1hbmQ6ICR7dHlwZXNjcmlwdFBhdGh9ICR7dHlwZXNjcmlwdE9wdGlvbnMuc2xpY2UoMCwgMTApLmpvaW4oJyAnKX0uLi5gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgbG9nKGBcXG5FcnJvciBPdXRwdXQ6XFxuJHtlcnJvck91dHB1dH1gLCAnZXJyb3InLCBxdWlldCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxpbmVzID0gZXJyb3JPdXRwdXQuc3BsaXQoJ1xcbicpLmZpbHRlcihsaW5lID0+XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdlcnJvciBUUycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLmluY2x1ZGVzKCdFcnJvcjonKSB8fFxuICAgICAgICAgICAgICAgICAgbGluZS50cmltKCkuc3RhcnRzV2l0aCgnc3JjLycpIHx8XG4gICAgICAgICAgICAgICAgICBsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCdUUycpXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmKGVycm9yTGluZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgbG9nKGBcXG5LZXkgRXJyb3JzOmAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgICAgICAgIGVycm9yTGluZXMuc2xpY2UoMCwgMTApLmZvckVhY2gobGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAke2xpbmV9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBpZihlcnJvckxpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZyhgICAuLi4gYW5kICR7ZXJyb3JMaW5lcy5sZW5ndGggLSAxMH0gbW9yZSBlcnJvcnNgLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3Bpbm5lci5mYWlsKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gaGFkIGVycm9ycyAoY29udGludWluZyBhbnl3YXkpLicpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBXYXJuaW5nOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gY29tcGxldGVkIHdpdGggZXJyb3JzYCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgaWYoIXF1aWV0ICYmIGVycm9yT3V0cHV0KSB7XG4gICAgICAgICAgICAgICAgICBsb2coYFxcbldhcm5pbmdzOlxcbiR7ZXJyb3JPdXRwdXR9YCwgJ3dhcm4nLCBxdWlldCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNwaW5uZXIuc3VjY2VlZCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbnMgZ2VuZXJhdGVkICh3aXRoIHdhcm5pbmdzKS4nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3Bpbm5lci5zdWNjZWVkKCdUeXBlU2NyaXB0IGRlY2xhcmF0aW9ucyBnZW5lcmF0ZWQhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgICAgICAgbG9nKGBcXG4ke2NsaU5hbWV9IEVycm9yOiBUeXBlU2NyaXB0IGRlY2xhcmF0aW9uIGdlbmVyYXRpb24gZXhjZXB0aW9uYCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgICAgICAgICAgbG9nKGBcXG5FcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3Iuc3RhY2spIHtcbiAgICAgICAgICAgICAgbG9nKGBcXG5TdGFjazpcXG4ke2Vycm9yLnN0YWNrfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNwaW5uZXIuZmFpbCgnVHlwZVNjcmlwdCBkZWNsYXJhdGlvbiBnZW5lcmF0aW9uIGhhZCBpc3N1ZXMgKGNvbnRpbnVpbmcgYW55d2F5KS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgY29weUNvbmZpZ3VyZWRGaWxlcyhzcGlubmVyLCBMZXhDb25maWcuY29uZmlnLCBxdWlldCk7XG4gICAgfSBjYXRjaChjb3B5RXJyb3IpIHtcbiAgICAgIGxvZyhgXFxuJHtjbGlOYW1lfSBFcnJvcjogRmFpbGVkIHRvIGNvcHkgY29uZmlndXJlZCBmaWxlczogJHtjb3B5RXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgICBjYWxsYmFjaygxKTtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrKGJ1aWxkUmVzdWx0KTtcbiAgcmV0dXJuIGJ1aWxkUmVzdWx0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYnVpbGQ7XG4iXSwibmFtZXMiOlsidHJhbnNmb3JtIiwiZXhlY2EiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwic3luYyIsImdsb2JTeW5jIiwiZGlybmFtZSIsInJlbGF0aXZlIiwicGF0aFJlbGF0aXZlIiwicmVzb2x2ZSIsInBhdGhSZXNvbHZlIiwiTGV4Q29uZmlnIiwiY2hlY2tMaW5rZWRNb2R1bGVzIiwiY29weUNvbmZpZ3VyZWRGaWxlcyIsImNyZWF0ZVNwaW5uZXIiLCJoYW5kbGVXZWJwYWNrUHJvZ3Jlc3MiLCJyZW1vdmVGaWxlcyIsInJlc29sdmVXZWJwYWNrUGF0aHMiLCJnZXRMZXhQYWNrYWdlSnNvblBhdGgiLCJyZXNvbHZlQmluYXJ5UGF0aCIsImxvZyIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJhaUZ1bmN0aW9uIiwiYm94ZW4iLCJjaGFsayIsImN1cnJlbnRGaWxlbmFtZSIsImN1cnJlbnREaXJuYW1lIiwiZXZhbCIsInByb2Nlc3MiLCJjd2QiLCJkaXNwbGF5QnVpbGRTdGF0dXMiLCJidW5kbGVyIiwib3V0cHV0UGF0aCIsInF1aWV0Iiwic3RhdHMiLCJzdGF0c0luZm8iLCJtb2R1bGVzIiwiYXNzZXRzIiwiZ3JlZW4iLCJjeWFuIiwic2l6ZSIsInN0YXR1c0JveCIsImJvbGQiLCJ1bmRlcmxpbmUiLCJ5ZWxsb3ciLCJwYWRkaW5nIiwibWFyZ2luIiwiYm9yZGVyU3R5bGUiLCJib3JkZXJDb2xvciIsImJhY2tncm91bmRDb2xvciIsImNvbnNvbGUiLCJidWlsZFdpdGhTV0MiLCJzcGlubmVyIiwiY29tbWFuZE9wdGlvbnMiLCJjYWxsYmFjayIsImNsaU5hbWUiLCJmb3JtYXQiLCJzb3VyY2VQYXRoIiwid2F0Y2giLCJvdXRwdXRGdWxsUGF0aCIsInNvdXJjZUZ1bGxQYXRoIiwic3djIiwic3djQ29uZmlnIiwidGFyZ2V0RW52aXJvbm1lbnQiLCJ1c2VHcmFwaFFsIiwidXNlVHlwZXNjcmlwdCIsImNvbmZpZyIsInNvdXJjZURpciIsImdsb2JPcHRpb25zIiwiYWJzb2x1dGUiLCJkb3QiLCJub2RpciIsIm5vc29ydCIsInRzRmlsZXMiLCJqc0ZpbGVzIiwic291cmNlRmlsZXMiLCJvdXRwdXREaXIiLCJzdGFydCIsInRyYW5zZm9ybVByb21pc2VzIiwibWFwIiwiZmlsZSIsImZpbGVSZWxhdGl2ZVRvU291cmNlIiwib3V0cHV0RmlsZSIsInJlcGxhY2UiLCJvdXRwdXREaXJQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwic291cmNlQ29kZSIsInN3Y09wdGlvbnMiLCJmaWxlbmFtZSIsIm1vZHVsZSIsInR5cGUiLCJyZXN1bHQiLCJ3cml0ZUZpbGVTeW5jIiwiY29kZSIsIlByb21pc2UiLCJhbGwiLCJzdWNjZWVkIiwiZXJyb3IiLCJtZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsImZhaWwiLCJidWlsZFdpdGhXZWJwYWNrIiwiY21kIiwiYW5hbHl6ZSIsImNvbmZpZ05hbWUiLCJkZWZpbmVQcm9jZXNzRW52Tm9kZUVudiIsImRldnRvb2wiLCJkaXNhYmxlSW50ZXJwcmV0IiwiZW50cnkiLCJlbnYiLCJmYWlsT25XYXJuaW5ncyIsImpzb24iLCJtZXJnZSIsIm1vZGUiLCJuYW1lIiwibm9kZUVudiIsIm5vRGV2dG9vbCIsIm5vU3RhdHMiLCJub1RhcmdldCIsIm5vV2F0Y2giLCJub1dhdGNoT3B0aW9uc1N0ZGluIiwidGFyZ2V0Iiwid2F0Y2hPcHRpb25zU3RkaW4iLCJlbnRyeVZhbHVlIiwiQXJyYXkiLCJpc0FycmF5Iiwid2VicGFja0NvbmZpZyIsImlzUmVsYXRpdmVDb25maWciLCJzdWJzdHIiLCJwcm9qZWN0Q29uZmlnUGF0aCIsInByb2plY3RDb25maWdQYXRoVHMiLCJoYXNQcm9qZWN0Q29uZmlnIiwicmVzb2x2ZWRDb25maWciLCJsZXhQYWNrYWdlUGF0aCIsImxleFBhY2thZ2VEaXIiLCJsZXhXZWJwYWNrQ29uZmlnIiwid2VicGFja09wdGlvbnMiLCJwdXNoIiwidG9TdHJpbmciLCJ3ZWJwYWNrUGF0aCIsImV4ZWN1dGFibGVQYXRoIiwiZmluYWxXZWJwYWNrT3B0aW9ucyIsImVuZHNXaXRoIiwiY2hpbGRQcm9jZXNzIiwiZW5jb2RpbmciLCJzdGRpbyIsImJ1aWxkQ29tcGxldGVkIiwiYnVpbGRTdGF0cyIsInN0ZG91dCIsIm9uIiwiZGF0YSIsIm91dHB1dCIsImluY2x1ZGVzIiwibW9kdWxlTWF0Y2giLCJtYXRjaCIsImFzc2V0TWF0Y2giLCJzaXplTWF0Y2giLCJwYXJzZUludCIsInN0ZGVyciIsInNsaWNlIiwiam9pbiIsImFzc2lzdCIsInByb21wdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0YXNrIiwiY29udGV4dCIsImFpRXJyb3IiLCJidWlsZCIsInJlbW92ZSIsInRlc3QiLCJ0cmFuc2xhdGlvbnMiLCJ2YXJpYWJsZXMiLCJwYXJzZUNvbmZpZyIsInZhcmlhYmxlc09iaiIsIk5PREVfRU5WIiwicGFyc2UiLCJ0cmFuc2xhdGlvbkVycm9yIiwiYnVpbGRSZXN1bHQiLCJzdGF0dXMiLCJlbnRyeVBvaW50cyIsIndlYnBhY2siLCJ0eXBlc2NyaXB0UGF0aCIsInRzeEZpbGVzIiwiYWxsU291cmNlRmlsZXMiLCJ0eXBlc2NyaXB0T3B0aW9ucyIsImdldFR5cGVTY3JpcHREZWNsYXJhdGlvbkZsYWdzIiwicmVqZWN0IiwiZXhpdENvZGUiLCJoYXNEZWNsYXJhdGlvbnMiLCJlcnJvck91dHB1dCIsImVycm9yTGluZXMiLCJzcGxpdCIsImZpbHRlciIsImxpbmUiLCJ0cmltIiwic3RhcnRzV2l0aCIsImxlbmd0aCIsImZvckVhY2giLCJjb3B5RXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFNBQVMsUUFBTyxZQUFZO0FBQ3BDLFNBQVFDLEtBQUssUUFBTyxRQUFRO0FBQzVCLFNBQVFDLFVBQVUsRUFBRUMsWUFBWSxRQUFPLEtBQUs7QUFDNUMsU0FBUUMsUUFBUUMsUUFBUSxRQUFPLE9BQU87QUFDdEMsU0FDRUMsT0FBTyxFQUNQQyxZQUFZQyxZQUFZLEVBQ3hCQyxXQUFXQyxXQUFXLFFBQ2pCLE9BQU87QUFFZCxTQUFRQyxTQUFTLFFBQU8scUJBQXFCO0FBQzdDLFNBQVFDLGtCQUFrQixFQUFFQyxtQkFBbUIsRUFBRUMsYUFBYSxFQUFxQkMscUJBQXFCLEVBQUVDLFdBQVcsUUFBTyxxQkFBcUI7QUFDakosU0FDRUMsbUJBQW1CLEVBQ25C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