oci-cdk-test 0.0.4 → 0.0.6

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.
@@ -287,18 +287,19 @@ try {
287
287
  console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
288
288
  process.exit(1);
289
289
  }
290
- const outputs = out.log_group_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null)) || out;
290
+ const outputs = out.log_group_id != null || out.execution_log_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null || v.logGroupId != null || v.executionLogId != null)) || out;
291
291
  function val(o, k) {
292
- const v = o[k];
293
- if (!v) return undefined;
294
- if (typeof v === 'string') return v;
295
- if (v && typeof v.value === 'string') return v.value;
292
+ let v = o[k];
293
+ if (v == null) v = o[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())];
294
+ if (v == null) return undefined;
295
+ if (typeof v === 'string') return v.trim();
296
+ if (typeof v === 'object' && v != null && 'value' in v) return String(v.value).trim();
296
297
  return undefined;
297
298
  }
298
- const logGroupId = val(outputs, 'log_group_id');
299
- const executionLogId = val(outputs, 'execution_log_id');
299
+ const logGroupId = val(outputs, 'log_group_id') || val(outputs, 'logGroupId');
300
+ const executionLogId = val(outputs, 'execution_log_id') || val(outputs, 'executionLogId');
300
301
  if (!logGroupId || !executionLogId) {
301
- console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
302
+ console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json. Keys found: ' + Object.keys(outputs).join(', '));
302
303
  process.exit(1);
303
304
  }
304
305
  const now = new Date();
@@ -552,4 +553,4 @@ async function getOciConfig() {
552
553
  backend: backendConfig,
553
554
  };
554
555
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUFpWEQsb0NBd0ZDO0FBOWhCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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QUFxQixFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7UUFDdkUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQzdCLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFNBQVM7UUFDckUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksU0FBUztRQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsSUFBSSxTQUFTO1FBQzNELGNBQWM7UUFDZCx1QkFBdUIsRUFBRSx1QkFBdUIsSUFBSSxTQUFTO1FBQzdELE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPQ0kgQ29uZmlndXJhdGlvblxuICpcbiAqIFNldCB0aGVzZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHVwZGF0ZSBkZWZhdWx0czpcbiAqIC0gT0NJX0NPTVBBUlRNRU5UX0lEXG4gKiAtIE9DSV9URU5BTkNZX0lEXG4gKiAtIE9DSV9SRUdJT05cbiAqIC0gT0NJX05BTUVTUEFDRSAoaWYgdW5zZXQsIG9idGFpbmVkIHZpYSBPQ0kgU0RLIGdldE5hbWVzcGFjZSlcbiAqIC0gT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgKGZvciBPQ0lSOyBtdXN0IGJlIG5vbi1yb290IGZvciBmdWxsIHN0YWNrKVxuICogLSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgKEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lOyBkZWZhdWx0IGVtcHR5KVxuICogLSBPQ0lfRlVOQ1RJT05fTkFNRSAoRnVuY3Rpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX0hBTkRMRVIgKEphdmEgRkRLIENNRCBoYW5kbGVyLCBlLmcuIGNvbS5leGFtcGxlLkhhbmRsZXI6OmhhbmRsZVJlcXVlc3Q7IGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEggKFBhdGggdG8gSkFSIG9yIHByb2plY3QgZGlyIGZvciBmdW5jdGlvbiBpbWFnZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX01FTU9SWV9NQiAoZnVuY3Rpb24gbWVtb3J5IGluIE1COyBmcm9tIGZ1bmMueWFtbCBtZW1vcnkgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMgKGZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsgZnJvbSBmdW5jLnlhbWwgdGltZW91dCBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nIGZvciBmdW5jdGlvbiBjb25maWcvZW52OyBtZXJnZWQgd2l0aCBmdW5jLnlhbWwgY29uZmlnKVxuICogLSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gKHBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT047IGRlZmF1bHQgcHJvamVjdCByb290IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbilcbiAqIC0gT0NES19QUk9KRUNUX0RJUiAoc2V0IGJ5IG9jZGsgQ0xJIHRvIGNhbGxlciBjd2Q7IHVzZWQgdG8gZGlzY292ZXIgZnVuYy55YW1sIGFuZCB0YXJnZXQvKVxuICogLSBPQ0lfU1RBVEVfQlVDS0VUIChmb3IgcmVtb3RlIHN0YXRlKVxuICogLSBPQ0lfU1RBVEVfQkFDS0VORF9UWVBFIChvY2l8aHR0cHxsb2NhbClcbiAqXG4gKiBXaGVuIE9DREtfUFJPSkVDVF9ESVIgaXMgc2V0IChlLmcuIHJ1bm5pbmcgYG5weCBvY2RrIGRlcGxveWAgZnJvbSBhIEphdmEgcHJvamVjdCksIGNvbmZpZ1xuICogZGlzY292ZXJzIGVpdGhlciB0YXJnZXQvKi5qYXIgb3IgcG9tLnhtbCtzcmMvIChhbmQgb3B0aW9uYWxseSBmdW5jLnlhbWwgbmFtZSwgdmVyc2lvbiwgY21kL2hhbmRsZXIpLlxuICogTm8gRG9ja2VyZmlsZSBpcyByZXF1aXJlZOKAlHRoZSBzdGFjayBnZW5lcmF0ZXMgb25lIGluIGxvY2FsLWV4ZWMgKGV4Y2x1ZGluZyBub2RlX21vZHVsZXMgdmlhIC5kb2NrZXJpZ25vcmUpLFxuICogdGhlbiBidWlsZHMsIHRhZ3MgKGZyb20gZnVuYy55YW1sIHZlcnNpb24pLCBhbmQgcHVzaGVzIHRvIE9DSVIuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICdvY2ktY29tbW9uJztcbmltcG9ydCAqIGFzIG9iamVjdHN0b3JhZ2UgZnJvbSAnb2NpLW9iamVjdHN0b3JhZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUJhY2tlbmRDb25maWcge1xuICB0eXBlOiAnb2NpJyB8ICdodHRwJyB8ICdsb2NhbCc7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB1cGRhdGVNZXRob2Q/OiBzdHJpbmc7XG4gIGxvY2tBZGRyZXNzPzogc3RyaW5nO1xuICB1bmxvY2tBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUNvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIFBhdGggdG8gSkFSIG9yIERvY2tlcmZpbGUgY29udGV4dCBmb3IgZnVuY3Rpb24gaW1hZ2U7IGVtcHR5ID0gbm8gYnVpbGQvZGVwbG95LiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKGRpc2NvdmVyZWQ7IERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgY21kL2hhbmRsZXIgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVI7IGRlZmF1bHQgYmVsb3cpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyBhIHRoaW4gRG9ja2VyZmlsZSAoQ09QWSB0YXJnZXQvKi5qYXIgb25seSk7IGZ1bGwgTWF2ZW4gYnVpbGQgb25seSBpbiByZWRlcGxveTpmdW5jdGlvbi4gKi9cbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBvY2lyUmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzIpLiBGcm9tIGZ1bmMueWFtbCBtZW1vcnkgb3IgT0NJX0ZVTkNUSU9OX01FTU9SWV9NQi4gKi9cbiAgZnVuY3Rpb25NZW1vcnlNYj86IHN0cmluZztcbiAgLyoqIEZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoMeKAkzMwMCkuIEZyb20gZnVuYy55YW1sIHRpbWVvdXQgb3IgT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUy4gKi9cbiAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIGNvbmZpZy9lbnYga2V5LXZhbHVlLiBGcm9tIGZ1bmMueWFtbCBjb25maWcgb3IgT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nKS4gKi9cbiAgZnVuY3Rpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCB0byBBUEkgR2F0ZXdheSBkZXBsb3ltZW50IHNwZWMgSlNPTiAocm91dGVzKS4gVXNlIE9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTiBvciBkZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuY29uc3QgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04gPSBKU09OLnN0cmluZ2lmeShcbiAge1xuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnL3twYXRoKn0nLFxuICAgICAgICBtZXRob2RzOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgIGZ1bmN0aW9uSWQ6ICcke2Z1bmN0aW9uX2lkfScsXG4gICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IDMwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBudWxsLFxuICAyXG4pO1xuXG4vKiogT0NJUiBzaG9ydCByZWdpb24ga2V5cyAoZS5nLiBldS1mcmFua2Z1cnQtMSAtPiBmcmEpLiBVc2VkIHNvIGxvZ2luLCBidWlsZCwgcHVzaCBhbmQgZnVuY3Rpb24gaW1hZ2UgYWxsIHVzZSBzYW1lIHJlZ2lzdHJ5IGhvc3QuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX1RPX09DSVJfSE9TVDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2V1LWZyYW5rZnVydC0xJzogJ2ZyYScsICd1cy1waG9lbml4LTEnOiAncGh4JywgJ3VzLWFzaGJ1cm4tMSc6ICdpYWQnLCAndWstbG9uZG9uLTEnOiAnbGhyJyxcbiAgJ2FwLXRva3lvLTEnOiAnbnJ0JywgJ2FwLW11bWJhaS0xJzogJ2JvbScsICdhcC1zZW91bC0xJzogJ2ljbicsICdjYS10b3JvbnRvLTEnOiAneXl6JyxcbiAgJ3NhLXNhb3BhdWxvLTEnOiAnZ3J1JywgJ2FwLXN5ZG5leS0xJzogJ3N5ZCcsICdldS16dXJpY2gtMSc6ICd6cmgnLCAnbWUtZHViYWktMSc6ICdkeGInLFxuICAnYXAtb3Nha2EtMSc6ICdraXgnLCAnZXUtYW1zdGVyZGFtLTEnOiAnYW1zJywgJ2FwLXNpbmdhcG9yZS0xJzogJ3NpbicsICdhcC1oeWRlcmFiYWQtMSc6ICdoeWQnLFxuICAnZXUtbWlsYW4tMSc6ICdteHAnLCAnc2Etc2FudGlhZ28tMSc6ICdzY2wnLCAnYXAtbWVsYm91cm5lLTEnOiAnbWVsJywgJ2V1LXN0b2NraG9sbS0xJzogJ2FybicsXG4gICdtZS1qZWRkYWgtMSc6ICdqZWQnLCAnYWYtam9oYW5uZXNidXJnLTEnOiAnam5iJywgJ2lsLWplcnVzYWxlbS0xJzogJ3RsdicsICdteC1xdWVyZXRhcm8tMSc6ICdxcm8nLFxuICAnZXUtbWFyc2VpbGxlLTEnOiAnbXJzJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvY2lySG9zdEtleShyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBSRUdJT05fVE9fT0NJUl9IT1NUW3JlZ2lvbl0gPz8gcmVnaW9uO1xufVxuXG4vKiogRnVsbCBPQ0lSIGltYWdlIFVSTCBmb3IgdGhlIGZ1bmN0aW9uIChyZWdpc3RyeS9uYW1lc3BhY2UvcmVwbzp0YWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9jaUltYWdlVXJsKGNvbmZpZzogT2NpQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBgJHtvY2lySG9zdEtleShjb25maWcucmVnaW9uKX0ub2Npci5pb2A7XG4gIGNvbnN0IHJlcG8gPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IHRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgcmV0dXJuIGAke3JlZ2lzdHJ5fS8ke2NvbmZpZy5uYW1lc3BhY2V9LyR7cmVwb306JHt0YWd9YDtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBmdW5jdGlvbiBuYW1lIGZyb20gZnVuYy55YW1sIChPQ0kgRnVuY3Rpb25zIGZvcm1hdCkuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJuYW1lOlwiIGxpbmUsIHRyaW1tZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbmFtZTpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHJldHVybiBtWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY21kL2hhbmRsZXIgZnJvbSBmdW5jLnlhbWwgKE9DSS9GbiBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgXCJjbWQ6XCIgb3IgXCJoYW5kbGVyOlwiIGxpbmUsIHRyaW1tZWQ7IHVzZWQgYXMgRG9ja2VyIENNRCBmb3IgSmF2YSBGREsuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgY21kTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eXFxzKmNtZDpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGNtZE1hdGNoKSByZXR1cm4gY21kTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaGFuZGxlck1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypoYW5kbGVyOlxccypbXCInXT8oW15cIidcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAoaGFuZGxlck1hdGNoKSByZXR1cm4gaGFuZGxlck1hdGNoWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdmVyc2lvbiBmcm9tIGZ1bmMueWFtbCAodXNlZCBhcyBPQ0lSIGltYWdlIHRhZykuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJ2ZXJzaW9uOlwiIGxpbmUsIHRyaW1tZWQ7IHNhbml0aXplZCBmb3IgRG9ja2VyIHRhZyAoYS16QS1aMC05Xy4tKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxWZXJzaW9uKHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgICBjb25zdCBtID0gY29udGVudC5tYXRjaCgvXlxccyp2ZXJzaW9uOlxccypbXCInXT8oW15cIidcXHNcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCByYXcgPSBtWzFdLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0gcmF3LnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFZBTElEX01FTU9SWV9NQiA9IG5ldyBTZXQoWzEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzJdKTtcblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBtZW1vcnkgKE1CKSBmcm9tIGZ1bmMueWFtbC4gT0NJIGFsbG93cyAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIHZhbGlkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbWVtb3J5OlxccyooXFxkKylcXHMqJC9tKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChWQUxJRF9NRU1PUllfTUIuaGFzKG4pKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGltZW91dCAoc2Vjb25kcykgZnJvbSBmdW5jLnlhbWwuIE9DSSBtYXggaXMgMzAwLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIGluIHJhbmdlIDHigJMzMDA7IG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVGltZW91dChwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdGltZW91dDpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAobiA+PSAxICYmIG4gPD0gMzAwKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY29uZmlnIChrZXktdmFsdWUgZW52KSBmcm9tIGZ1bmMueWFtbC4gRXhwZWN0cyBhIHRvcC1sZXZlbCBcImNvbmZpZzpcIiBibG9jayB3aXRoIGtleTogdmFsdWUgbGluZXMuXG4gKiBSZXR1cm5zIGEgcmVjb3JkIG9mIHN0cmluZyBrZXlzIGFuZCBzdHJpbmcgdmFsdWVzOyBlbXB0eSBpZiBub25lIG9yIHBhcnNlIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Db25maWcgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnY29uZmlnOicgfHwgL15jb25maWdcXHMqOlxccyokLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIGluQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5Db25maWcpIHtcbiAgICAgICAgaWYgKHRyaW1tZWQgIT09ICcnICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSAmJiAhbGluZS5zdGFydHNXaXRoKCdcXHQnKSkgYnJlYWs7XG4gICAgICAgIGNvbnN0IGt2ID0gbGluZS5tYXRjaCgvXlxccysoW2EtekEtWl9dW2EtekEtWjAtOV8tXSopXFxzKjpcXHMqKC4qKSQvKTtcbiAgICAgICAgaWYgKGt2KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga3ZbMV0udHJpbSgpO1xuICAgICAgICAgIGxldCB2YWwgPSBrdlsyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCh2YWwuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWwuZW5kc1dpdGgoJ1wiJykpIHx8ICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA/IGNvbmZpZyA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogRW5zdXJlIG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwLCBERUZBVUxUX0FQSUdXX0RFUExPWU1FTlRfSlNPTiwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuY29uc3QgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCA9IGAjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIFRhaWwgT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9ncy4gR2VuZXJhdGVkIGJ5IE9DREsuXG4gKiBSdW4gZnJvbSBwcm9qZWN0IHJvb3QgYWZ0ZXIgZGVwbG95LiBSZXF1aXJlczogT0NJIENMSSwgT0NJX0NPTVBBUlRNRU5UX0lELCBhbmQgLm9jZGstb3V0cHV0cy5qc29uIChjcmVhdGVkIG9uIGRlcGxveSkuXG4gKi9cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IHNwYXduU3luYyB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuXG5jb25zdCBkaXIgPSBwcm9jZXNzLmVudi5PQ0RLX1BST0pFQ1RfRElSIHx8IF9fZGlybmFtZTtcbmNvbnN0IG91dHB1dHNQYXRoID0gcGF0aC5qb2luKGRpciwgJy5vY2RrLW91dHB1dHMuanNvbicpO1xuaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dHNQYXRoKSkge1xuICBjb25zb2xlLmVycm9yKCdSdW4gZGVwbG95IGZpcnN0IHRvIGNyZWF0ZSAub2Nkay1vdXRwdXRzLmpzb24gaW4gdGhlIHByb2plY3Qgcm9vdC4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3QgY29tcElkID0gcHJvY2Vzcy5lbnYuT0NJX0NPTVBBUlRNRU5UX0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9PQ0lEO1xuaWYgKCFjb21wSWQpIHtcbiAgY29uc29sZS5lcnJvcignU2V0IE9DSV9DT01QQVJUTUVOVF9JRCAob3IgT0NJX0NPTVBBUlRNRU5UX09DSUQpLicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5sZXQgb3V0O1xudHJ5IHtcbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKG91dHB1dHNQYXRoLCAndXRmOCcpLnJlcGxhY2UoL15cXHVGRUZGLywgJycpLnRyaW0oKTtcbiAgY29uc3QgZmlyc3QgPSByYXcuaW5kZXhPZigneycpO1xuICBjb25zdCBsYXN0ID0gcmF3Lmxhc3RJbmRleE9mKCd9Jyk7XG4gIGlmIChmaXJzdCA9PT0gLTEgfHwgbGFzdCA8PSBmaXJzdCkgdGhyb3cgbmV3IEVycm9yKCdObyBKU09OJyk7XG4gIG91dCA9IEpTT04ucGFyc2UocmF3LnNsaWNlKGZpcnN0LCBsYXN0ICsgMSkpO1xufSBjYXRjaCAoZSkge1xuICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgLm9jZGstb3V0cHV0cy5qc29uLiBSdW4gZGVwbG95IGZpcnN0LicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5jb25zdCBvdXRwdXRzID0gb3V0LmxvZ19ncm91cF9pZCAhPSBudWxsID8gb3V0IDogT2JqZWN0LnZhbHVlcyhvdXQpLmZpbmQoKHYpID0+IHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsKSkgfHwgb3V0O1xuZnVuY3Rpb24gdmFsKG8sIGspIHtcbiAgY29uc3QgdiA9IG9ba107XG4gIGlmICghdikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgcmV0dXJuIHY7XG4gIGlmICh2ICYmIHR5cGVvZiB2LnZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHYudmFsdWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5jb25zdCBsb2dHcm91cElkID0gdmFsKG91dHB1dHMsICdsb2dfZ3JvdXBfaWQnKTtcbmNvbnN0IGV4ZWN1dGlvbkxvZ0lkID0gdmFsKG91dHB1dHMsICdleGVjdXRpb25fbG9nX2lkJyk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ2xvZ19ncm91cF9pZCBvciBleGVjdXRpb25fbG9nX2lkIG1pc3NpbmcgaW4gLm9jZGstb3V0cHV0cy5qc29uJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5jb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAqIDYwICogMTAwMCk7XG5jb25zdCB0aW1lU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpO1xuY29uc3QgdGltZUVuZCA9IG5vdy50b0lTT1N0cmluZygpO1xuY29uc3Qgc2NvcGUgPSBjb21wSWQgKyAnLycgKyBsb2dHcm91cElkICsgJy8nICsgZXhlY3V0aW9uTG9nSWQ7XG5jb25zdCBxdWVyeSA9ICdzZWFyY2ggXCInICsgc2NvcGUgKyAnXCIgfCBzb3J0IGJ5IGRhdGV0aW1lIGRlc2MgfCBsaW1pdCA1MCc7XG5jb25zdCByID0gc3Bhd25TeW5jKCdvY2knLCBbJ2xvZ2dpbmctc2VhcmNoJywgJ3NlYXJjaC1sb2dzJywgJy0tc2VhcmNoLXF1ZXJ5JywgcXVlcnksICctLXRpbWUtc3RhcnQnLCB0aW1lU3RhcnQsICctLXRpbWUtZW5kJywgdGltZUVuZF0sIHsgc3RkaW86ICdpbmhlcml0Jywgc2hlbGw6IHRydWUgfSk7XG5wcm9jZXNzLmV4aXQoci5zdGF0dXMgPz8gMSk7XG5gO1xuXG4vKiogRW5zdXJlIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhaWwtZnVuY3Rpb24tbG9ncy5qcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHAsIFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQsICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbi8qKiBSZWFkIHRlbmFuY3kgYW5kIHJlZ2lvbiBmcm9tIE9DSSBDTEkgY29uZmlnLiBEZWZhdWx0IGZpbGU6IH4vLm9jaS9jb25maWcsIGRlZmF1bHQgcHJvZmlsZTogREVGQVVMVC4gKi9cbmZ1bmN0aW9uIHJlYWRUZW5hbmN5QW5kUmVnaW9uRnJvbUNsaUNvbmZpZygpOiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSByZXR1cm4ge307XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Qcm9maWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0OiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIGluUHJvZmlsZSA9IHRyaW1tZWQuc2xpY2UoMSwgLTEpID09PSBwcm9maWxlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Qcm9maWxlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkgPT09ICd0ZW5hbmN5JykgcmVzdWx0LnRlbmFuY3kgPSB2YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09ICdyZWdpb24nKSByZXN1bHQucmVnaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogR2V0IG9iamVjdCBzdG9yYWdlIG5hbWVzcGFjZSB2aWEgT0NJIFNESyAoc2FtZSBhcyBcIm9jaSBvcyBucyBnZXRcIikuIFVzZXMgfi8ub2NpL2NvbmZpZywgREVGQVVMVCBwcm9maWxlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY29tbW9uLkNvbmZpZ0ZpbGVBdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcihjb25maWdQYXRoLCBwcm9maWxlKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgb2JqZWN0c3RvcmFnZS5PYmplY3RTdG9yYWdlQ2xpZW50KHsgYXV0aGVudGljYXRpb25EZXRhaWxzUHJvdmlkZXI6IHByb3ZpZGVyIH0pO1xuICAgIGNsaWVudC5yZWdpb25JZCA9IHJlZ2lvbjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXROYW1lc3BhY2Uoe1xuICAgICAgY29tcGFydG1lbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UudmFsdWU/LnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYSBKQVIgdW5kZXIgdGFyZ2V0LyAocHJlZmVyIG9uZSBtYXRjaGluZyBuYW1lLCBlbHNlIGZpcnN0IC5qYXIpLlxuICovXG5mdW5jdGlvbiBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpcjogc3RyaW5nLCBmdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhcmdldCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldERpcik7XG4gICAgY29uc3QgamFycyA9IGZpbGVzLmZpbHRlcigoZikgPT4gZi5lbmRzV2l0aCgnLmphcicpICYmICFmLmVuZHNXaXRoKCctc291cmNlcy5qYXInKSk7XG4gICAgaWYgKGphcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gamFycy5maW5kKChqKSA9PiBqLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIGphcnNbMF0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIHByb2plY3QgaGFzIHBvbS54bWwgYW5kIHNyYy8gKE1hdmVuIHNvdXJjZSBsYXlvdXQgZm9yIGJ1aWxkLWZyb20tc291cmNlIERvY2tlcmZpbGUpLiAqL1xuZnVuY3Rpb24gaGFzUG9tQW5kU3JjKHByb2plY3REaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwb20gPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3BvbS54bWwnKTtcbiAgY29uc3Qgc3JjID0gcGF0aC5qb2luKHByb2plY3REaXIsICdzcmMnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwb20pICYmIGZzLmV4aXN0c1N5bmMoc3JjKSAmJiBmcy5zdGF0U3luYyhzcmMpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpOiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25BcHBOYW1lPzogc3RyaW5nO1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgbWVtb3J5TWI/OiBudW1iZXI7XG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGxldCBwcm9qZWN0RGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUj8udHJpbSgpO1xuICBpZiAoIXByb2plY3REaXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLm9jZGstcHJvamVjdC1kaXInKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBwcm9qZWN0RGlyID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4JykudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG4gIGlmICghcHJvamVjdERpciAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5zdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpID8gcCA6IHBhdGguZGlybmFtZShwKTtcbiAgfVxuICBpZiAoIXByb2plY3REaXIpIHByb2plY3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBwcm9qZWN0RGlyID0gcHJvamVjdERpciA/IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSA6ICcnO1xuICBpZiAoIXByb2plY3REaXIgfHwgIWZzLmV4aXN0c1N5bmMocHJvamVjdERpcikpIHJldHVybiB7fTtcblxuICBjb25zdCBuYW1lRnJvbVlhbWwgPSBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcik7XG4gIGNvbnN0IGphclBhdGggPSBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpciwgbmFtZUZyb21ZYW1sIHx8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhhc1NvdXJjZSA9IGhhc1BvbUFuZFNyYyhwcm9qZWN0RGlyKTtcbiAgaWYgKCFqYXJQYXRoICYmICFoYXNTb3VyY2UpIHJldHVybiB7fTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTkFNRT8udHJpbSgpIHx8IG5hbWVGcm9tWWFtbCB8fCBwYXRoLmJhc2VuYW1lKHByb2plY3REaXIpIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBnZXRGdW5jWWFtbFZlcnNpb24ocHJvamVjdERpcik7XG4gIGNvbnN0IGhhbmRsZXIgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSEFORExFUj8udHJpbSgpIHx8IGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyKTtcbiAgY29uc3QgdXNlVGhpbkRvY2tlcmZpbGUgPSAhIWphclBhdGg7XG4gIGNvbnN0IG1lbW9yeU1iID0gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcik7XG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gZ2V0RnVuY1lhbWxUaW1lb3V0KHByb2plY3REaXIpO1xuICBjb25zdCBjb25maWcgPSBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRT8udHJpbSgpIHx8IGZ1bmN0aW9uTmFtZSxcbiAgICBkb2NrZXJDb250ZXh0UGF0aDogcGF0aC5yZXNvbHZlKHByb2plY3REaXIpLFxuICAgIGltYWdlVGFnOiBpbWFnZVRhZyB8fCB1bmRlZmluZWQsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgbWVtb3J5TWIsXG4gICAgdGltZW91dFNlY29uZHMsXG4gICAgY29uZmlnLFxuICB9O1xufVxuXG5jb25zdCBiYWNrZW5kVHlwZSA9IChwcm9jZXNzLmVudi5PQ0lfU1RBVEVfQkFDS0VORF9UWVBFIHx8ICdsb2NhbCcpIGFzICdvY2knIHwgJ2h0dHAnIHwgJ2xvY2FsJztcblxuY29uc3QgYmFja2VuZENvbmZpZzogT2NpQmFja2VuZENvbmZpZyB8IHVuZGVmaW5lZCA9IGJhY2tlbmRUeXBlID09PSAnbG9jYWwnXG4gID8gdW5kZWZpbmVkXG4gIDogYmFja2VuZFR5cGUgPT09ICdvY2knXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdvY2knLFxuICAgICAgICBidWNrZXQ6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CVUNLRVQgfHwgJ3RmLXN0YXRlJyxcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfS0VZIHx8ICdmdW5jdGlvbi1zdGFjay90ZXJyYWZvcm0udGZzdGF0ZScsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgYWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfQUREUkVTUyB8fCAnJyxcbiAgICAgICAgdXBkYXRlTWV0aG9kOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VUERBVEVfTUVUSE9EIHx8ICdQVVQnLFxuICAgICAgICBsb2NrQWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfTE9DS19BRERSRVNTLFxuICAgICAgICB1bmxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VTkxPQ0tfQUREUkVTUyxcbiAgICAgIH07XG5cbi8qKlxuICogTG9hZCBPQ0kgY29uZmlnIGZyb20gZW52IGFuZCBDTEkgY29uZmlnLiBXaGVuIE9DSV9OQU1FU1BBQ0UgaXMgdW5zZXQsIGZldGNoZXMgaXQgdmlhIE9DSSBTREsgKGdldE5hbWVzcGFjZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPY2lDb25maWcoKTogUHJvbWlzZTxPY2lDb25maWc+IHtcbiAgY29uc3QgY2xpQ29uZmlnID0gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk7XG4gIGNvbnN0IGNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfSUQ/LnRyaW0oKSB8fCAnb2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uJztcbiAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IGNvbXBhcnRtZW50SWQ7XG4gIGNvbnN0IHRlbmFuY3lJZCA9IHByb2Nlc3MuZW52Lk9DSV9URU5BTkNZX0lEPy50cmltKCkgfHwgY2xpQ29uZmlnLnRlbmFuY3k/LnRyaW0oKSB8fCAnb2NpZDEudGVuYW5jeS5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5PQ0lfUkVHSU9OPy50cmltKCkgfHwgY2xpQ29uZmlnLnJlZ2lvbj8udHJpbSgpIHx8ICdldS1mcmFua2Z1cnQtMSc7XG5cbiAgaWYgKCFvY2lyQ29tcGFydG1lbnRJZCB8fCBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgY29uc29sZS53YXJuKCfimqDvuI8gIFdBUk5JTkc6IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIG5vdCBzZXQgb3Igc2V0IHRvIHJvb3QgY29tcGFydG1lbnQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBQbGVhc2Ugc2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELicpO1xuICAgIGNvbnNvbGUud2FybignICAgRXhhbXBsZTogZXhwb3J0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPVwib2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uXCInKTtcbiAgfVxuXG4gIGxldCBuYW1lc3BhY2UgPSBwcm9jZXNzLmVudi5PQ0lfTkFNRVNQQUNFPy50cmltKCk7XG4gIGlmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZSA9PT0gJ3lvdXItbmFtZXNwYWNlJykge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkLCByZWdpb24pO1xuICAgIGlmIChyZXNvbHZlZCkgbmFtZXNwYWNlID0gcmVzb2x2ZWQ7XG4gICAgZWxzZSBpZiAoIW5hbWVzcGFjZSkgbmFtZXNwYWNlID0gJ3lvdXItbmFtZXNwYWNlJztcbiAgICBpZiAobmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgT0NJX05BTUVTUEFDRSBub3Qgc2V0IGFuZCBTREsgY291bGQgbm90IHJlc29sdmUgaXQuIFNldCBPQ0lfTkFNRVNQQUNFIG9yIHJ1biBcIm9jaSBzZXR1cCBjb25maWdcIi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXNjb3ZlcmVkID0gZGlzY292ZXJGcm9tRnVuY1lhbWxBbmRUYXJnZXQoKTtcblxuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuXG4gIGxldCBkb2NrZXJDb250ZXh0UGF0aCA9IGRpc2NvdmVyZWQuZG9ja2VyQ29udGV4dFBhdGg7XG4gIGlmICghZG9ja2VyQ29udGV4dFBhdGggJiYgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkpIHtcbiAgICBjb25zdCBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSC50cmltKCkpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBkb2NrZXJDb250ZXh0UGF0aCA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZGlzY292ZXJlZC5oYW5kbGVyO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9IGRpc2NvdmVyZWQudXNlVGhpbkRvY2tlcmZpbGUgPz8gZmFsc2U7XG5cbiAgY29uc3QgbWVtb3J5RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX01FTU9SWV9NQj8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvbk1lbW9yeU1iID0gbWVtb3J5RW52XG4gICAgPyBTdHJpbmcocGFyc2VJbnQobWVtb3J5RW52LCAxMCkpXG4gICAgOiAoZGlzY292ZXJlZC5tZW1vcnlNYiAhPSBudWxsID8gU3RyaW5nKGRpc2NvdmVyZWQubWVtb3J5TWIpIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCB0aW1lb3V0RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUz8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvblRpbWVvdXRTZWNvbmRzID0gdGltZW91dEVudlxuICAgID8gcGFyc2VJbnQodGltZW91dEVudiwgMTApXG4gICAgOiBkaXNjb3ZlcmVkLnRpbWVvdXRTZWNvbmRzO1xuXG4gIGxldCBmdW5jdGlvbkNvbmZpZyA9IGRpc2NvdmVyZWQuY29uZmlnO1xuICBjb25zdCBjb25maWdFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fQ09ORklHPy50cmltKCk7XG4gIGlmIChjb25maWdFbnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb25maWdFbnYpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBmdW5jdGlvbkNvbmZpZyA9IHsgLi4uZnVuY3Rpb25Db25maWcsIC4uLnBhcnNlZCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGludmFsaWQgSlNPTlxuICAgIH1cbiAgfVxuICBpZiAoZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25Db25maWcpLmxlbmd0aCA9PT0gMCkgZnVuY3Rpb25Db25maWcgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYXBpR3dEZXBsb3ltZW50SnNvbkVudiA9IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTj8udHJpbSgpO1xuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCA9IGFwaUd3RGVwbG95bWVudEpzb25FbnZcbiAgICA/IHBhdGgucmVzb2x2ZShhcGlHd0RlcGxveW1lbnRKc29uRW52KVxuICAgIDogZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgID8gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24oZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgZW5zdXJlVGFpbEZ1bmN0aW9uTG9nc1NjcmlwdChkb2NrZXJDb250ZXh0UGF0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbXBhcnRtZW50SWQsXG4gICAgb2NpckNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICB0ZW5hbmN5SWQsXG4gICAgcmVnaW9uLFxuICAgIG5hbWVzcGFjZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRSA/PyBkaXNjb3ZlcmVkLmZ1bmN0aW9uQXBwTmFtZSA/PyAnJyxcbiAgICBmdW5jdGlvbk5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25OYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uSmFyUGF0aDogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBkb2NrZXJDb250ZXh0UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgaW1hZ2VUYWcsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgb2NpclJlcG9zaXRvcnlOYW1lOiBwcm9jZXNzLmVudi5PQ0lfT0NJUl9SRVBPU0lUT1JZX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uTWVtb3J5TWI6IGZ1bmN0aW9uTWVtb3J5TWIgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uVGltZW91dFNlY29uZHM6IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uQ29uZmlnLFxuICAgIGFwaUd3RGVwbG95bWVudEpzb25QYXRoOiBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCB8fCB1bmRlZmluZWQsXG4gICAgYmFja2VuZDogYmFja2VuZENvbmZpZyxcbiAgfTtcbn1cbiJdfQ==
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUFrWEQsb0NBd0ZDO0FBL2hCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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QkFBcUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTO1FBQ3ZFLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFNBQVM7UUFDakQsUUFBUTtRQUNSLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUztRQUM3QixpQkFBaUI7UUFDakIsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxTQUFTO1FBQ3JFLGdCQUFnQixFQUFFLGdCQUFnQixJQUFJLFNBQVM7UUFDL0Msc0JBQXNCLEVBQUUsc0JBQXNCLElBQUksU0FBUztRQUMzRCxjQUFjO1FBQ2QsdUJBQXVCLEVBQUUsdUJBQXVCLElBQUksU0FBUztRQUM3RCxPQUFPLEVBQUUsYUFBYTtLQUN2QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT0NJIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBTZXQgdGhlc2UgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciB1cGRhdGUgZGVmYXVsdHM6XG4gKiAtIE9DSV9DT01QQVJUTUVOVF9JRFxuICogLSBPQ0lfVEVOQU5DWV9JRFxuICogLSBPQ0lfUkVHSU9OXG4gKiAtIE9DSV9OQU1FU1BBQ0UgKGlmIHVuc2V0LCBvYnRhaW5lZCB2aWEgT0NJIFNESyBnZXROYW1lc3BhY2UpXG4gKiAtIE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIChmb3IgT0NJUjsgbXVzdCBiZSBub24tcm9vdCBmb3IgZnVsbCBzdGFjaylcbiAqIC0gT0NJX0ZVTkNUSU9OX0FQUF9OQU1FIChGdW5jdGlvbnMgYXBwbGljYXRpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX05BTUUgKEZ1bmN0aW9uIG5hbWU7IGRlZmF1bHQgZW1wdHkpXG4gKiAtIE9DSV9GVU5DVElPTl9IQU5ETEVSIChKYXZhIEZESyBDTUQgaGFuZGxlciwgZS5nLiBjb20uZXhhbXBsZS5IYW5kbGVyOjpoYW5kbGVSZXF1ZXN0OyBmcm9tIGZ1bmMueWFtbCBjbWQvaGFuZGxlciBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0pBUl9QQVRIIChQYXRoIHRvIEpBUiBvciBwcm9qZWN0IGRpciBmb3IgZnVuY3Rpb24gaW1hZ2U7IGRlZmF1bHQgZW1wdHkpXG4gKiAtIE9DSV9GVU5DVElPTl9NRU1PUllfTUIgKGZ1bmN0aW9uIG1lbW9yeSBpbiBNQjsgZnJvbSBmdW5jLnlhbWwgbWVtb3J5IGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTIChmdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHM7IGZyb20gZnVuYy55YW1sIHRpbWVvdXQgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9DT05GSUcgKEpTT04gb2JqZWN0IHN0cmluZyBmb3IgZnVuY3Rpb24gY29uZmlnL2VudjsgbWVyZ2VkIHdpdGggZnVuYy55YW1sIGNvbmZpZylcbiAqIC0gT0NJX0FQSUdBVEVXQVlfREVQTE9ZTUVOVF9KU09OIChwYXRoIHRvIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgc3BlYyBKU09OOyBkZWZhdWx0IHByb2plY3Qgcm9vdCBvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24pXG4gKiAtIE9DREtfUFJPSkVDVF9ESVIgKHNldCBieSBvY2RrIENMSSB0byBjYWxsZXIgY3dkOyB1c2VkIHRvIGRpc2NvdmVyIGZ1bmMueWFtbCBhbmQgdGFyZ2V0LylcbiAqIC0gT0NJX1NUQVRFX0JVQ0tFVCAoZm9yIHJlbW90ZSBzdGF0ZSlcbiAqIC0gT0NJX1NUQVRFX0JBQ0tFTkRfVFlQRSAob2NpfGh0dHB8bG9jYWwpXG4gKlxuICogV2hlbiBPQ0RLX1BST0pFQ1RfRElSIGlzIHNldCAoZS5nLiBydW5uaW5nIGBucHggb2NkayBkZXBsb3lgIGZyb20gYSBKYXZhIHByb2plY3QpLCBjb25maWdcbiAqIGRpc2NvdmVycyBlaXRoZXIgdGFyZ2V0LyouamFyIG9yIHBvbS54bWwrc3JjLyAoYW5kIG9wdGlvbmFsbHkgZnVuYy55YW1sIG5hbWUsIHZlcnNpb24sIGNtZC9oYW5kbGVyKS5cbiAqIE5vIERvY2tlcmZpbGUgaXMgcmVxdWlyZWTigJR0aGUgc3RhY2sgZ2VuZXJhdGVzIG9uZSBpbiBsb2NhbC1leGVjIChleGNsdWRpbmcgbm9kZV9tb2R1bGVzIHZpYSAuZG9ja2VyaWdub3JlKSxcbiAqIHRoZW4gYnVpbGRzLCB0YWdzIChmcm9tIGZ1bmMueWFtbCB2ZXJzaW9uKSwgYW5kIHB1c2hlcyB0byBPQ0lSLlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnb2NpLWNvbW1vbic7XG5pbXBvcnQgKiBhcyBvYmplY3RzdG9yYWdlIGZyb20gJ29jaS1vYmplY3RzdG9yYWdlJztcblxuZXhwb3J0IGludGVyZmFjZSBPY2lCYWNrZW5kQ29uZmlnIHtcbiAgdHlwZTogJ29jaScgfCAnaHR0cCcgfCAnbG9jYWwnO1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdXBkYXRlTWV0aG9kPzogc3RyaW5nO1xuICBsb2NrQWRkcmVzcz86IHN0cmluZztcbiAgdW5sb2NrQWRkcmVzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPY2lDb25maWcge1xuICBjb21wYXJ0bWVudElkOiBzdHJpbmc7XG4gIG9jaXJDb21wYXJ0bWVudElkPzogc3RyaW5nO1xuICB0ZW5hbmN5SWQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBmdW5jdGlvbkFwcE5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIEpBUiBvciBEb2NrZXJmaWxlIGNvbnRleHQgZm9yIGZ1bmN0aW9uIGltYWdlOyBlbXB0eSA9IG5vIGJ1aWxkL2RlcGxveS4gKi9cbiAgZnVuY3Rpb25KYXJQYXRoPzogc3RyaW5nO1xuICAvKiogUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YXJnZXQvIChkaXNjb3ZlcmVkOyBEb2NrZXJmaWxlIGlzIGdlbmVyYXRlZCBpbiBsb2NhbC1leGVjKS4gKi9cbiAgZG9ja2VyQ29udGV4dFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSB0YWcgZm9yIE9DSVIgKGZyb20gZnVuYy55YW1sIHZlcnNpb24gb3IgT0NJX0lNQUdFX1RBRzsgZGVmYXVsdCAnbGF0ZXN0JykuICovXG4gIGltYWdlVGFnPzogc3RyaW5nO1xuICAvKiogSmF2YSBGREsgQ01EIGhhbmRsZXIgKGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIG9yIE9DSV9GVU5DVElPTl9IQU5ETEVSOyBkZWZhdWx0IGJlbG93KS4gKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgLyoqIFdoZW4gdHJ1ZSwgZGVwbG95IHVzZXMgYSB0aGluIERvY2tlcmZpbGUgKENPUFkgdGFyZ2V0LyouamFyIG9ubHkpOyBmdWxsIE1hdmVuIGJ1aWxkIG9ubHkgaW4gcmVkZXBsb3k6ZnVuY3Rpb24uICovXG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgb2NpclJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuICAvKiogRnVuY3Rpb24gbWVtb3J5IGluIE1CICgxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyKS4gRnJvbSBmdW5jLnlhbWwgbWVtb3J5IG9yIE9DSV9GVU5DVElPTl9NRU1PUllfTUIuICovXG4gIGZ1bmN0aW9uTWVtb3J5TWI/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHMgKDHigJMzMDApLiBGcm9tIGZ1bmMueWFtbCB0aW1lb3V0IG9yIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMuICovXG4gIGZ1bmN0aW9uVGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKiBGdW5jdGlvbiBjb25maWcvZW52IGtleS12YWx1ZS4gRnJvbSBmdW5jLnlhbWwgY29uZmlnIG9yIE9DSV9GVU5DVElPTl9DT05GSUcgKEpTT04gb2JqZWN0IHN0cmluZykuICovXG4gIGZ1bmN0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT04gKHJvdXRlcykuIFVzZSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gb3IgZGVmYXVsdCBvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24gaW4gcHJvamVjdCByb290LiAqL1xuICBhcGlHd0RlcGxveW1lbnRKc29uUGF0aD86IHN0cmluZztcbiAgYmFja2VuZD86IE9jaUJhY2tlbmRDb25maWc7XG59XG5cbmNvbnN0IERFRkFVTFRfQVBJR1dfREVQTE9ZTUVOVF9KU09OID0gSlNPTi5zdHJpbmdpZnkoXG4gIHtcbiAgICByb3V0ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy97cGF0aCp9JyxcbiAgICAgICAgbWV0aG9kczogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ10sXG4gICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICB0eXBlOiAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICBmdW5jdGlvbklkOiAnJHtmdW5jdGlvbl9pZH0nLFxuICAgICAgICAgIHJlYWRUaW1lb3V0SW5TZWNvbmRzOiAzMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgbnVsbCxcbiAgMlxuKTtcblxuLyoqIE9DSVIgc2hvcnQgcmVnaW9uIGtleXMgKGUuZy4gZXUtZnJhbmtmdXJ0LTEgLT4gZnJhKS4gVXNlZCBzbyBsb2dpbiwgYnVpbGQsIHB1c2ggYW5kIGZ1bmN0aW9uIGltYWdlIGFsbCB1c2Ugc2FtZSByZWdpc3RyeSBob3N0LiAqL1xuZXhwb3J0IGNvbnN0IFJFR0lPTl9UT19PQ0lSX0hPU1Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdldS1mcmFua2Z1cnQtMSc6ICdmcmEnLCAndXMtcGhvZW5peC0xJzogJ3BoeCcsICd1cy1hc2hidXJuLTEnOiAnaWFkJywgJ3VrLWxvbmRvbi0xJzogJ2xocicsXG4gICdhcC10b2t5by0xJzogJ25ydCcsICdhcC1tdW1iYWktMSc6ICdib20nLCAnYXAtc2VvdWwtMSc6ICdpY24nLCAnY2EtdG9yb250by0xJzogJ3l5eicsXG4gICdzYS1zYW9wYXVsby0xJzogJ2dydScsICdhcC1zeWRuZXktMSc6ICdzeWQnLCAnZXUtenVyaWNoLTEnOiAnenJoJywgJ21lLWR1YmFpLTEnOiAnZHhiJyxcbiAgJ2FwLW9zYWthLTEnOiAna2l4JywgJ2V1LWFtc3RlcmRhbS0xJzogJ2FtcycsICdhcC1zaW5nYXBvcmUtMSc6ICdzaW4nLCAnYXAtaHlkZXJhYmFkLTEnOiAnaHlkJyxcbiAgJ2V1LW1pbGFuLTEnOiAnbXhwJywgJ3NhLXNhbnRpYWdvLTEnOiAnc2NsJywgJ2FwLW1lbGJvdXJuZS0xJzogJ21lbCcsICdldS1zdG9ja2hvbG0tMSc6ICdhcm4nLFxuICAnbWUtamVkZGFoLTEnOiAnamVkJywgJ2FmLWpvaGFubmVzYnVyZy0xJzogJ2puYicsICdpbC1qZXJ1c2FsZW0tMSc6ICd0bHYnLCAnbXgtcXVlcmV0YXJvLTEnOiAncXJvJyxcbiAgJ2V1LW1hcnNlaWxsZS0xJzogJ21ycycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb2Npckhvc3RLZXkocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gUkVHSU9OX1RPX09DSVJfSE9TVFtyZWdpb25dID8/IHJlZ2lvbjtcbn1cblxuLyoqIEZ1bGwgT0NJUiBpbWFnZSBVUkwgZm9yIHRoZSBmdW5jdGlvbiAocmVnaXN0cnkvbmFtZXNwYWNlL3JlcG86dGFnKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPY2lJbWFnZVVybChjb25maWc6IE9jaUNvbmZpZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gYCR7b2Npckhvc3RLZXkoY29uZmlnLnJlZ2lvbil9Lm9jaXIuaW9gO1xuICBjb25zdCByZXBvID0gY29uZmlnLm9jaXJSZXBvc2l0b3J5TmFtZSB8fCBjb25maWcuZnVuY3Rpb25OYW1lIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCB0YWcgPSBjb25maWcuaW1hZ2VUYWcgfHwgJ2xhdGVzdCc7XG4gIHJldHVybiBgJHtyZWdpc3RyeX0vJHtjb25maWcubmFtZXNwYWNlfS8ke3JlcG99OiR7dGFnfWA7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgZnVuY3Rpb24gbmFtZSBmcm9tIGZ1bmMueWFtbCAoT0NJIEZ1bmN0aW9ucyBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IFwibmFtZTpcIiBsaW5lLCB0cmltbWVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IG0gPSBjb250ZW50Lm1hdGNoKC9eXFxzKm5hbWU6XFxzKltcIiddPyhbXlwiJ1xcc1xcbl0rKVtcIiddPy9tKTtcbiAgICAgIGlmIChtKSByZXR1cm4gbVsxXS50cmltKCk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIGNtZC9oYW5kbGVyIGZyb20gZnVuYy55YW1sIChPQ0kvRm4gZm9ybWF0KS5cbiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIFwiY21kOlwiIG9yIFwiaGFuZGxlcjpcIiBsaW5lLCB0cmltbWVkOyB1c2VkIGFzIERvY2tlciBDTUQgZm9yIEphdmEgRkRLLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbEhhbmRsZXIocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNtZE1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypjbWQ6XFxzKltcIiddPyhbXlwiJ1xcbl0rKVtcIiddPy9tKTtcbiAgICAgIGlmIChjbWRNYXRjaCkgcmV0dXJuIGNtZE1hdGNoWzFdLnRyaW0oKTtcbiAgICAgIGNvbnN0IGhhbmRsZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL15cXHMqaGFuZGxlcjpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGhhbmRsZXJNYXRjaCkgcmV0dXJuIGhhbmRsZXJNYXRjaFsxXS50cmltKCk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIHZlcnNpb24gZnJvbSBmdW5jLnlhbWwgKHVzZWQgYXMgT0NJUiBpbWFnZSB0YWcpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IFwidmVyc2lvbjpcIiBsaW5lLCB0cmltbWVkOyBzYW5pdGl6ZWQgZm9yIERvY2tlciB0YWcgKGEtekEtWjAtOV8uLSkuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVmVyc2lvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdmVyc2lvbjpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgY29uc3QgcmF3ID0gbVsxXS50cmltKCk7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHJhdy5yZXBsYWNlKC9bXmEtekEtWjAtOV8uLV0vZywgJy0nKS5yZXBsYWNlKC8tKy9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKTtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplZCB8fCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBWQUxJRF9NRU1PUllfTUIgPSBuZXcgU2V0KFsxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyXSk7XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgbWVtb3J5IChNQikgZnJvbSBmdW5jLnlhbWwuIE9DSSBhbGxvd3MgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgMzA3Mi5cbiAqIFJldHVybnMgdGhlIG51bWJlciBpZiBwcmVzZW50IGFuZCB2YWxpZDsgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcjogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IG0gPSBjb250ZW50Lm1hdGNoKC9eXFxzKm1lbW9yeTpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAoVkFMSURfTUVNT1JZX01CLmhhcyhuKSkgcmV0dXJuIG47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIHRpbWVvdXQgKHNlY29uZHMpIGZyb20gZnVuYy55YW1sLiBPQ0kgbWF4IGlzIDMwMC5cbiAqIFJldHVybnMgdGhlIG51bWJlciBpZiBwcmVzZW50IGFuZCBpbiByYW5nZSAx4oCTMzAwOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbFRpbWVvdXQocHJvamVjdERpcjogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IG0gPSBjb250ZW50Lm1hdGNoKC9eXFxzKnRpbWVvdXQ6XFxzKihcXGQrKVxccyokL20pO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KG1bMV0sIDEwKTtcbiAgICAgICAgaWYgKG4gPj0gMSAmJiBuIDw9IDMwMCkgcmV0dXJuIG47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIGNvbmZpZyAoa2V5LXZhbHVlIGVudikgZnJvbSBmdW5jLnlhbWwuIEV4cGVjdHMgYSB0b3AtbGV2ZWwgXCJjb25maWc6XCIgYmxvY2sgd2l0aCBrZXk6IHZhbHVlIGxpbmVzLlxuICogUmV0dXJucyBhIHJlY29yZCBvZiBzdHJpbmcga2V5cyBhbmQgc3RyaW5nIHZhbHVlczsgZW1wdHkgaWYgbm9uZSBvciBwYXJzZSBlcnJvci5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxDb25maWcocHJvamVjdERpcjogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhwKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgbGV0IGluQ29uZmlnID0gZmFsc2U7XG4gICAgY29uc3QgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZCA9PT0gJ2NvbmZpZzonIHx8IC9eY29uZmlnXFxzKjpcXHMqJC8udGVzdCh0cmltbWVkKSkge1xuICAgICAgICBpbkNvbmZpZyA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluQ29uZmlnKSB7XG4gICAgICAgIGlmICh0cmltbWVkICE9PSAnJyAmJiAhbGluZS5zdGFydHNXaXRoKCcgJykgJiYgIWxpbmUuc3RhcnRzV2l0aCgnXFx0JykpIGJyZWFrO1xuICAgICAgICBjb25zdCBrdiA9IGxpbmUubWF0Y2goL15cXHMrKFthLXpBLVpfXVthLXpBLVowLTlfLV0qKVxccyo6XFxzKiguKikkLyk7XG4gICAgICAgIGlmIChrdikge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGt2WzFdLnRyaW0oKTtcbiAgICAgICAgICBsZXQgdmFsID0ga3ZbMl0udHJpbSgpO1xuICAgICAgICAgIGlmICgodmFsLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsLmVuZHNXaXRoKCdcIicpKSB8fCAodmFsLnN0YXJ0c1dpdGgoXCInXCIpICYmIHZhbC5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25maWdba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPyBjb25maWcgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIEVuc3VyZSBvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24gZXhpc3RzIGluIHByb2plY3REaXI7IHdyaXRlIGRlZmF1bHQgaWYgbWlzc2luZy4gUmV0dXJucyBwYXRoLiAqL1xuZnVuY3Rpb24gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24ocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnb2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uJyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhwKSkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMocCwgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04sICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbmNvbnN0IFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQgPSBgIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBUYWlsIE9DSSBGdW5jdGlvbnMgZXhlY3V0aW9uIGxvZ3MuIEdlbmVyYXRlZCBieSBPQ0RLLlxuICogUnVuIGZyb20gcHJvamVjdCByb290IGFmdGVyIGRlcGxveS4gUmVxdWlyZXM6IE9DSSBDTEksIE9DSV9DT01QQVJUTUVOVF9JRCwgYW5kIC5vY2RrLW91dHB1dHMuanNvbiAoY3JlYXRlZCBvbiBkZXBsb3kpLlxuICovXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBzcGF3blN5bmMgfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcblxuY29uc3QgZGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUiB8fCBfX2Rpcm5hbWU7XG5jb25zdCBvdXRwdXRzUGF0aCA9IHBhdGguam9pbihkaXIsICcub2Nkay1vdXRwdXRzLmpzb24nKTtcbmlmICghZnMuZXhpc3RzU3luYyhvdXRwdXRzUGF0aCkpIHtcbiAgY29uc29sZS5lcnJvcignUnVuIGRlcGxveSBmaXJzdCB0byBjcmVhdGUgLm9jZGstb3V0cHV0cy5qc29uIGluIHRoZSBwcm9qZWN0IHJvb3QuJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IGNvbXBJZCA9IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRCB8fCBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfT0NJRDtcbmlmICghY29tcElkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1NldCBPQ0lfQ09NUEFSVE1FTlRfSUQgKG9yIE9DSV9DT01QQVJUTUVOVF9PQ0lEKS4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxubGV0IG91dDtcbnRyeSB7XG4gIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhvdXRwdXRzUGF0aCwgJ3V0ZjgnKS5yZXBsYWNlKC9eXFx1RkVGRi8sICcnKS50cmltKCk7XG4gIGNvbnN0IGZpcnN0ID0gcmF3LmluZGV4T2YoJ3snKTtcbiAgY29uc3QgbGFzdCA9IHJhdy5sYXN0SW5kZXhPZignfScpO1xuICBpZiAoZmlyc3QgPT09IC0xIHx8IGxhc3QgPD0gZmlyc3QpIHRocm93IG5ldyBFcnJvcignTm8gSlNPTicpO1xuICBvdXQgPSBKU09OLnBhcnNlKHJhdy5zbGljZShmaXJzdCwgbGFzdCArIDEpKTtcbn0gY2F0Y2ggKGUpIHtcbiAgY29uc29sZS5lcnJvcignSW52YWxpZCBvciBtaXNzaW5nIC5vY2RrLW91dHB1dHMuanNvbi4gUnVuIGRlcGxveSBmaXJzdC4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3Qgb3V0cHV0cyA9IG91dC5sb2dfZ3JvdXBfaWQgIT0gbnVsbCB8fCBvdXQuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsID8gb3V0IDogT2JqZWN0LnZhbHVlcyhvdXQpLmZpbmQoKHYpID0+IHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsIHx8IHYubG9nR3JvdXBJZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uTG9nSWQgIT0gbnVsbCkpIHx8IG91dDtcbmZ1bmN0aW9uIHZhbChvLCBrKSB7XG4gIGxldCB2ID0gb1trXTtcbiAgaWYgKHYgPT0gbnVsbCkgdiA9IG9bay5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgYykgPT4gYy50b1VwcGVyQ2FzZSgpKV07XG4gIGlmICh2ID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHJldHVybiB2LnRyaW0oKTtcbiAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9IG51bGwgJiYgJ3ZhbHVlJyBpbiB2KSByZXR1cm4gU3RyaW5nKHYudmFsdWUpLnRyaW0oKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmNvbnN0IGxvZ0dyb3VwSWQgPSB2YWwob3V0cHV0cywgJ2xvZ19ncm91cF9pZCcpIHx8IHZhbChvdXRwdXRzLCAnbG9nR3JvdXBJZCcpO1xuY29uc3QgZXhlY3V0aW9uTG9nSWQgPSB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbl9sb2dfaWQnKSB8fCB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbkxvZ0lkJyk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ2xvZ19ncm91cF9pZCBvciBleGVjdXRpb25fbG9nX2lkIG1pc3NpbmcgaW4gLm9jZGstb3V0cHV0cy5qc29uLiBLZXlzIGZvdW5kOiAnICsgT2JqZWN0LmtleXMob3V0cHV0cykuam9pbignLCAnKSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5jb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAqIDYwICogMTAwMCk7XG5jb25zdCB0aW1lU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpO1xuY29uc3QgdGltZUVuZCA9IG5vdy50b0lTT1N0cmluZygpO1xuY29uc3Qgc2NvcGUgPSBjb21wSWQgKyAnLycgKyBsb2dHcm91cElkICsgJy8nICsgZXhlY3V0aW9uTG9nSWQ7XG5jb25zdCBxdWVyeSA9ICdzZWFyY2ggXCInICsgc2NvcGUgKyAnXCIgfCBzb3J0IGJ5IGRhdGV0aW1lIGRlc2MgfCBsaW1pdCA1MCc7XG5jb25zdCByID0gc3Bhd25TeW5jKCdvY2knLCBbJ2xvZ2dpbmctc2VhcmNoJywgJ3NlYXJjaC1sb2dzJywgJy0tc2VhcmNoLXF1ZXJ5JywgcXVlcnksICctLXRpbWUtc3RhcnQnLCB0aW1lU3RhcnQsICctLXRpbWUtZW5kJywgdGltZUVuZF0sIHsgc3RkaW86ICdpbmhlcml0Jywgc2hlbGw6IHRydWUgfSk7XG5wcm9jZXNzLmV4aXQoci5zdGF0dXMgPz8gMSk7XG5gO1xuXG4vKiogRW5zdXJlIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhaWwtZnVuY3Rpb24tbG9ncy5qcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHAsIFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQsICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbi8qKiBSZWFkIHRlbmFuY3kgYW5kIHJlZ2lvbiBmcm9tIE9DSSBDTEkgY29uZmlnLiBEZWZhdWx0IGZpbGU6IH4vLm9jaS9jb25maWcsIGRlZmF1bHQgcHJvZmlsZTogREVGQVVMVC4gKi9cbmZ1bmN0aW9uIHJlYWRUZW5hbmN5QW5kUmVnaW9uRnJvbUNsaUNvbmZpZygpOiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSByZXR1cm4ge307XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Qcm9maWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0OiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIGluUHJvZmlsZSA9IHRyaW1tZWQuc2xpY2UoMSwgLTEpID09PSBwcm9maWxlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Qcm9maWxlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkgPT09ICd0ZW5hbmN5JykgcmVzdWx0LnRlbmFuY3kgPSB2YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09ICdyZWdpb24nKSByZXN1bHQucmVnaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogR2V0IG9iamVjdCBzdG9yYWdlIG5hbWVzcGFjZSB2aWEgT0NJIFNESyAoc2FtZSBhcyBcIm9jaSBvcyBucyBnZXRcIikuIFVzZXMgfi8ub2NpL2NvbmZpZywgREVGQVVMVCBwcm9maWxlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY29tbW9uLkNvbmZpZ0ZpbGVBdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcihjb25maWdQYXRoLCBwcm9maWxlKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgb2JqZWN0c3RvcmFnZS5PYmplY3RTdG9yYWdlQ2xpZW50KHsgYXV0aGVudGljYXRpb25EZXRhaWxzUHJvdmlkZXI6IHByb3ZpZGVyIH0pO1xuICAgIGNsaWVudC5yZWdpb25JZCA9IHJlZ2lvbjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXROYW1lc3BhY2Uoe1xuICAgICAgY29tcGFydG1lbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UudmFsdWU/LnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYSBKQVIgdW5kZXIgdGFyZ2V0LyAocHJlZmVyIG9uZSBtYXRjaGluZyBuYW1lLCBlbHNlIGZpcnN0IC5qYXIpLlxuICovXG5mdW5jdGlvbiBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpcjogc3RyaW5nLCBmdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhcmdldCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldERpcik7XG4gICAgY29uc3QgamFycyA9IGZpbGVzLmZpbHRlcigoZikgPT4gZi5lbmRzV2l0aCgnLmphcicpICYmICFmLmVuZHNXaXRoKCctc291cmNlcy5qYXInKSk7XG4gICAgaWYgKGphcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gamFycy5maW5kKChqKSA9PiBqLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIGphcnNbMF0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIHByb2plY3QgaGFzIHBvbS54bWwgYW5kIHNyYy8gKE1hdmVuIHNvdXJjZSBsYXlvdXQgZm9yIGJ1aWxkLWZyb20tc291cmNlIERvY2tlcmZpbGUpLiAqL1xuZnVuY3Rpb24gaGFzUG9tQW5kU3JjKHByb2plY3REaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwb20gPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3BvbS54bWwnKTtcbiAgY29uc3Qgc3JjID0gcGF0aC5qb2luKHByb2plY3REaXIsICdzcmMnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwb20pICYmIGZzLmV4aXN0c1N5bmMoc3JjKSAmJiBmcy5zdGF0U3luYyhzcmMpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpOiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25BcHBOYW1lPzogc3RyaW5nO1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgbWVtb3J5TWI/OiBudW1iZXI7XG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGxldCBwcm9qZWN0RGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUj8udHJpbSgpO1xuICBpZiAoIXByb2plY3REaXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLm9jZGstcHJvamVjdC1kaXInKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBwcm9qZWN0RGlyID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4JykudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG4gIGlmICghcHJvamVjdERpciAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5zdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpID8gcCA6IHBhdGguZGlybmFtZShwKTtcbiAgfVxuICBpZiAoIXByb2plY3REaXIpIHByb2plY3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBwcm9qZWN0RGlyID0gcHJvamVjdERpciA/IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSA6ICcnO1xuICBpZiAoIXByb2plY3REaXIgfHwgIWZzLmV4aXN0c1N5bmMocHJvamVjdERpcikpIHJldHVybiB7fTtcblxuICBjb25zdCBuYW1lRnJvbVlhbWwgPSBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcik7XG4gIGNvbnN0IGphclBhdGggPSBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpciwgbmFtZUZyb21ZYW1sIHx8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhhc1NvdXJjZSA9IGhhc1BvbUFuZFNyYyhwcm9qZWN0RGlyKTtcbiAgaWYgKCFqYXJQYXRoICYmICFoYXNTb3VyY2UpIHJldHVybiB7fTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTkFNRT8udHJpbSgpIHx8IG5hbWVGcm9tWWFtbCB8fCBwYXRoLmJhc2VuYW1lKHByb2plY3REaXIpIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBnZXRGdW5jWWFtbFZlcnNpb24ocHJvamVjdERpcik7XG4gIGNvbnN0IGhhbmRsZXIgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSEFORExFUj8udHJpbSgpIHx8IGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyKTtcbiAgY29uc3QgdXNlVGhpbkRvY2tlcmZpbGUgPSAhIWphclBhdGg7XG4gIGNvbnN0IG1lbW9yeU1iID0gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcik7XG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gZ2V0RnVuY1lhbWxUaW1lb3V0KHByb2plY3REaXIpO1xuICBjb25zdCBjb25maWcgPSBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRT8udHJpbSgpIHx8IGZ1bmN0aW9uTmFtZSxcbiAgICBkb2NrZXJDb250ZXh0UGF0aDogcGF0aC5yZXNvbHZlKHByb2plY3REaXIpLFxuICAgIGltYWdlVGFnOiBpbWFnZVRhZyB8fCB1bmRlZmluZWQsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgbWVtb3J5TWIsXG4gICAgdGltZW91dFNlY29uZHMsXG4gICAgY29uZmlnLFxuICB9O1xufVxuXG5jb25zdCBiYWNrZW5kVHlwZSA9IChwcm9jZXNzLmVudi5PQ0lfU1RBVEVfQkFDS0VORF9UWVBFIHx8ICdsb2NhbCcpIGFzICdvY2knIHwgJ2h0dHAnIHwgJ2xvY2FsJztcblxuY29uc3QgYmFja2VuZENvbmZpZzogT2NpQmFja2VuZENvbmZpZyB8IHVuZGVmaW5lZCA9IGJhY2tlbmRUeXBlID09PSAnbG9jYWwnXG4gID8gdW5kZWZpbmVkXG4gIDogYmFja2VuZFR5cGUgPT09ICdvY2knXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdvY2knLFxuICAgICAgICBidWNrZXQ6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CVUNLRVQgfHwgJ3RmLXN0YXRlJyxcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfS0VZIHx8ICdmdW5jdGlvbi1zdGFjay90ZXJyYWZvcm0udGZzdGF0ZScsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgYWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfQUREUkVTUyB8fCAnJyxcbiAgICAgICAgdXBkYXRlTWV0aG9kOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VUERBVEVfTUVUSE9EIHx8ICdQVVQnLFxuICAgICAgICBsb2NrQWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfTE9DS19BRERSRVNTLFxuICAgICAgICB1bmxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VTkxPQ0tfQUREUkVTUyxcbiAgICAgIH07XG5cbi8qKlxuICogTG9hZCBPQ0kgY29uZmlnIGZyb20gZW52IGFuZCBDTEkgY29uZmlnLiBXaGVuIE9DSV9OQU1FU1BBQ0UgaXMgdW5zZXQsIGZldGNoZXMgaXQgdmlhIE9DSSBTREsgKGdldE5hbWVzcGFjZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPY2lDb25maWcoKTogUHJvbWlzZTxPY2lDb25maWc+IHtcbiAgY29uc3QgY2xpQ29uZmlnID0gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk7XG4gIGNvbnN0IGNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfSUQ/LnRyaW0oKSB8fCAnb2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uJztcbiAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IGNvbXBhcnRtZW50SWQ7XG4gIGNvbnN0IHRlbmFuY3lJZCA9IHByb2Nlc3MuZW52Lk9DSV9URU5BTkNZX0lEPy50cmltKCkgfHwgY2xpQ29uZmlnLnRlbmFuY3k/LnRyaW0oKSB8fCAnb2NpZDEudGVuYW5jeS5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5PQ0lfUkVHSU9OPy50cmltKCkgfHwgY2xpQ29uZmlnLnJlZ2lvbj8udHJpbSgpIHx8ICdldS1mcmFua2Z1cnQtMSc7XG5cbiAgaWYgKCFvY2lyQ29tcGFydG1lbnRJZCB8fCBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgY29uc29sZS53YXJuKCfimqDvuI8gIFdBUk5JTkc6IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIG5vdCBzZXQgb3Igc2V0IHRvIHJvb3QgY29tcGFydG1lbnQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBQbGVhc2Ugc2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELicpO1xuICAgIGNvbnNvbGUud2FybignICAgRXhhbXBsZTogZXhwb3J0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPVwib2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uXCInKTtcbiAgfVxuXG4gIGxldCBuYW1lc3BhY2UgPSBwcm9jZXNzLmVudi5PQ0lfTkFNRVNQQUNFPy50cmltKCk7XG4gIGlmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZSA9PT0gJ3lvdXItbmFtZXNwYWNlJykge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkLCByZWdpb24pO1xuICAgIGlmIChyZXNvbHZlZCkgbmFtZXNwYWNlID0gcmVzb2x2ZWQ7XG4gICAgZWxzZSBpZiAoIW5hbWVzcGFjZSkgbmFtZXNwYWNlID0gJ3lvdXItbmFtZXNwYWNlJztcbiAgICBpZiAobmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgT0NJX05BTUVTUEFDRSBub3Qgc2V0IGFuZCBTREsgY291bGQgbm90IHJlc29sdmUgaXQuIFNldCBPQ0lfTkFNRVNQQUNFIG9yIHJ1biBcIm9jaSBzZXR1cCBjb25maWdcIi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXNjb3ZlcmVkID0gZGlzY292ZXJGcm9tRnVuY1lhbWxBbmRUYXJnZXQoKTtcblxuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuXG4gIGxldCBkb2NrZXJDb250ZXh0UGF0aCA9IGRpc2NvdmVyZWQuZG9ja2VyQ29udGV4dFBhdGg7XG4gIGlmICghZG9ja2VyQ29udGV4dFBhdGggJiYgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkpIHtcbiAgICBjb25zdCBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSC50cmltKCkpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBkb2NrZXJDb250ZXh0UGF0aCA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZGlzY292ZXJlZC5oYW5kbGVyO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9IGRpc2NvdmVyZWQudXNlVGhpbkRvY2tlcmZpbGUgPz8gZmFsc2U7XG5cbiAgY29uc3QgbWVtb3J5RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX01FTU9SWV9NQj8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvbk1lbW9yeU1iID0gbWVtb3J5RW52XG4gICAgPyBTdHJpbmcocGFyc2VJbnQobWVtb3J5RW52LCAxMCkpXG4gICAgOiAoZGlzY292ZXJlZC5tZW1vcnlNYiAhPSBudWxsID8gU3RyaW5nKGRpc2NvdmVyZWQubWVtb3J5TWIpIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCB0aW1lb3V0RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUz8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvblRpbWVvdXRTZWNvbmRzID0gdGltZW91dEVudlxuICAgID8gcGFyc2VJbnQodGltZW91dEVudiwgMTApXG4gICAgOiBkaXNjb3ZlcmVkLnRpbWVvdXRTZWNvbmRzO1xuXG4gIGxldCBmdW5jdGlvbkNvbmZpZyA9IGRpc2NvdmVyZWQuY29uZmlnO1xuICBjb25zdCBjb25maWdFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fQ09ORklHPy50cmltKCk7XG4gIGlmIChjb25maWdFbnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb25maWdFbnYpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBmdW5jdGlvbkNvbmZpZyA9IHsgLi4uZnVuY3Rpb25Db25maWcsIC4uLnBhcnNlZCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGludmFsaWQgSlNPTlxuICAgIH1cbiAgfVxuICBpZiAoZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25Db25maWcpLmxlbmd0aCA9PT0gMCkgZnVuY3Rpb25Db25maWcgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYXBpR3dEZXBsb3ltZW50SnNvbkVudiA9IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTj8udHJpbSgpO1xuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCA9IGFwaUd3RGVwbG95bWVudEpzb25FbnZcbiAgICA/IHBhdGgucmVzb2x2ZShhcGlHd0RlcGxveW1lbnRKc29uRW52KVxuICAgIDogZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgID8gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24oZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgZW5zdXJlVGFpbEZ1bmN0aW9uTG9nc1NjcmlwdChkb2NrZXJDb250ZXh0UGF0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbXBhcnRtZW50SWQsXG4gICAgb2NpckNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICB0ZW5hbmN5SWQsXG4gICAgcmVnaW9uLFxuICAgIG5hbWVzcGFjZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRSA/PyBkaXNjb3ZlcmVkLmZ1bmN0aW9uQXBwTmFtZSA/PyAnJyxcbiAgICBmdW5jdGlvbk5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25OYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uSmFyUGF0aDogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBkb2NrZXJDb250ZXh0UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgaW1hZ2VUYWcsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgb2NpclJlcG9zaXRvcnlOYW1lOiBwcm9jZXNzLmVudi5PQ0lfT0NJUl9SRVBPU0lUT1JZX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uTWVtb3J5TWI6IGZ1bmN0aW9uTWVtb3J5TWIgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uVGltZW91dFNlY29uZHM6IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uQ29uZmlnLFxuICAgIGFwaUd3RGVwbG95bWVudEpzb25QYXRoOiBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCB8fCB1bmRlZmluZWQsXG4gICAgYmFja2VuZDogYmFja2VuZENvbmZpZyxcbiAgfTtcbn1cbiJdfQ==
@@ -293,18 +293,19 @@ try {
293
293
  console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
294
294
  process.exit(1);
295
295
  }
296
- const outputs = out.log_group_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null)) || out;
296
+ const outputs = out.log_group_id != null || out.execution_log_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null || v.logGroupId != null || v.executionLogId != null)) || out;
297
297
  function val(o, k) {
298
- const v = o[k];
299
- if (!v) return undefined;
300
- if (typeof v === 'string') return v;
301
- if (v && typeof v.value === 'string') return v.value;
298
+ let v = o[k];
299
+ if (v == null) v = o[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())];
300
+ if (v == null) return undefined;
301
+ if (typeof v === 'string') return v.trim();
302
+ if (typeof v === 'object' && v != null && 'value' in v) return String(v.value).trim();
302
303
  return undefined;
303
304
  }
304
- const logGroupId = val(outputs, 'log_group_id');
305
- const executionLogId = val(outputs, 'execution_log_id');
305
+ const logGroupId = val(outputs, 'log_group_id') || val(outputs, 'logGroupId');
306
+ const executionLogId = val(outputs, 'execution_log_id') || val(outputs, 'executionLogId');
306
307
  if (!logGroupId || !executionLogId) {
307
- console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
308
+ console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json. Keys found: ' + Object.keys(outputs).join(', '));
308
309
  process.exit(1);
309
310
  }
310
311
  const now = new Date();
@@ -287,18 +287,19 @@ try {
287
287
  console.error('Invalid or missing .ocdk-outputs.json. Run deploy first.');
288
288
  process.exit(1);
289
289
  }
290
- const outputs = out.log_group_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null)) || out;
290
+ const outputs = out.log_group_id != null || out.execution_log_id != null ? out : Object.values(out).find((v) => v && typeof v === 'object' && (v.log_group_id != null || v.execution_log_id != null || v.logGroupId != null || v.executionLogId != null)) || out;
291
291
  function val(o, k) {
292
- const v = o[k];
293
- if (!v) return undefined;
294
- if (typeof v === 'string') return v;
295
- if (v && typeof v.value === 'string') return v.value;
292
+ let v = o[k];
293
+ if (v == null) v = o[k.replace(/_([a-z])/g, (_, c) => c.toUpperCase())];
294
+ if (v == null) return undefined;
295
+ if (typeof v === 'string') return v.trim();
296
+ if (typeof v === 'object' && v != null && 'value' in v) return String(v.value).trim();
296
297
  return undefined;
297
298
  }
298
- const logGroupId = val(outputs, 'log_group_id');
299
- const executionLogId = val(outputs, 'execution_log_id');
299
+ const logGroupId = val(outputs, 'log_group_id') || val(outputs, 'logGroupId');
300
+ const executionLogId = val(outputs, 'execution_log_id') || val(outputs, 'executionLogId');
300
301
  if (!logGroupId || !executionLogId) {
301
- console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json');
302
+ console.error('log_group_id or execution_log_id missing in .ocdk-outputs.json. Keys found: ' + Object.keys(outputs).join(', '));
302
303
  process.exit(1);
303
304
  }
304
305
  const now = new Date();
@@ -552,4 +553,4 @@ async function getOciConfig() {
552
553
  backend: backendConfig,
553
554
  };
554
555
  }
555
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUFpWEQsb0NBd0ZDO0FBOWhCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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QUFxQixFQUFFLElBQUksRUFBRSxJQUFJLFNBQVM7UUFDdkUsaUJBQWlCLEVBQUUsaUJBQWlCLElBQUksU0FBUztRQUNqRCxRQUFRO1FBQ1IsT0FBTyxFQUFFLE9BQU8sSUFBSSxTQUFTO1FBQzdCLGlCQUFpQjtRQUNqQixrQkFBa0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixJQUFJLFNBQVM7UUFDckUsZ0JBQWdCLEVBQUUsZ0JBQWdCLElBQUksU0FBUztRQUMvQyxzQkFBc0IsRUFBRSxzQkFBc0IsSUFBSSxTQUFTO1FBQzNELGNBQWM7UUFDZCx1QkFBdUIsRUFBRSx1QkFBdUIsSUFBSSxTQUFTO1FBQzdELE9BQU8sRUFBRSxhQUFhO0tBQ3ZCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBPQ0kgQ29uZmlndXJhdGlvblxuICpcbiAqIFNldCB0aGVzZSB2aWEgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHVwZGF0ZSBkZWZhdWx0czpcbiAqIC0gT0NJX0NPTVBBUlRNRU5UX0lEXG4gKiAtIE9DSV9URU5BTkNZX0lEXG4gKiAtIE9DSV9SRUdJT05cbiAqIC0gT0NJX05BTUVTUEFDRSAoaWYgdW5zZXQsIG9idGFpbmVkIHZpYSBPQ0kgU0RLIGdldE5hbWVzcGFjZSlcbiAqIC0gT0NJX09DSVJfQ09NUEFSVE1FTlRfSUQgKGZvciBPQ0lSOyBtdXN0IGJlIG5vbi1yb290IGZvciBmdWxsIHN0YWNrKVxuICogLSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgKEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiBuYW1lOyBkZWZhdWx0IGVtcHR5KVxuICogLSBPQ0lfRlVOQ1RJT05fTkFNRSAoRnVuY3Rpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX0hBTkRMRVIgKEphdmEgRkRLIENNRCBoYW5kbGVyLCBlLmcuIGNvbS5leGFtcGxlLkhhbmRsZXI6OmhhbmRsZVJlcXVlc3Q7IGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fSkFSX1BBVEggKFBhdGggdG8gSkFSIG9yIHByb2plY3QgZGlyIGZvciBmdW5jdGlvbiBpbWFnZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX01FTU9SWV9NQiAoZnVuY3Rpb24gbWVtb3J5IGluIE1COyBmcm9tIGZ1bmMueWFtbCBtZW1vcnkgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMgKGZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kczsgZnJvbSBmdW5jLnlhbWwgdGltZW91dCBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nIGZvciBmdW5jdGlvbiBjb25maWcvZW52OyBtZXJnZWQgd2l0aCBmdW5jLnlhbWwgY29uZmlnKVxuICogLSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gKHBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT047IGRlZmF1bHQgcHJvamVjdCByb290IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbilcbiAqIC0gT0NES19QUk9KRUNUX0RJUiAoc2V0IGJ5IG9jZGsgQ0xJIHRvIGNhbGxlciBjd2Q7IHVzZWQgdG8gZGlzY292ZXIgZnVuYy55YW1sIGFuZCB0YXJnZXQvKVxuICogLSBPQ0lfU1RBVEVfQlVDS0VUIChmb3IgcmVtb3RlIHN0YXRlKVxuICogLSBPQ0lfU1RBVEVfQkFDS0VORF9UWVBFIChvY2l8aHR0cHxsb2NhbClcbiAqXG4gKiBXaGVuIE9DREtfUFJPSkVDVF9ESVIgaXMgc2V0IChlLmcuIHJ1bm5pbmcgYG5weCBvY2RrIGRlcGxveWAgZnJvbSBhIEphdmEgcHJvamVjdCksIGNvbmZpZ1xuICogZGlzY292ZXJzIGVpdGhlciB0YXJnZXQvKi5qYXIgb3IgcG9tLnhtbCtzcmMvIChhbmQgb3B0aW9uYWxseSBmdW5jLnlhbWwgbmFtZSwgdmVyc2lvbiwgY21kL2hhbmRsZXIpLlxuICogTm8gRG9ja2VyZmlsZSBpcyByZXF1aXJlZOKAlHRoZSBzdGFjayBnZW5lcmF0ZXMgb25lIGluIGxvY2FsLWV4ZWMgKGV4Y2x1ZGluZyBub2RlX21vZHVsZXMgdmlhIC5kb2NrZXJpZ25vcmUpLFxuICogdGhlbiBidWlsZHMsIHRhZ3MgKGZyb20gZnVuYy55YW1sIHZlcnNpb24pLCBhbmQgcHVzaGVzIHRvIE9DSVIuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGNvbW1vbiBmcm9tICdvY2ktY29tbW9uJztcbmltcG9ydCAqIGFzIG9iamVjdHN0b3JhZ2UgZnJvbSAnb2NpLW9iamVjdHN0b3JhZ2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUJhY2tlbmRDb25maWcge1xuICB0eXBlOiAnb2NpJyB8ICdodHRwJyB8ICdsb2NhbCc7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAga2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzPzogc3RyaW5nO1xuICB1cGRhdGVNZXRob2Q/OiBzdHJpbmc7XG4gIGxvY2tBZGRyZXNzPzogc3RyaW5nO1xuICB1bmxvY2tBZGRyZXNzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9jaUNvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIFBhdGggdG8gSkFSIG9yIERvY2tlcmZpbGUgY29udGV4dCBmb3IgZnVuY3Rpb24gaW1hZ2U7IGVtcHR5ID0gbm8gYnVpbGQvZGVwbG95LiAqL1xuICBmdW5jdGlvbkphclBhdGg/OiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIGRpcmVjdG9yeSBjb250YWluaW5nIHRhcmdldC8gKGRpc2NvdmVyZWQ7IERvY2tlcmZpbGUgaXMgZ2VuZXJhdGVkIGluIGxvY2FsLWV4ZWMpLiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgY21kL2hhbmRsZXIgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVI7IGRlZmF1bHQgYmVsb3cpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyBhIHRoaW4gRG9ja2VyZmlsZSAoQ09QWSB0YXJnZXQvKi5qYXIgb25seSk7IGZ1bGwgTWF2ZW4gYnVpbGQgb25seSBpbiByZWRlcGxveTpmdW5jdGlvbi4gKi9cbiAgdXNlVGhpbkRvY2tlcmZpbGU/OiBib29sZWFuO1xuICBvY2lyUmVwb3NpdG9yeU5hbWU/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKDEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzIpLiBGcm9tIGZ1bmMueWFtbCBtZW1vcnkgb3IgT0NJX0ZVTkNUSU9OX01FTU9SWV9NQi4gKi9cbiAgZnVuY3Rpb25NZW1vcnlNYj86IHN0cmluZztcbiAgLyoqIEZ1bmN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcyAoMeKAkzMwMCkuIEZyb20gZnVuYy55YW1sIHRpbWVvdXQgb3IgT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUy4gKi9cbiAgZnVuY3Rpb25UaW1lb3V0U2Vjb25kcz86IG51bWJlcjtcbiAgLyoqIEZ1bmN0aW9uIGNvbmZpZy9lbnYga2V5LXZhbHVlLiBGcm9tIGZ1bmMueWFtbCBjb25maWcgb3IgT0NJX0ZVTkNUSU9OX0NPTkZJRyAoSlNPTiBvYmplY3Qgc3RyaW5nKS4gKi9cbiAgZnVuY3Rpb25Db25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogUGF0aCB0byBBUEkgR2F0ZXdheSBkZXBsb3ltZW50IHNwZWMgSlNPTiAocm91dGVzKS4gVXNlIE9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTiBvciBkZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuY29uc3QgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04gPSBKU09OLnN0cmluZ2lmeShcbiAge1xuICAgIHJvdXRlczogW1xuICAgICAge1xuICAgICAgICBwYXRoOiAnL3twYXRoKn0nLFxuICAgICAgICBtZXRob2RzOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgIHR5cGU6ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgIGZ1bmN0aW9uSWQ6ICcke2Z1bmN0aW9uX2lkfScsXG4gICAgICAgICAgcmVhZFRpbWVvdXRJblNlY29uZHM6IDMwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdLFxuICB9LFxuICBudWxsLFxuICAyXG4pO1xuXG4vKiogT0NJUiBzaG9ydCByZWdpb24ga2V5cyAoZS5nLiBldS1mcmFua2Z1cnQtMSAtPiBmcmEpLiBVc2VkIHNvIGxvZ2luLCBidWlsZCwgcHVzaCBhbmQgZnVuY3Rpb24gaW1hZ2UgYWxsIHVzZSBzYW1lIHJlZ2lzdHJ5IGhvc3QuICovXG5leHBvcnQgY29uc3QgUkVHSU9OX1RPX09DSVJfSE9TVDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgJ2V1LWZyYW5rZnVydC0xJzogJ2ZyYScsICd1cy1waG9lbml4LTEnOiAncGh4JywgJ3VzLWFzaGJ1cm4tMSc6ICdpYWQnLCAndWstbG9uZG9uLTEnOiAnbGhyJyxcbiAgJ2FwLXRva3lvLTEnOiAnbnJ0JywgJ2FwLW11bWJhaS0xJzogJ2JvbScsICdhcC1zZW91bC0xJzogJ2ljbicsICdjYS10b3JvbnRvLTEnOiAneXl6JyxcbiAgJ3NhLXNhb3BhdWxvLTEnOiAnZ3J1JywgJ2FwLXN5ZG5leS0xJzogJ3N5ZCcsICdldS16dXJpY2gtMSc6ICd6cmgnLCAnbWUtZHViYWktMSc6ICdkeGInLFxuICAnYXAtb3Nha2EtMSc6ICdraXgnLCAnZXUtYW1zdGVyZGFtLTEnOiAnYW1zJywgJ2FwLXNpbmdhcG9yZS0xJzogJ3NpbicsICdhcC1oeWRlcmFiYWQtMSc6ICdoeWQnLFxuICAnZXUtbWlsYW4tMSc6ICdteHAnLCAnc2Etc2FudGlhZ28tMSc6ICdzY2wnLCAnYXAtbWVsYm91cm5lLTEnOiAnbWVsJywgJ2V1LXN0b2NraG9sbS0xJzogJ2FybicsXG4gICdtZS1qZWRkYWgtMSc6ICdqZWQnLCAnYWYtam9oYW5uZXNidXJnLTEnOiAnam5iJywgJ2lsLWplcnVzYWxlbS0xJzogJ3RsdicsICdteC1xdWVyZXRhcm8tMSc6ICdxcm8nLFxuICAnZXUtbWFyc2VpbGxlLTEnOiAnbXJzJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvY2lySG9zdEtleShyZWdpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBSRUdJT05fVE9fT0NJUl9IT1NUW3JlZ2lvbl0gPz8gcmVnaW9uO1xufVxuXG4vKiogRnVsbCBPQ0lSIGltYWdlIFVSTCBmb3IgdGhlIGZ1bmN0aW9uIChyZWdpc3RyeS9uYW1lc3BhY2UvcmVwbzp0YWcpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9jaUltYWdlVXJsKGNvbmZpZzogT2NpQ29uZmlnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBgJHtvY2lySG9zdEtleShjb25maWcucmVnaW9uKX0ub2Npci5pb2A7XG4gIGNvbnN0IHJlcG8gPSBjb25maWcub2NpclJlcG9zaXRvcnlOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUgfHwgJ29jaS1mdW5jdGlvbic7XG4gIGNvbnN0IHRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgcmV0dXJuIGAke3JlZ2lzdHJ5fS8ke2NvbmZpZy5uYW1lc3BhY2V9LyR7cmVwb306JHt0YWd9YDtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBmdW5jdGlvbiBuYW1lIGZyb20gZnVuYy55YW1sIChPQ0kgRnVuY3Rpb25zIGZvcm1hdCkuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJuYW1lOlwiIGxpbmUsIHRyaW1tZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sTmFtZShwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbmFtZTpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHJldHVybiBtWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY21kL2hhbmRsZXIgZnJvbSBmdW5jLnlhbWwgKE9DSS9GbiBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgXCJjbWQ6XCIgb3IgXCJoYW5kbGVyOlwiIGxpbmUsIHRyaW1tZWQ7IHVzZWQgYXMgRG9ja2VyIENNRCBmb3IgSmF2YSBGREsuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgY21kTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eXFxzKmNtZDpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGNtZE1hdGNoKSByZXR1cm4gY21kTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgY29uc3QgaGFuZGxlck1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypoYW5kbGVyOlxccypbXCInXT8oW15cIidcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAoaGFuZGxlck1hdGNoKSByZXR1cm4gaGFuZGxlck1hdGNoWzFdLnRyaW0oKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdmVyc2lvbiBmcm9tIGZ1bmMueWFtbCAodXNlZCBhcyBPQ0lSIGltYWdlIHRhZykuXG4gKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgXCJ2ZXJzaW9uOlwiIGxpbmUsIHRyaW1tZWQ7IHNhbml0aXplZCBmb3IgRG9ja2VyIHRhZyAoYS16QS1aMC05Xy4tKS5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxWZXJzaW9uKHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgICBjb25zdCBtID0gY29udGVudC5tYXRjaCgvXlxccyp2ZXJzaW9uOlxccypbXCInXT8oW15cIidcXHNcXG5dKylbXCInXT8vbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCByYXcgPSBtWzFdLnRyaW0oKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemVkID0gcmF3LnJlcGxhY2UoL1teYS16QS1aMC05Xy4tXS9nLCAnLScpLnJlcGxhY2UoLy0rL2csICctJykucmVwbGFjZSgvXi18LSQvZywgJycpO1xuICAgICAgICByZXR1cm4gc2FuaXRpemVkIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IFZBTElEX01FTU9SWV9NQiA9IG5ldyBTZXQoWzEyOCwgMjU2LCA1MTIsIDEwMjQsIDIwNDgsIDMwNzJdKTtcblxuLyoqXG4gKiBUcnkgdG8gcmVhZCBtZW1vcnkgKE1CKSBmcm9tIGZ1bmMueWFtbC4gT0NJIGFsbG93cyAxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIHZhbGlkOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE1lbW9yeShwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqbWVtb3J5OlxccyooXFxkKylcXHMqJC9tKTtcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChtWzFdLCAxMCk7XG4gICAgICAgIGlmIChWQUxJRF9NRU1PUllfTUIuaGFzKG4pKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGltZW91dCAoc2Vjb25kcykgZnJvbSBmdW5jLnlhbWwuIE9DSSBtYXggaXMgMzAwLlxuICogUmV0dXJucyB0aGUgbnVtYmVyIGlmIHByZXNlbnQgYW5kIGluIHJhbmdlIDHigJMzMDA7IG90aGVyd2lzZSB1bmRlZmluZWQuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVGltZW91dChwcm9qZWN0RGlyOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdGltZW91dDpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAobiA+PSAxICYmIG4gPD0gMzAwKSByZXR1cm4gbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIGlnbm9yZVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgY29uZmlnIChrZXktdmFsdWUgZW52KSBmcm9tIGZ1bmMueWFtbC4gRXhwZWN0cyBhIHRvcC1sZXZlbCBcImNvbmZpZzpcIiBibG9jayB3aXRoIGtleTogdmFsdWUgbGluZXMuXG4gKiBSZXR1cm5zIGEgcmVjb3JkIG9mIHN0cmluZyBrZXlzIGFuZCBzdHJpbmcgdmFsdWVzOyBlbXB0eSBpZiBub25lIG9yIHBhcnNlIGVycm9yLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Db25maWcgPSBmYWxzZTtcbiAgICBjb25zdCBjb25maWc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAgIGlmICh0cmltbWVkID09PSAnY29uZmlnOicgfHwgL15jb25maWdcXHMqOlxccyokLy50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgIGluQ29uZmlnID0gdHJ1ZTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoaW5Db25maWcpIHtcbiAgICAgICAgaWYgKHRyaW1tZWQgIT09ICcnICYmICFsaW5lLnN0YXJ0c1dpdGgoJyAnKSAmJiAhbGluZS5zdGFydHNXaXRoKCdcXHQnKSkgYnJlYWs7XG4gICAgICAgIGNvbnN0IGt2ID0gbGluZS5tYXRjaCgvXlxccysoW2EtekEtWl9dW2EtekEtWjAtOV8tXSopXFxzKjpcXHMqKC4qKSQvKTtcbiAgICAgICAgaWYgKGt2KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0ga3ZbMV0udHJpbSgpO1xuICAgICAgICAgIGxldCB2YWwgPSBrdlsyXS50cmltKCk7XG4gICAgICAgICAgaWYgKCh2YWwuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWwuZW5kc1dpdGgoJ1wiJykpIHx8ICh2YWwuc3RhcnRzV2l0aChcIidcIikgJiYgdmFsLmVuZHNXaXRoKFwiJ1wiKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbmZpZ1trZXldID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLmxlbmd0aCA/IGNvbmZpZyA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogRW5zdXJlIG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVEZWZhdWx0QXBpR3dEZXBsb3ltZW50SnNvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24nKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHApKSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwLCBERUZBVUxUX0FQSUdXX0RFUExPWU1FTlRfSlNPTiwgJ3V0ZjgnKTtcbiAgfVxuICByZXR1cm4gcDtcbn1cblxuY29uc3QgVEFJTF9GVU5DVElPTl9MT0dTX1NDUklQVCA9IGAjIS91c3IvYmluL2VudiBub2RlXG4vKipcbiAqIFRhaWwgT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9ncy4gR2VuZXJhdGVkIGJ5IE9DREsuXG4gKiBSdW4gZnJvbSBwcm9qZWN0IHJvb3QgYWZ0ZXIgZGVwbG95LiBSZXF1aXJlczogT0NJIENMSSwgT0NJX0NPTVBBUlRNRU5UX0lELCBhbmQgLm9jZGstb3V0cHV0cy5qc29uIChjcmVhdGVkIG9uIGRlcGxveSkuXG4gKi9cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5jb25zdCB7IHNwYXduU3luYyB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpO1xuXG5jb25zdCBkaXIgPSBwcm9jZXNzLmVudi5PQ0RLX1BST0pFQ1RfRElSIHx8IF9fZGlybmFtZTtcbmNvbnN0IG91dHB1dHNQYXRoID0gcGF0aC5qb2luKGRpciwgJy5vY2RrLW91dHB1dHMuanNvbicpO1xuaWYgKCFmcy5leGlzdHNTeW5jKG91dHB1dHNQYXRoKSkge1xuICBjb25zb2xlLmVycm9yKCdSdW4gZGVwbG95IGZpcnN0IHRvIGNyZWF0ZSAub2Nkay1vdXRwdXRzLmpzb24gaW4gdGhlIHByb2plY3Qgcm9vdC4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3QgY29tcElkID0gcHJvY2Vzcy5lbnYuT0NJX0NPTVBBUlRNRU5UX0lEIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9PQ0lEO1xuaWYgKCFjb21wSWQpIHtcbiAgY29uc29sZS5lcnJvcignU2V0IE9DSV9DT01QQVJUTUVOVF9JRCAob3IgT0NJX0NPTVBBUlRNRU5UX09DSUQpLicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5sZXQgb3V0O1xudHJ5IHtcbiAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKG91dHB1dHNQYXRoLCAndXRmOCcpLnJlcGxhY2UoL15cXHVGRUZGLywgJycpLnRyaW0oKTtcbiAgY29uc3QgZmlyc3QgPSByYXcuaW5kZXhPZigneycpO1xuICBjb25zdCBsYXN0ID0gcmF3Lmxhc3RJbmRleE9mKCd9Jyk7XG4gIGlmIChmaXJzdCA9PT0gLTEgfHwgbGFzdCA8PSBmaXJzdCkgdGhyb3cgbmV3IEVycm9yKCdObyBKU09OJyk7XG4gIG91dCA9IEpTT04ucGFyc2UocmF3LnNsaWNlKGZpcnN0LCBsYXN0ICsgMSkpO1xufSBjYXRjaCAoZSkge1xuICBjb25zb2xlLmVycm9yKCdJbnZhbGlkIG9yIG1pc3NpbmcgLm9jZGstb3V0cHV0cy5qc29uLiBSdW4gZGVwbG95IGZpcnN0LicpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59XG5jb25zdCBvdXRwdXRzID0gb3V0LmxvZ19ncm91cF9pZCAhPSBudWxsID8gb3V0IDogT2JqZWN0LnZhbHVlcyhvdXQpLmZpbmQoKHYpID0+IHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsKSkgfHwgb3V0O1xuZnVuY3Rpb24gdmFsKG8sIGspIHtcbiAgY29uc3QgdiA9IG9ba107XG4gIGlmICghdikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgcmV0dXJuIHY7XG4gIGlmICh2ICYmIHR5cGVvZiB2LnZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIHYudmFsdWU7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5jb25zdCBsb2dHcm91cElkID0gdmFsKG91dHB1dHMsICdsb2dfZ3JvdXBfaWQnKTtcbmNvbnN0IGV4ZWN1dGlvbkxvZ0lkID0gdmFsKG91dHB1dHMsICdleGVjdXRpb25fbG9nX2lkJyk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ2xvZ19ncm91cF9pZCBvciBleGVjdXRpb25fbG9nX2lkIG1pc3NpbmcgaW4gLm9jZGstb3V0cHV0cy5qc29uJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5jb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAqIDYwICogMTAwMCk7XG5jb25zdCB0aW1lU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpO1xuY29uc3QgdGltZUVuZCA9IG5vdy50b0lTT1N0cmluZygpO1xuY29uc3Qgc2NvcGUgPSBjb21wSWQgKyAnLycgKyBsb2dHcm91cElkICsgJy8nICsgZXhlY3V0aW9uTG9nSWQ7XG5jb25zdCBxdWVyeSA9ICdzZWFyY2ggXCInICsgc2NvcGUgKyAnXCIgfCBzb3J0IGJ5IGRhdGV0aW1lIGRlc2MgfCBsaW1pdCA1MCc7XG5jb25zdCByID0gc3Bhd25TeW5jKCdvY2knLCBbJ2xvZ2dpbmctc2VhcmNoJywgJ3NlYXJjaC1sb2dzJywgJy0tc2VhcmNoLXF1ZXJ5JywgcXVlcnksICctLXRpbWUtc3RhcnQnLCB0aW1lU3RhcnQsICctLXRpbWUtZW5kJywgdGltZUVuZF0sIHsgc3RkaW86ICdpbmhlcml0Jywgc2hlbGw6IHRydWUgfSk7XG5wcm9jZXNzLmV4aXQoci5zdGF0dXMgPz8gMSk7XG5gO1xuXG4vKiogRW5zdXJlIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhaWwtZnVuY3Rpb24tbG9ncy5qcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHAsIFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQsICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbi8qKiBSZWFkIHRlbmFuY3kgYW5kIHJlZ2lvbiBmcm9tIE9DSSBDTEkgY29uZmlnLiBEZWZhdWx0IGZpbGU6IH4vLm9jaS9jb25maWcsIGRlZmF1bHQgcHJvZmlsZTogREVGQVVMVC4gKi9cbmZ1bmN0aW9uIHJlYWRUZW5hbmN5QW5kUmVnaW9uRnJvbUNsaUNvbmZpZygpOiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSByZXR1cm4ge307XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Qcm9maWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0OiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIGluUHJvZmlsZSA9IHRyaW1tZWQuc2xpY2UoMSwgLTEpID09PSBwcm9maWxlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Qcm9maWxlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkgPT09ICd0ZW5hbmN5JykgcmVzdWx0LnRlbmFuY3kgPSB2YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09ICdyZWdpb24nKSByZXN1bHQucmVnaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogR2V0IG9iamVjdCBzdG9yYWdlIG5hbWVzcGFjZSB2aWEgT0NJIFNESyAoc2FtZSBhcyBcIm9jaSBvcyBucyBnZXRcIikuIFVzZXMgfi8ub2NpL2NvbmZpZywgREVGQVVMVCBwcm9maWxlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY29tbW9uLkNvbmZpZ0ZpbGVBdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcihjb25maWdQYXRoLCBwcm9maWxlKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgb2JqZWN0c3RvcmFnZS5PYmplY3RTdG9yYWdlQ2xpZW50KHsgYXV0aGVudGljYXRpb25EZXRhaWxzUHJvdmlkZXI6IHByb3ZpZGVyIH0pO1xuICAgIGNsaWVudC5yZWdpb25JZCA9IHJlZ2lvbjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXROYW1lc3BhY2Uoe1xuICAgICAgY29tcGFydG1lbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UudmFsdWU/LnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYSBKQVIgdW5kZXIgdGFyZ2V0LyAocHJlZmVyIG9uZSBtYXRjaGluZyBuYW1lLCBlbHNlIGZpcnN0IC5qYXIpLlxuICovXG5mdW5jdGlvbiBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpcjogc3RyaW5nLCBmdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhcmdldCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldERpcik7XG4gICAgY29uc3QgamFycyA9IGZpbGVzLmZpbHRlcigoZikgPT4gZi5lbmRzV2l0aCgnLmphcicpICYmICFmLmVuZHNXaXRoKCctc291cmNlcy5qYXInKSk7XG4gICAgaWYgKGphcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gamFycy5maW5kKChqKSA9PiBqLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIGphcnNbMF0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIHByb2plY3QgaGFzIHBvbS54bWwgYW5kIHNyYy8gKE1hdmVuIHNvdXJjZSBsYXlvdXQgZm9yIGJ1aWxkLWZyb20tc291cmNlIERvY2tlcmZpbGUpLiAqL1xuZnVuY3Rpb24gaGFzUG9tQW5kU3JjKHByb2plY3REaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwb20gPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3BvbS54bWwnKTtcbiAgY29uc3Qgc3JjID0gcGF0aC5qb2luKHByb2plY3REaXIsICdzcmMnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwb20pICYmIGZzLmV4aXN0c1N5bmMoc3JjKSAmJiBmcy5zdGF0U3luYyhzcmMpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpOiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25BcHBOYW1lPzogc3RyaW5nO1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgbWVtb3J5TWI/OiBudW1iZXI7XG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGxldCBwcm9qZWN0RGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUj8udHJpbSgpO1xuICBpZiAoIXByb2plY3REaXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLm9jZGstcHJvamVjdC1kaXInKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBwcm9qZWN0RGlyID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4JykudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG4gIGlmICghcHJvamVjdERpciAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5zdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpID8gcCA6IHBhdGguZGlybmFtZShwKTtcbiAgfVxuICBpZiAoIXByb2plY3REaXIpIHByb2plY3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBwcm9qZWN0RGlyID0gcHJvamVjdERpciA/IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSA6ICcnO1xuICBpZiAoIXByb2plY3REaXIgfHwgIWZzLmV4aXN0c1N5bmMocHJvamVjdERpcikpIHJldHVybiB7fTtcblxuICBjb25zdCBuYW1lRnJvbVlhbWwgPSBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcik7XG4gIGNvbnN0IGphclBhdGggPSBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpciwgbmFtZUZyb21ZYW1sIHx8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhhc1NvdXJjZSA9IGhhc1BvbUFuZFNyYyhwcm9qZWN0RGlyKTtcbiAgaWYgKCFqYXJQYXRoICYmICFoYXNTb3VyY2UpIHJldHVybiB7fTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTkFNRT8udHJpbSgpIHx8IG5hbWVGcm9tWWFtbCB8fCBwYXRoLmJhc2VuYW1lKHByb2plY3REaXIpIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBnZXRGdW5jWWFtbFZlcnNpb24ocHJvamVjdERpcik7XG4gIGNvbnN0IGhhbmRsZXIgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSEFORExFUj8udHJpbSgpIHx8IGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyKTtcbiAgY29uc3QgdXNlVGhpbkRvY2tlcmZpbGUgPSAhIWphclBhdGg7XG4gIGNvbnN0IG1lbW9yeU1iID0gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcik7XG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gZ2V0RnVuY1lhbWxUaW1lb3V0KHByb2plY3REaXIpO1xuICBjb25zdCBjb25maWcgPSBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRT8udHJpbSgpIHx8IGZ1bmN0aW9uTmFtZSxcbiAgICBkb2NrZXJDb250ZXh0UGF0aDogcGF0aC5yZXNvbHZlKHByb2plY3REaXIpLFxuICAgIGltYWdlVGFnOiBpbWFnZVRhZyB8fCB1bmRlZmluZWQsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgbWVtb3J5TWIsXG4gICAgdGltZW91dFNlY29uZHMsXG4gICAgY29uZmlnLFxuICB9O1xufVxuXG5jb25zdCBiYWNrZW5kVHlwZSA9IChwcm9jZXNzLmVudi5PQ0lfU1RBVEVfQkFDS0VORF9UWVBFIHx8ICdsb2NhbCcpIGFzICdvY2knIHwgJ2h0dHAnIHwgJ2xvY2FsJztcblxuY29uc3QgYmFja2VuZENvbmZpZzogT2NpQmFja2VuZENvbmZpZyB8IHVuZGVmaW5lZCA9IGJhY2tlbmRUeXBlID09PSAnbG9jYWwnXG4gID8gdW5kZWZpbmVkXG4gIDogYmFja2VuZFR5cGUgPT09ICdvY2knXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdvY2knLFxuICAgICAgICBidWNrZXQ6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CVUNLRVQgfHwgJ3RmLXN0YXRlJyxcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfS0VZIHx8ICdmdW5jdGlvbi1zdGFjay90ZXJyYWZvcm0udGZzdGF0ZScsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgYWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfQUREUkVTUyB8fCAnJyxcbiAgICAgICAgdXBkYXRlTWV0aG9kOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VUERBVEVfTUVUSE9EIHx8ICdQVVQnLFxuICAgICAgICBsb2NrQWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfTE9DS19BRERSRVNTLFxuICAgICAgICB1bmxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VTkxPQ0tfQUREUkVTUyxcbiAgICAgIH07XG5cbi8qKlxuICogTG9hZCBPQ0kgY29uZmlnIGZyb20gZW52IGFuZCBDTEkgY29uZmlnLiBXaGVuIE9DSV9OQU1FU1BBQ0UgaXMgdW5zZXQsIGZldGNoZXMgaXQgdmlhIE9DSSBTREsgKGdldE5hbWVzcGFjZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPY2lDb25maWcoKTogUHJvbWlzZTxPY2lDb25maWc+IHtcbiAgY29uc3QgY2xpQ29uZmlnID0gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk7XG4gIGNvbnN0IGNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfSUQ/LnRyaW0oKSB8fCAnb2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uJztcbiAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IGNvbXBhcnRtZW50SWQ7XG4gIGNvbnN0IHRlbmFuY3lJZCA9IHByb2Nlc3MuZW52Lk9DSV9URU5BTkNZX0lEPy50cmltKCkgfHwgY2xpQ29uZmlnLnRlbmFuY3k/LnRyaW0oKSB8fCAnb2NpZDEudGVuYW5jeS5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5PQ0lfUkVHSU9OPy50cmltKCkgfHwgY2xpQ29uZmlnLnJlZ2lvbj8udHJpbSgpIHx8ICdldS1mcmFua2Z1cnQtMSc7XG5cbiAgaWYgKCFvY2lyQ29tcGFydG1lbnRJZCB8fCBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgY29uc29sZS53YXJuKCfimqDvuI8gIFdBUk5JTkc6IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIG5vdCBzZXQgb3Igc2V0IHRvIHJvb3QgY29tcGFydG1lbnQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBQbGVhc2Ugc2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELicpO1xuICAgIGNvbnNvbGUud2FybignICAgRXhhbXBsZTogZXhwb3J0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPVwib2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uXCInKTtcbiAgfVxuXG4gIGxldCBuYW1lc3BhY2UgPSBwcm9jZXNzLmVudi5PQ0lfTkFNRVNQQUNFPy50cmltKCk7XG4gIGlmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZSA9PT0gJ3lvdXItbmFtZXNwYWNlJykge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkLCByZWdpb24pO1xuICAgIGlmIChyZXNvbHZlZCkgbmFtZXNwYWNlID0gcmVzb2x2ZWQ7XG4gICAgZWxzZSBpZiAoIW5hbWVzcGFjZSkgbmFtZXNwYWNlID0gJ3lvdXItbmFtZXNwYWNlJztcbiAgICBpZiAobmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgT0NJX05BTUVTUEFDRSBub3Qgc2V0IGFuZCBTREsgY291bGQgbm90IHJlc29sdmUgaXQuIFNldCBPQ0lfTkFNRVNQQUNFIG9yIHJ1biBcIm9jaSBzZXR1cCBjb25maWdcIi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXNjb3ZlcmVkID0gZGlzY292ZXJGcm9tRnVuY1lhbWxBbmRUYXJnZXQoKTtcblxuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuXG4gIGxldCBkb2NrZXJDb250ZXh0UGF0aCA9IGRpc2NvdmVyZWQuZG9ja2VyQ29udGV4dFBhdGg7XG4gIGlmICghZG9ja2VyQ29udGV4dFBhdGggJiYgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkpIHtcbiAgICBjb25zdCBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSC50cmltKCkpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBkb2NrZXJDb250ZXh0UGF0aCA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZGlzY292ZXJlZC5oYW5kbGVyO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9IGRpc2NvdmVyZWQudXNlVGhpbkRvY2tlcmZpbGUgPz8gZmFsc2U7XG5cbiAgY29uc3QgbWVtb3J5RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX01FTU9SWV9NQj8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvbk1lbW9yeU1iID0gbWVtb3J5RW52XG4gICAgPyBTdHJpbmcocGFyc2VJbnQobWVtb3J5RW52LCAxMCkpXG4gICAgOiAoZGlzY292ZXJlZC5tZW1vcnlNYiAhPSBudWxsID8gU3RyaW5nKGRpc2NvdmVyZWQubWVtb3J5TWIpIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCB0aW1lb3V0RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUz8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvblRpbWVvdXRTZWNvbmRzID0gdGltZW91dEVudlxuICAgID8gcGFyc2VJbnQodGltZW91dEVudiwgMTApXG4gICAgOiBkaXNjb3ZlcmVkLnRpbWVvdXRTZWNvbmRzO1xuXG4gIGxldCBmdW5jdGlvbkNvbmZpZyA9IGRpc2NvdmVyZWQuY29uZmlnO1xuICBjb25zdCBjb25maWdFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fQ09ORklHPy50cmltKCk7XG4gIGlmIChjb25maWdFbnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb25maWdFbnYpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBmdW5jdGlvbkNvbmZpZyA9IHsgLi4uZnVuY3Rpb25Db25maWcsIC4uLnBhcnNlZCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGludmFsaWQgSlNPTlxuICAgIH1cbiAgfVxuICBpZiAoZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25Db25maWcpLmxlbmd0aCA9PT0gMCkgZnVuY3Rpb25Db25maWcgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYXBpR3dEZXBsb3ltZW50SnNvbkVudiA9IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTj8udHJpbSgpO1xuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCA9IGFwaUd3RGVwbG95bWVudEpzb25FbnZcbiAgICA/IHBhdGgucmVzb2x2ZShhcGlHd0RlcGxveW1lbnRKc29uRW52KVxuICAgIDogZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgID8gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24oZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgZW5zdXJlVGFpbEZ1bmN0aW9uTG9nc1NjcmlwdChkb2NrZXJDb250ZXh0UGF0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbXBhcnRtZW50SWQsXG4gICAgb2NpckNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICB0ZW5hbmN5SWQsXG4gICAgcmVnaW9uLFxuICAgIG5hbWVzcGFjZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRSA/PyBkaXNjb3ZlcmVkLmZ1bmN0aW9uQXBwTmFtZSA/PyAnJyxcbiAgICBmdW5jdGlvbk5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25OYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uSmFyUGF0aDogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBkb2NrZXJDb250ZXh0UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgaW1hZ2VUYWcsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgb2NpclJlcG9zaXRvcnlOYW1lOiBwcm9jZXNzLmVudi5PQ0lfT0NJUl9SRVBPU0lUT1JZX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uTWVtb3J5TWI6IGZ1bmN0aW9uTWVtb3J5TWIgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uVGltZW91dFNlY29uZHM6IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uQ29uZmlnLFxuICAgIGFwaUd3RGVwbG95bWVudEpzb25QYXRoOiBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCB8fCB1bmRlZmluZWQsXG4gICAgYmFja2VuZDogYmFja2VuZENvbmZpZyxcbiAgfTtcbn1cbiJdfQ==
556
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2NvbmZpZy9vY2ktY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlCRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNkVILGtDQUVDO0FBR0Qsd0NBS0M7QUFrWEQsb0NBd0ZDO0FBL2hCRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixtREFBcUM7QUFDckMsaUVBQW1EO0FBMENuRCxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQ2xEO0lBQ0UsTUFBTSxFQUFFO1FBQ047WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQztZQUNuQyxPQUFPLEVBQUU7Z0JBQ1AsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsVUFBVSxFQUFFLGdCQUFnQjtnQkFDNUIsb0JBQW9CLEVBQUUsRUFBRTthQUN6QjtTQUNGO0tBQ0Y7Q0FDRixFQUNELElBQUksRUFDSixDQUFDLENBQ0YsQ0FBQztBQUVGLHFJQUFxSTtBQUN4SCxRQUFBLG1CQUFtQixHQUEyQjtJQUN6RCxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLO0lBQzNGLFlBQVksRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxLQUFLO0lBQ3JGLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLO0lBQ3ZGLFlBQVksRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixF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QkFBcUIsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTO1FBQ3ZFLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFNBQVM7UUFDakQsUUFBUTtRQUNSLE9BQU8sRUFBRSxPQUFPLElBQUksU0FBUztRQUM3QixpQkFBaUI7UUFDakIsa0JBQWtCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsSUFBSSxTQUFTO1FBQ3JFLGdCQUFnQixFQUFFLGdCQUFnQixJQUFJLFNBQVM7UUFDL0Msc0JBQXNCLEVBQUUsc0JBQXNCLElBQUksU0FBUztRQUMzRCxjQUFjO1FBQ2QsdUJBQXVCLEVBQUUsdUJBQXVCLElBQUksU0FBUztRQUM3RCxPQUFPLEVBQUUsYUFBYTtLQUN2QixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogT0NJIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBTZXQgdGhlc2UgdmlhIGVudmlyb25tZW50IHZhcmlhYmxlcyBvciB1cGRhdGUgZGVmYXVsdHM6XG4gKiAtIE9DSV9DT01QQVJUTUVOVF9JRFxuICogLSBPQ0lfVEVOQU5DWV9JRFxuICogLSBPQ0lfUkVHSU9OXG4gKiAtIE9DSV9OQU1FU1BBQ0UgKGlmIHVuc2V0LCBvYnRhaW5lZCB2aWEgT0NJIFNESyBnZXROYW1lc3BhY2UpXG4gKiAtIE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIChmb3IgT0NJUjsgbXVzdCBiZSBub24tcm9vdCBmb3IgZnVsbCBzdGFjaylcbiAqIC0gT0NJX0ZVTkNUSU9OX0FQUF9OQU1FIChGdW5jdGlvbnMgYXBwbGljYXRpb24gbmFtZTsgZGVmYXVsdCBlbXB0eSlcbiAqIC0gT0NJX0ZVTkNUSU9OX05BTUUgKEZ1bmN0aW9uIG5hbWU7IGRlZmF1bHQgZW1wdHkpXG4gKiAtIE9DSV9GVU5DVElPTl9IQU5ETEVSIChKYXZhIEZESyBDTUQgaGFuZGxlciwgZS5nLiBjb20uZXhhbXBsZS5IYW5kbGVyOjpoYW5kbGVSZXF1ZXN0OyBmcm9tIGZ1bmMueWFtbCBjbWQvaGFuZGxlciBpZiB1bnNldClcbiAqIC0gT0NJX0ZVTkNUSU9OX0pBUl9QQVRIIChQYXRoIHRvIEpBUiBvciBwcm9qZWN0IGRpciBmb3IgZnVuY3Rpb24gaW1hZ2U7IGRlZmF1bHQgZW1wdHkpXG4gKiAtIE9DSV9GVU5DVElPTl9NRU1PUllfTUIgKGZ1bmN0aW9uIG1lbW9yeSBpbiBNQjsgZnJvbSBmdW5jLnlhbWwgbWVtb3J5IGlmIHVuc2V0KVxuICogLSBPQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTIChmdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHM7IGZyb20gZnVuYy55YW1sIHRpbWVvdXQgaWYgdW5zZXQpXG4gKiAtIE9DSV9GVU5DVElPTl9DT05GSUcgKEpTT04gb2JqZWN0IHN0cmluZyBmb3IgZnVuY3Rpb24gY29uZmlnL2VudjsgbWVyZ2VkIHdpdGggZnVuYy55YW1sIGNvbmZpZylcbiAqIC0gT0NJX0FQSUdBVEVXQVlfREVQTE9ZTUVOVF9KU09OIChwYXRoIHRvIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgc3BlYyBKU09OOyBkZWZhdWx0IHByb2plY3Qgcm9vdCBvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24pXG4gKiAtIE9DREtfUFJPSkVDVF9ESVIgKHNldCBieSBvY2RrIENMSSB0byBjYWxsZXIgY3dkOyB1c2VkIHRvIGRpc2NvdmVyIGZ1bmMueWFtbCBhbmQgdGFyZ2V0LylcbiAqIC0gT0NJX1NUQVRFX0JVQ0tFVCAoZm9yIHJlbW90ZSBzdGF0ZSlcbiAqIC0gT0NJX1NUQVRFX0JBQ0tFTkRfVFlQRSAob2NpfGh0dHB8bG9jYWwpXG4gKlxuICogV2hlbiBPQ0RLX1BST0pFQ1RfRElSIGlzIHNldCAoZS5nLiBydW5uaW5nIGBucHggb2NkayBkZXBsb3lgIGZyb20gYSBKYXZhIHByb2plY3QpLCBjb25maWdcbiAqIGRpc2NvdmVycyBlaXRoZXIgdGFyZ2V0LyouamFyIG9yIHBvbS54bWwrc3JjLyAoYW5kIG9wdGlvbmFsbHkgZnVuYy55YW1sIG5hbWUsIHZlcnNpb24sIGNtZC9oYW5kbGVyKS5cbiAqIE5vIERvY2tlcmZpbGUgaXMgcmVxdWlyZWTigJR0aGUgc3RhY2sgZ2VuZXJhdGVzIG9uZSBpbiBsb2NhbC1leGVjIChleGNsdWRpbmcgbm9kZV9tb2R1bGVzIHZpYSAuZG9ja2VyaWdub3JlKSxcbiAqIHRoZW4gYnVpbGRzLCB0YWdzIChmcm9tIGZ1bmMueWFtbCB2ZXJzaW9uKSwgYW5kIHB1c2hlcyB0byBPQ0lSLlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBjb21tb24gZnJvbSAnb2NpLWNvbW1vbic7XG5pbXBvcnQgKiBhcyBvYmplY3RzdG9yYWdlIGZyb20gJ29jaS1vYmplY3RzdG9yYWdlJztcblxuZXhwb3J0IGludGVyZmFjZSBPY2lCYWNrZW5kQ29uZmlnIHtcbiAgdHlwZTogJ29jaScgfCAnaHR0cCcgfCAnbG9jYWwnO1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGtleT86IHN0cmluZztcbiAgYWRkcmVzcz86IHN0cmluZztcbiAgdXBkYXRlTWV0aG9kPzogc3RyaW5nO1xuICBsb2NrQWRkcmVzcz86IHN0cmluZztcbiAgdW5sb2NrQWRkcmVzcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPY2lDb25maWcge1xuICBjb21wYXJ0bWVudElkOiBzdHJpbmc7XG4gIG9jaXJDb21wYXJ0bWVudElkPzogc3RyaW5nO1xuICB0ZW5hbmN5SWQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIG5hbWVzcGFjZTogc3RyaW5nO1xuICBmdW5jdGlvbkFwcE5hbWU6IHN0cmluZztcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRvIEpBUiBvciBEb2NrZXJmaWxlIGNvbnRleHQgZm9yIGZ1bmN0aW9uIGltYWdlOyBlbXB0eSA9IG5vIGJ1aWxkL2RlcGxveS4gKi9cbiAgZnVuY3Rpb25KYXJQYXRoPzogc3RyaW5nO1xuICAvKiogUGF0aCB0byBkaXJlY3RvcnkgY29udGFpbmluZyB0YXJnZXQvIChkaXNjb3ZlcmVkOyBEb2NrZXJmaWxlIGlzIGdlbmVyYXRlZCBpbiBsb2NhbC1leGVjKS4gKi9cbiAgZG9ja2VyQ29udGV4dFBhdGg/OiBzdHJpbmc7XG4gIC8qKiBJbWFnZSB0YWcgZm9yIE9DSVIgKGZyb20gZnVuYy55YW1sIHZlcnNpb24gb3IgT0NJX0lNQUdFX1RBRzsgZGVmYXVsdCAnbGF0ZXN0JykuICovXG4gIGltYWdlVGFnPzogc3RyaW5nO1xuICAvKiogSmF2YSBGREsgQ01EIGhhbmRsZXIgKGZyb20gZnVuYy55YW1sIGNtZC9oYW5kbGVyIG9yIE9DSV9GVU5DVElPTl9IQU5ETEVSOyBkZWZhdWx0IGJlbG93KS4gKi9cbiAgaGFuZGxlcj86IHN0cmluZztcbiAgLyoqIFdoZW4gdHJ1ZSwgZGVwbG95IHVzZXMgYSB0aGluIERvY2tlcmZpbGUgKENPUFkgdGFyZ2V0LyouamFyIG9ubHkpOyBmdWxsIE1hdmVuIGJ1aWxkIG9ubHkgaW4gcmVkZXBsb3k6ZnVuY3Rpb24uICovXG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgb2NpclJlcG9zaXRvcnlOYW1lPzogc3RyaW5nO1xuICAvKiogRnVuY3Rpb24gbWVtb3J5IGluIE1CICgxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyKS4gRnJvbSBmdW5jLnlhbWwgbWVtb3J5IG9yIE9DSV9GVU5DVElPTl9NRU1PUllfTUIuICovXG4gIGZ1bmN0aW9uTWVtb3J5TWI/OiBzdHJpbmc7XG4gIC8qKiBGdW5jdGlvbiB0aW1lb3V0IGluIHNlY29uZHMgKDHigJMzMDApLiBGcm9tIGZ1bmMueWFtbCB0aW1lb3V0IG9yIE9DSV9GVU5DVElPTl9USU1FT1VUX1NFQ09ORFMuICovXG4gIGZ1bmN0aW9uVGltZW91dFNlY29uZHM/OiBudW1iZXI7XG4gIC8qKiBGdW5jdGlvbiBjb25maWcvZW52IGtleS12YWx1ZS4gRnJvbSBmdW5jLnlhbWwgY29uZmlnIG9yIE9DSV9GVU5DVElPTl9DT05GSUcgKEpTT04gb2JqZWN0IHN0cmluZykuICovXG4gIGZ1bmN0aW9uQ29uZmlnPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIFBhdGggdG8gQVBJIEdhdGV3YXkgZGVwbG95bWVudCBzcGVjIEpTT04gKHJvdXRlcykuIFVzZSBPQ0lfQVBJR0FURVdBWV9ERVBMT1lNRU5UX0pTT04gb3IgZGVmYXVsdCBvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24gaW4gcHJvamVjdCByb290LiAqL1xuICBhcGlHd0RlcGxveW1lbnRKc29uUGF0aD86IHN0cmluZztcbiAgYmFja2VuZD86IE9jaUJhY2tlbmRDb25maWc7XG59XG5cbmNvbnN0IERFRkFVTFRfQVBJR1dfREVQTE9ZTUVOVF9KU09OID0gSlNPTi5zdHJpbmdpZnkoXG4gIHtcbiAgICByb3V0ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgcGF0aDogJy97cGF0aCp9JyxcbiAgICAgICAgbWV0aG9kczogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ10sXG4gICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICB0eXBlOiAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICBmdW5jdGlvbklkOiAnJHtmdW5jdGlvbl9pZH0nLFxuICAgICAgICAgIHJlYWRUaW1lb3V0SW5TZWNvbmRzOiAzMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgbnVsbCxcbiAgMlxuKTtcblxuLyoqIE9DSVIgc2hvcnQgcmVnaW9uIGtleXMgKGUuZy4gZXUtZnJhbmtmdXJ0LTEgLT4gZnJhKS4gVXNlZCBzbyBsb2dpbiwgYnVpbGQsIHB1c2ggYW5kIGZ1bmN0aW9uIGltYWdlIGFsbCB1c2Ugc2FtZSByZWdpc3RyeSBob3N0LiAqL1xuZXhwb3J0IGNvbnN0IFJFR0lPTl9UT19PQ0lSX0hPU1Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdldS1mcmFua2Z1cnQtMSc6ICdmcmEnLCAndXMtcGhvZW5peC0xJzogJ3BoeCcsICd1cy1hc2hidXJuLTEnOiAnaWFkJywgJ3VrLWxvbmRvbi0xJzogJ2xocicsXG4gICdhcC10b2t5by0xJzogJ25ydCcsICdhcC1tdW1iYWktMSc6ICdib20nLCAnYXAtc2VvdWwtMSc6ICdpY24nLCAnY2EtdG9yb250by0xJzogJ3l5eicsXG4gICdzYS1zYW9wYXVsby0xJzogJ2dydScsICdhcC1zeWRuZXktMSc6ICdzeWQnLCAnZXUtenVyaWNoLTEnOiAnenJoJywgJ21lLWR1YmFpLTEnOiAnZHhiJyxcbiAgJ2FwLW9zYWthLTEnOiAna2l4JywgJ2V1LWFtc3RlcmRhbS0xJzogJ2FtcycsICdhcC1zaW5nYXBvcmUtMSc6ICdzaW4nLCAnYXAtaHlkZXJhYmFkLTEnOiAnaHlkJyxcbiAgJ2V1LW1pbGFuLTEnOiAnbXhwJywgJ3NhLXNhbnRpYWdvLTEnOiAnc2NsJywgJ2FwLW1lbGJvdXJuZS0xJzogJ21lbCcsICdldS1zdG9ja2hvbG0tMSc6ICdhcm4nLFxuICAnbWUtamVkZGFoLTEnOiAnamVkJywgJ2FmLWpvaGFubmVzYnVyZy0xJzogJ2puYicsICdpbC1qZXJ1c2FsZW0tMSc6ICd0bHYnLCAnbXgtcXVlcmV0YXJvLTEnOiAncXJvJyxcbiAgJ2V1LW1hcnNlaWxsZS0xJzogJ21ycycsXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb2Npckhvc3RLZXkocmVnaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gUkVHSU9OX1RPX09DSVJfSE9TVFtyZWdpb25dID8/IHJlZ2lvbjtcbn1cblxuLyoqIEZ1bGwgT0NJUiBpbWFnZSBVUkwgZm9yIHRoZSBmdW5jdGlvbiAocmVnaXN0cnkvbmFtZXNwYWNlL3JlcG86dGFnKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPY2lJbWFnZVVybChjb25maWc6IE9jaUNvbmZpZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gYCR7b2Npckhvc3RLZXkoY29uZmlnLnJlZ2lvbil9Lm9jaXIuaW9gO1xuICBjb25zdCByZXBvID0gY29uZmlnLm9jaXJSZXBvc2l0b3J5TmFtZSB8fCBjb25maWcuZnVuY3Rpb25OYW1lIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCB0YWcgPSBjb25maWcuaW1hZ2VUYWcgfHwgJ2xhdGVzdCc7XG4gIHJldHVybiBgJHtyZWdpc3RyeX0vJHtjb25maWcubmFtZXNwYWNlfS8ke3JlcG99OiR7dGFnfWA7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgZnVuY3Rpb24gbmFtZSBmcm9tIGZ1bmMueWFtbCAoT0NJIEZ1bmN0aW9ucyBmb3JtYXQpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IFwibmFtZTpcIiBsaW5lLCB0cmltbWVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IG0gPSBjb250ZW50Lm1hdGNoKC9eXFxzKm5hbWU6XFxzKltcIiddPyhbXlwiJ1xcc1xcbl0rKVtcIiddPy9tKTtcbiAgICAgIGlmIChtKSByZXR1cm4gbVsxXS50cmltKCk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIGNtZC9oYW5kbGVyIGZyb20gZnVuYy55YW1sIChPQ0kvRm4gZm9ybWF0KS5cbiAqIFJldHVybnMgdGhlIHZhbHVlIG9mIFwiY21kOlwiIG9yIFwiaGFuZGxlcjpcIiBsaW5lLCB0cmltbWVkOyB1c2VkIGFzIERvY2tlciBDTUQgZm9yIEphdmEgRkRLLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbEhhbmRsZXIocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IGNtZE1hdGNoID0gY29udGVudC5tYXRjaCgvXlxccypjbWQ6XFxzKltcIiddPyhbXlwiJ1xcbl0rKVtcIiddPy9tKTtcbiAgICAgIGlmIChjbWRNYXRjaCkgcmV0dXJuIGNtZE1hdGNoWzFdLnRyaW0oKTtcbiAgICAgIGNvbnN0IGhhbmRsZXJNYXRjaCA9IGNvbnRlbnQubWF0Y2goL15cXHMqaGFuZGxlcjpcXHMqW1wiJ10/KFteXCInXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKGhhbmRsZXJNYXRjaCkgcmV0dXJuIGhhbmRsZXJNYXRjaFsxXS50cmltKCk7XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIHZlcnNpb24gZnJvbSBmdW5jLnlhbWwgKHVzZWQgYXMgT0NJUiBpbWFnZSB0YWcpLlxuICogUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IFwidmVyc2lvbjpcIiBsaW5lLCB0cmltbWVkOyBzYW5pdGl6ZWQgZm9yIERvY2tlciB0YWcgKGEtekEtWjAtOV8uLSkuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNZYW1sVmVyc2lvbihwcm9qZWN0RGlyOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwID0gcGF0aC5qb2luKHByb2plY3REaXIsICdmdW5jLnlhbWwnKTtcbiAgdHJ5IHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhwKSkge1xuICAgICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwLCAndXRmOCcpO1xuICAgICAgY29uc3QgbSA9IGNvbnRlbnQubWF0Y2goL15cXHMqdmVyc2lvbjpcXHMqW1wiJ10/KFteXCInXFxzXFxuXSspW1wiJ10/L20pO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgY29uc3QgcmF3ID0gbVsxXS50cmltKCk7XG4gICAgICAgIGNvbnN0IHNhbml0aXplZCA9IHJhdy5yZXBsYWNlKC9bXmEtekEtWjAtOV8uLV0vZywgJy0nKS5yZXBsYWNlKC8tKy9nLCAnLScpLnJlcGxhY2UoL14tfC0kL2csICcnKTtcbiAgICAgICAgcmV0dXJuIHNhbml0aXplZCB8fCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5jb25zdCBWQUxJRF9NRU1PUllfTUIgPSBuZXcgU2V0KFsxMjgsIDI1NiwgNTEyLCAxMDI0LCAyMDQ4LCAzMDcyXSk7XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgbWVtb3J5IChNQikgZnJvbSBmdW5jLnlhbWwuIE9DSSBhbGxvd3MgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgMzA3Mi5cbiAqIFJldHVybnMgdGhlIG51bWJlciBpZiBwcmVzZW50IGFuZCB2YWxpZDsgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcjogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IG0gPSBjb250ZW50Lm1hdGNoKC9eXFxzKm1lbW9yeTpcXHMqKFxcZCspXFxzKiQvbSk7XG4gICAgICBpZiAobSkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQobVsxXSwgMTApO1xuICAgICAgICBpZiAoVkFMSURfTUVNT1JZX01CLmhhcyhuKSkgcmV0dXJuIG47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIHRpbWVvdXQgKHNlY29uZHMpIGZyb20gZnVuYy55YW1sLiBPQ0kgbWF4IGlzIDMwMC5cbiAqIFJldHVybnMgdGhlIG51bWJlciBpZiBwcmVzZW50IGFuZCBpbiByYW5nZSAx4oCTMzAwOyBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICovXG5mdW5jdGlvbiBnZXRGdW5jWWFtbFRpbWVvdXQocHJvamVjdERpcjogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnZnVuYy55YW1sJyk7XG4gIHRyeSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocCwgJ3V0ZjgnKTtcbiAgICAgIGNvbnN0IG0gPSBjb250ZW50Lm1hdGNoKC9eXFxzKnRpbWVvdXQ6XFxzKihcXGQrKVxccyokL20pO1xuICAgICAgaWYgKG0pIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KG1bMV0sIDEwKTtcbiAgICAgICAgaWYgKG4gPj0gMSAmJiBuIDw9IDMwMCkgcmV0dXJuIG47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBpZ25vcmVcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRyeSB0byByZWFkIGNvbmZpZyAoa2V5LXZhbHVlIGVudikgZnJvbSBmdW5jLnlhbWwuIEV4cGVjdHMgYSB0b3AtbGV2ZWwgXCJjb25maWc6XCIgYmxvY2sgd2l0aCBrZXk6IHZhbHVlIGxpbmVzLlxuICogUmV0dXJucyBhIHJlY29yZCBvZiBzdHJpbmcga2V5cyBhbmQgc3RyaW5nIHZhbHVlczsgZW1wdHkgaWYgbm9uZSBvciBwYXJzZSBlcnJvci5cbiAqL1xuZnVuY3Rpb24gZ2V0RnVuY1lhbWxDb25maWcocHJvamVjdERpcjogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ2Z1bmMueWFtbCcpO1xuICB0cnkge1xuICAgIGlmICghZnMuZXhpc3RzU3luYyhwKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KC9cXHI/XFxuLyk7XG4gICAgbGV0IGluQ29uZmlnID0gZmFsc2U7XG4gICAgY29uc3QgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZCA9PT0gJ2NvbmZpZzonIHx8IC9eY29uZmlnXFxzKjpcXHMqJC8udGVzdCh0cmltbWVkKSkge1xuICAgICAgICBpbkNvbmZpZyA9IHRydWU7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluQ29uZmlnKSB7XG4gICAgICAgIGlmICh0cmltbWVkICE9PSAnJyAmJiAhbGluZS5zdGFydHNXaXRoKCcgJykgJiYgIWxpbmUuc3RhcnRzV2l0aCgnXFx0JykpIGJyZWFrO1xuICAgICAgICBjb25zdCBrdiA9IGxpbmUubWF0Y2goL15cXHMrKFthLXpBLVpfXVthLXpBLVowLTlfLV0qKVxccyo6XFxzKiguKikkLyk7XG4gICAgICAgIGlmIChrdikge1xuICAgICAgICAgIGNvbnN0IGtleSA9IGt2WzFdLnRyaW0oKTtcbiAgICAgICAgICBsZXQgdmFsID0ga3ZbMl0udHJpbSgpO1xuICAgICAgICAgIGlmICgodmFsLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsLmVuZHNXaXRoKCdcIicpKSB8fCAodmFsLnN0YXJ0c1dpdGgoXCInXCIpICYmIHZhbC5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMSwgLTEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25maWdba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPyBjb25maWcgOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqIEVuc3VyZSBvY2lfYXBpZ2F0ZXdheV9kZXBsb3ltZW50Lmpzb24gZXhpc3RzIGluIHByb2plY3REaXI7IHdyaXRlIGRlZmF1bHQgaWYgbWlzc2luZy4gUmV0dXJucyBwYXRoLiAqL1xuZnVuY3Rpb24gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24ocHJvamVjdERpcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcCA9IHBhdGguam9pbihwcm9qZWN0RGlyLCAnb2NpX2FwaWdhdGV3YXlfZGVwbG95bWVudC5qc29uJyk7XG4gIGlmICghZnMuZXhpc3RzU3luYyhwKSkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMocCwgREVGQVVMVF9BUElHV19ERVBMT1lNRU5UX0pTT04sICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbmNvbnN0IFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQgPSBgIyEvdXNyL2Jpbi9lbnYgbm9kZVxuLyoqXG4gKiBUYWlsIE9DSSBGdW5jdGlvbnMgZXhlY3V0aW9uIGxvZ3MuIEdlbmVyYXRlZCBieSBPQ0RLLlxuICogUnVuIGZyb20gcHJvamVjdCByb290IGFmdGVyIGRlcGxveS4gUmVxdWlyZXM6IE9DSSBDTEksIE9DSV9DT01QQVJUTUVOVF9JRCwgYW5kIC5vY2RrLW91dHB1dHMuanNvbiAoY3JlYXRlZCBvbiBkZXBsb3kpLlxuICovXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xuY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuY29uc3QgeyBzcGF3blN5bmMgfSA9IHJlcXVpcmUoJ2NoaWxkX3Byb2Nlc3MnKTtcblxuY29uc3QgZGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUiB8fCBfX2Rpcm5hbWU7XG5jb25zdCBvdXRwdXRzUGF0aCA9IHBhdGguam9pbihkaXIsICcub2Nkay1vdXRwdXRzLmpzb24nKTtcbmlmICghZnMuZXhpc3RzU3luYyhvdXRwdXRzUGF0aCkpIHtcbiAgY29uc29sZS5lcnJvcignUnVuIGRlcGxveSBmaXJzdCB0byBjcmVhdGUgLm9jZGstb3V0cHV0cy5qc29uIGluIHRoZSBwcm9qZWN0IHJvb3QuJyk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IGNvbXBJZCA9IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRCB8fCBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfT0NJRDtcbmlmICghY29tcElkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ1NldCBPQ0lfQ09NUEFSVE1FTlRfSUQgKG9yIE9DSV9DT01QQVJUTUVOVF9PQ0lEKS4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxubGV0IG91dDtcbnRyeSB7XG4gIGNvbnN0IHJhdyA9IGZzLnJlYWRGaWxlU3luYyhvdXRwdXRzUGF0aCwgJ3V0ZjgnKS5yZXBsYWNlKC9eXFx1RkVGRi8sICcnKS50cmltKCk7XG4gIGNvbnN0IGZpcnN0ID0gcmF3LmluZGV4T2YoJ3snKTtcbiAgY29uc3QgbGFzdCA9IHJhdy5sYXN0SW5kZXhPZignfScpO1xuICBpZiAoZmlyc3QgPT09IC0xIHx8IGxhc3QgPD0gZmlyc3QpIHRocm93IG5ldyBFcnJvcignTm8gSlNPTicpO1xuICBvdXQgPSBKU09OLnBhcnNlKHJhdy5zbGljZShmaXJzdCwgbGFzdCArIDEpKTtcbn0gY2F0Y2ggKGUpIHtcbiAgY29uc29sZS5lcnJvcignSW52YWxpZCBvciBtaXNzaW5nIC5vY2RrLW91dHB1dHMuanNvbi4gUnVuIGRlcGxveSBmaXJzdC4nKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufVxuY29uc3Qgb3V0cHV0cyA9IG91dC5sb2dfZ3JvdXBfaWQgIT0gbnVsbCB8fCBvdXQuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsID8gb3V0IDogT2JqZWN0LnZhbHVlcyhvdXQpLmZpbmQoKHYpID0+IHYgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICh2LmxvZ19ncm91cF9pZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uX2xvZ19pZCAhPSBudWxsIHx8IHYubG9nR3JvdXBJZCAhPSBudWxsIHx8IHYuZXhlY3V0aW9uTG9nSWQgIT0gbnVsbCkpIHx8IG91dDtcbmZ1bmN0aW9uIHZhbChvLCBrKSB7XG4gIGxldCB2ID0gb1trXTtcbiAgaWYgKHYgPT0gbnVsbCkgdiA9IG9bay5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgYykgPT4gYy50b1VwcGVyQ2FzZSgpKV07XG4gIGlmICh2ID09IG51bGwpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIHJldHVybiB2LnRyaW0oKTtcbiAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiB2ICE9IG51bGwgJiYgJ3ZhbHVlJyBpbiB2KSByZXR1cm4gU3RyaW5nKHYudmFsdWUpLnRyaW0oKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmNvbnN0IGxvZ0dyb3VwSWQgPSB2YWwob3V0cHV0cywgJ2xvZ19ncm91cF9pZCcpIHx8IHZhbChvdXRwdXRzLCAnbG9nR3JvdXBJZCcpO1xuY29uc3QgZXhlY3V0aW9uTG9nSWQgPSB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbl9sb2dfaWQnKSB8fCB2YWwob3V0cHV0cywgJ2V4ZWN1dGlvbkxvZ0lkJyk7XG5pZiAoIWxvZ0dyb3VwSWQgfHwgIWV4ZWN1dGlvbkxvZ0lkKSB7XG4gIGNvbnNvbGUuZXJyb3IoJ2xvZ19ncm91cF9pZCBvciBleGVjdXRpb25fbG9nX2lkIG1pc3NpbmcgaW4gLm9jZGstb3V0cHV0cy5qc29uLiBLZXlzIGZvdW5kOiAnICsgT2JqZWN0LmtleXMob3V0cHV0cykuam9pbignLCAnKSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn1cbmNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5jb25zdCBzdGFydCA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxMCAqIDYwICogMTAwMCk7XG5jb25zdCB0aW1lU3RhcnQgPSBzdGFydC50b0lTT1N0cmluZygpO1xuY29uc3QgdGltZUVuZCA9IG5vdy50b0lTT1N0cmluZygpO1xuY29uc3Qgc2NvcGUgPSBjb21wSWQgKyAnLycgKyBsb2dHcm91cElkICsgJy8nICsgZXhlY3V0aW9uTG9nSWQ7XG5jb25zdCBxdWVyeSA9ICdzZWFyY2ggXCInICsgc2NvcGUgKyAnXCIgfCBzb3J0IGJ5IGRhdGV0aW1lIGRlc2MgfCBsaW1pdCA1MCc7XG5jb25zdCByID0gc3Bhd25TeW5jKCdvY2knLCBbJ2xvZ2dpbmctc2VhcmNoJywgJ3NlYXJjaC1sb2dzJywgJy0tc2VhcmNoLXF1ZXJ5JywgcXVlcnksICctLXRpbWUtc3RhcnQnLCB0aW1lU3RhcnQsICctLXRpbWUtZW5kJywgdGltZUVuZF0sIHsgc3RkaW86ICdpbmhlcml0Jywgc2hlbGw6IHRydWUgfSk7XG5wcm9jZXNzLmV4aXQoci5zdGF0dXMgPz8gMSk7XG5gO1xuXG4vKiogRW5zdXJlIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBleGlzdHMgaW4gcHJvamVjdERpcjsgd3JpdGUgZGVmYXVsdCBpZiBtaXNzaW5nLiBSZXR1cm5zIHBhdGguICovXG5mdW5jdGlvbiBlbnN1cmVUYWlsRnVuY3Rpb25Mb2dzU2NyaXB0KHByb2plY3REaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHAgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhaWwtZnVuY3Rpb24tbG9ncy5qcycpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocCkpIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHAsIFRBSUxfRlVOQ1RJT05fTE9HU19TQ1JJUFQsICd1dGY4Jyk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbi8qKiBSZWFkIHRlbmFuY3kgYW5kIHJlZ2lvbiBmcm9tIE9DSSBDTEkgY29uZmlnLiBEZWZhdWx0IGZpbGU6IH4vLm9jaS9jb25maWcsIGRlZmF1bHQgcHJvZmlsZTogREVGQVVMVC4gKi9cbmZ1bmN0aW9uIHJlYWRUZW5hbmN5QW5kUmVnaW9uRnJvbUNsaUNvbmZpZygpOiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKGNvbmZpZ1BhdGgpKSByZXR1cm4ge307XG4gICAgY29uc3QgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoL1xccj9cXG4vKTtcbiAgICBsZXQgaW5Qcm9maWxlID0gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0OiB7IHRlbmFuY3k/OiBzdHJpbmc7IHJlZ2lvbj86IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICBjb25zdCB0cmltbWVkID0gbGluZS50cmltKCk7XG4gICAgICBpZiAodHJpbW1lZC5zdGFydHNXaXRoKCdbJykgJiYgdHJpbW1lZC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICAgIGluUHJvZmlsZSA9IHRyaW1tZWQuc2xpY2UoMSwgLTEpID09PSBwcm9maWxlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5Qcm9maWxlKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgICBpZiAoZXEgPD0gMCkgY29udGludWU7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gdHJpbW1lZC5zbGljZShlcSArIDEpLnRyaW0oKTtcbiAgICAgIGlmIChrZXkgPT09ICd0ZW5hbmN5JykgcmVzdWx0LnRlbmFuY3kgPSB2YWx1ZTtcbiAgICAgIGlmIChrZXkgPT09ICdyZWdpb24nKSByZXN1bHQucmVnaW9uID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7fTtcbiAgfVxufVxuXG4vKiogR2V0IG9iamVjdCBzdG9yYWdlIG5hbWVzcGFjZSB2aWEgT0NJIFNESyAoc2FtZSBhcyBcIm9jaSBvcyBucyBnZXRcIikuIFVzZXMgfi8ub2NpL2NvbmZpZywgREVGQVVMVCBwcm9maWxlLiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkOiBzdHJpbmcsIHJlZ2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHByb2Nlc3MuZW52Lk9DSV9DT05GSUdfRklMRSB8fCBwYXRoLmpvaW4ob3MuaG9tZWRpcigpLCAnLm9jaScsICdjb25maWcnKTtcbiAgY29uc3QgcHJvZmlsZSA9IHByb2Nlc3MuZW52Lk9DSV9DTElfUFJPRklMRSB8fCAnREVGQVVMVCc7XG4gIHRyeSB7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBuZXcgY29tbW9uLkNvbmZpZ0ZpbGVBdXRoZW50aWNhdGlvbkRldGFpbHNQcm92aWRlcihjb25maWdQYXRoLCBwcm9maWxlKTtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgb2JqZWN0c3RvcmFnZS5PYmplY3RTdG9yYWdlQ2xpZW50KHsgYXV0aGVudGljYXRpb25EZXRhaWxzUHJvdmlkZXI6IHByb3ZpZGVyIH0pO1xuICAgIGNsaWVudC5yZWdpb25JZCA9IHJlZ2lvbjtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXROYW1lc3BhY2Uoe1xuICAgICAgY29tcGFydG1lbnRJZCxcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UudmFsdWU/LnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEZpbmQgYSBKQVIgdW5kZXIgdGFyZ2V0LyAocHJlZmVyIG9uZSBtYXRjaGluZyBuYW1lLCBlbHNlIGZpcnN0IC5qYXIpLlxuICovXG5mdW5jdGlvbiBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpcjogc3RyaW5nLCBmdW5jdGlvbk5hbWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB0YXJnZXREaXIgPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3RhcmdldCcpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldERpcik7XG4gICAgY29uc3QgamFycyA9IGZpbGVzLmZpbHRlcigoZikgPT4gZi5lbmRzV2l0aCgnLmphcicpICYmICFmLmVuZHNXaXRoKCctc291cmNlcy5qYXInKSk7XG4gICAgaWYgKGphcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmIChmdW5jdGlvbk5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gamFycy5maW5kKChqKSA9PiBqLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZnVuY3Rpb25OYW1lLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIGlmIChtYXRjaCkgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguam9pbih0YXJnZXREaXIsIGphcnNbMF0pO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBUcnVlIGlmIHByb2plY3QgaGFzIHBvbS54bWwgYW5kIHNyYy8gKE1hdmVuIHNvdXJjZSBsYXlvdXQgZm9yIGJ1aWxkLWZyb20tc291cmNlIERvY2tlcmZpbGUpLiAqL1xuZnVuY3Rpb24gaGFzUG9tQW5kU3JjKHByb2plY3REaXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwb20gPSBwYXRoLmpvaW4ocHJvamVjdERpciwgJ3BvbS54bWwnKTtcbiAgY29uc3Qgc3JjID0gcGF0aC5qb2luKHByb2plY3REaXIsICdzcmMnKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwb20pICYmIGZzLmV4aXN0c1N5bmMoc3JjKSAmJiBmcy5zdGF0U3luYyhzcmMpLmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNjb3ZlckZyb21GdW5jWWFtbEFuZFRhcmdldCgpOiB7XG4gIGZ1bmN0aW9uTmFtZT86IHN0cmluZztcbiAgZnVuY3Rpb25BcHBOYW1lPzogc3RyaW5nO1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIGhhbmRsZXI/OiBzdHJpbmc7XG4gIHVzZVRoaW5Eb2NrZXJmaWxlPzogYm9vbGVhbjtcbiAgbWVtb3J5TWI/OiBudW1iZXI7XG4gIHRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGxldCBwcm9qZWN0RGlyID0gcHJvY2Vzcy5lbnYuT0NES19QUk9KRUNUX0RJUj8udHJpbSgpO1xuICBpZiAoIXByb2plY3REaXIpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCAnLm9jZGstcHJvamVjdC1kaXInKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBwcm9qZWN0RGlyID0gZnMucmVhZEZpbGVTeW5jKHAsICd1dGY4JykudHJpbSgpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG4gIGlmICghcHJvamVjdERpciAmJiBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSkFSX1BBVEg/LnRyaW0oKSkge1xuICAgIGNvbnN0IHAgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRILnRyaW0oKSk7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocCkpIHByb2plY3REaXIgPSBmcy5zdGF0U3luYyhwKS5pc0RpcmVjdG9yeSgpID8gcCA6IHBhdGguZGlybmFtZShwKTtcbiAgfVxuICBpZiAoIXByb2plY3REaXIpIHByb2plY3REaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICBwcm9qZWN0RGlyID0gcHJvamVjdERpciA/IHBhdGgucmVzb2x2ZShwcm9qZWN0RGlyKSA6ICcnO1xuICBpZiAoIXByb2plY3REaXIgfHwgIWZzLmV4aXN0c1N5bmMocHJvamVjdERpcikpIHJldHVybiB7fTtcblxuICBjb25zdCBuYW1lRnJvbVlhbWwgPSBnZXRGdW5jWWFtbE5hbWUocHJvamVjdERpcik7XG4gIGNvbnN0IGphclBhdGggPSBmaW5kSmFySW5UYXJnZXQocHJvamVjdERpciwgbmFtZUZyb21ZYW1sIHx8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGhhc1NvdXJjZSA9IGhhc1BvbUFuZFNyYyhwcm9qZWN0RGlyKTtcbiAgaWYgKCFqYXJQYXRoICYmICFoYXNTb3VyY2UpIHJldHVybiB7fTtcblxuICBjb25zdCBmdW5jdGlvbk5hbWUgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fTkFNRT8udHJpbSgpIHx8IG5hbWVGcm9tWWFtbCB8fCBwYXRoLmJhc2VuYW1lKHByb2plY3REaXIpIHx8ICdvY2ktZnVuY3Rpb24nO1xuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBnZXRGdW5jWWFtbFZlcnNpb24ocHJvamVjdERpcik7XG4gIGNvbnN0IGhhbmRsZXIgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fSEFORExFUj8udHJpbSgpIHx8IGdldEZ1bmNZYW1sSGFuZGxlcihwcm9qZWN0RGlyKTtcbiAgY29uc3QgdXNlVGhpbkRvY2tlcmZpbGUgPSAhIWphclBhdGg7XG4gIGNvbnN0IG1lbW9yeU1iID0gZ2V0RnVuY1lhbWxNZW1vcnkocHJvamVjdERpcik7XG4gIGNvbnN0IHRpbWVvdXRTZWNvbmRzID0gZ2V0RnVuY1lhbWxUaW1lb3V0KHByb2plY3REaXIpO1xuICBjb25zdCBjb25maWcgPSBnZXRGdW5jWWFtbENvbmZpZyhwcm9qZWN0RGlyKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRT8udHJpbSgpIHx8IGZ1bmN0aW9uTmFtZSxcbiAgICBkb2NrZXJDb250ZXh0UGF0aDogcGF0aC5yZXNvbHZlKHByb2plY3REaXIpLFxuICAgIGltYWdlVGFnOiBpbWFnZVRhZyB8fCB1bmRlZmluZWQsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgbWVtb3J5TWIsXG4gICAgdGltZW91dFNlY29uZHMsXG4gICAgY29uZmlnLFxuICB9O1xufVxuXG5jb25zdCBiYWNrZW5kVHlwZSA9IChwcm9jZXNzLmVudi5PQ0lfU1RBVEVfQkFDS0VORF9UWVBFIHx8ICdsb2NhbCcpIGFzICdvY2knIHwgJ2h0dHAnIHwgJ2xvY2FsJztcblxuY29uc3QgYmFja2VuZENvbmZpZzogT2NpQmFja2VuZENvbmZpZyB8IHVuZGVmaW5lZCA9IGJhY2tlbmRUeXBlID09PSAnbG9jYWwnXG4gID8gdW5kZWZpbmVkXG4gIDogYmFja2VuZFR5cGUgPT09ICdvY2knXG4gICAgPyB7XG4gICAgICAgIHR5cGU6ICdvY2knLFxuICAgICAgICBidWNrZXQ6IHByb2Nlc3MuZW52Lk9DSV9TVEFURV9CVUNLRVQgfHwgJ3RmLXN0YXRlJyxcbiAgICAgICAga2V5OiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfS0VZIHx8ICdmdW5jdGlvbi1zdGFjay90ZXJyYWZvcm0udGZzdGF0ZScsXG4gICAgICB9XG4gICAgOiB7XG4gICAgICAgIHR5cGU6ICdodHRwJyxcbiAgICAgICAgYWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfQUREUkVTUyB8fCAnJyxcbiAgICAgICAgdXBkYXRlTWV0aG9kOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VUERBVEVfTUVUSE9EIHx8ICdQVVQnLFxuICAgICAgICBsb2NrQWRkcmVzczogcHJvY2Vzcy5lbnYuT0NJX1NUQVRFX0hUVFBfTE9DS19BRERSRVNTLFxuICAgICAgICB1bmxvY2tBZGRyZXNzOiBwcm9jZXNzLmVudi5PQ0lfU1RBVEVfSFRUUF9VTkxPQ0tfQUREUkVTUyxcbiAgICAgIH07XG5cbi8qKlxuICogTG9hZCBPQ0kgY29uZmlnIGZyb20gZW52IGFuZCBDTEkgY29uZmlnLiBXaGVuIE9DSV9OQU1FU1BBQ0UgaXMgdW5zZXQsIGZldGNoZXMgaXQgdmlhIE9DSSBTREsgKGdldE5hbWVzcGFjZSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRPY2lDb25maWcoKTogUHJvbWlzZTxPY2lDb25maWc+IHtcbiAgY29uc3QgY2xpQ29uZmlnID0gcmVhZFRlbmFuY3lBbmRSZWdpb25Gcm9tQ2xpQ29uZmlnKCk7XG4gIGNvbnN0IGNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfQ09NUEFSVE1FTlRfSUQ/LnRyaW0oKSB8fCAnb2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uJztcbiAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IHByb2Nlc3MuZW52Lk9DSV9DT01QQVJUTUVOVF9JRD8udHJpbSgpIHx8IGNvbXBhcnRtZW50SWQ7XG4gIGNvbnN0IHRlbmFuY3lJZCA9IHByb2Nlc3MuZW52Lk9DSV9URU5BTkNZX0lEPy50cmltKCkgfHwgY2xpQ29uZmlnLnRlbmFuY3k/LnRyaW0oKSB8fCAnb2NpZDEudGVuYW5jeS5vYzEuLmFhYWFhYWEuLi4nO1xuICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5PQ0lfUkVHSU9OPy50cmltKCkgfHwgY2xpQ29uZmlnLnJlZ2lvbj8udHJpbSgpIHx8ICdldS1mcmFua2Z1cnQtMSc7XG5cbiAgaWYgKCFvY2lyQ29tcGFydG1lbnRJZCB8fCBvY2lyQ29tcGFydG1lbnRJZC5pbmNsdWRlcygncm9vdCcpKSB7XG4gICAgY29uc29sZS53YXJuKCfimqDvuI8gIFdBUk5JTkc6IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIG5vdCBzZXQgb3Igc2V0IHRvIHJvb3QgY29tcGFydG1lbnQuJyk7XG4gICAgY29uc29sZS53YXJuKCcgICBQbGVhc2Ugc2V0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEIHRvIHlvdXIgaG9tZSBjb21wYXJ0bWVudCBPQ0lELicpO1xuICAgIGNvbnNvbGUud2FybignICAgRXhhbXBsZTogZXhwb3J0IE9DSV9PQ0lSX0NPTVBBUlRNRU5UX0lEPVwib2NpZDEuY29tcGFydG1lbnQub2MxLi5hYWFhYWFhLi4uXCInKTtcbiAgfVxuXG4gIGxldCBuYW1lc3BhY2UgPSBwcm9jZXNzLmVudi5PQ0lfTkFNRVNQQUNFPy50cmltKCk7XG4gIGlmICghbmFtZXNwYWNlIHx8IG5hbWVzcGFjZSA9PT0gJ3lvdXItbmFtZXNwYWNlJykge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgZ2V0TmFtZXNwYWNlRnJvbU9jaVNkayhjb21wYXJ0bWVudElkLCByZWdpb24pO1xuICAgIGlmIChyZXNvbHZlZCkgbmFtZXNwYWNlID0gcmVzb2x2ZWQ7XG4gICAgZWxzZSBpZiAoIW5hbWVzcGFjZSkgbmFtZXNwYWNlID0gJ3lvdXItbmFtZXNwYWNlJztcbiAgICBpZiAobmFtZXNwYWNlID09PSAneW91ci1uYW1lc3BhY2UnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ+KaoO+4jyAgT0NJX05BTUVTUEFDRSBub3Qgc2V0IGFuZCBTREsgY291bGQgbm90IHJlc29sdmUgaXQuIFNldCBPQ0lfTkFNRVNQQUNFIG9yIHJ1biBcIm9jaSBzZXR1cCBjb25maWdcIi4nKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkaXNjb3ZlcmVkID0gZGlzY292ZXJGcm9tRnVuY1lhbWxBbmRUYXJnZXQoKTtcblxuICBjb25zdCBpbWFnZVRhZyA9IHByb2Nlc3MuZW52Lk9DSV9JTUFHRV9UQUc/LnRyaW0oKSB8fCBkaXNjb3ZlcmVkLmltYWdlVGFnIHx8ICdsYXRlc3QnO1xuXG4gIGxldCBkb2NrZXJDb250ZXh0UGF0aCA9IGRpc2NvdmVyZWQuZG9ja2VyQ29udGV4dFBhdGg7XG4gIGlmICghZG9ja2VyQ29udGV4dFBhdGggJiYgcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkpIHtcbiAgICBjb25zdCBwID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9KQVJfUEFUSC50cmltKCkpO1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHApKSBkb2NrZXJDb250ZXh0UGF0aCA9IGZzLnN0YXRTeW5jKHApLmlzRGlyZWN0b3J5KCkgPyBwIDogcGF0aC5kaXJuYW1lKHApO1xuICB9XG5cbiAgY29uc3QgaGFuZGxlciA9IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9IQU5ETEVSPy50cmltKCkgfHwgZGlzY292ZXJlZC5oYW5kbGVyO1xuICBjb25zdCB1c2VUaGluRG9ja2VyZmlsZSA9IGRpc2NvdmVyZWQudXNlVGhpbkRvY2tlcmZpbGUgPz8gZmFsc2U7XG5cbiAgY29uc3QgbWVtb3J5RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX01FTU9SWV9NQj8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvbk1lbW9yeU1iID0gbWVtb3J5RW52XG4gICAgPyBTdHJpbmcocGFyc2VJbnQobWVtb3J5RW52LCAxMCkpXG4gICAgOiAoZGlzY292ZXJlZC5tZW1vcnlNYiAhPSBudWxsID8gU3RyaW5nKGRpc2NvdmVyZWQubWVtb3J5TWIpIDogdW5kZWZpbmVkKTtcblxuICBjb25zdCB0aW1lb3V0RW52ID0gcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX1RJTUVPVVRfU0VDT05EUz8udHJpbSgpO1xuICBjb25zdCBmdW5jdGlvblRpbWVvdXRTZWNvbmRzID0gdGltZW91dEVudlxuICAgID8gcGFyc2VJbnQodGltZW91dEVudiwgMTApXG4gICAgOiBkaXNjb3ZlcmVkLnRpbWVvdXRTZWNvbmRzO1xuXG4gIGxldCBmdW5jdGlvbkNvbmZpZyA9IGRpc2NvdmVyZWQuY29uZmlnO1xuICBjb25zdCBjb25maWdFbnYgPSBwcm9jZXNzLmVudi5PQ0lfRlVOQ1RJT05fQ09ORklHPy50cmltKCk7XG4gIGlmIChjb25maWdFbnYpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb25maWdFbnYpIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICBmdW5jdGlvbkNvbmZpZyA9IHsgLi4uZnVuY3Rpb25Db25maWcsIC4uLnBhcnNlZCB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gaWdub3JlIGludmFsaWQgSlNPTlxuICAgIH1cbiAgfVxuICBpZiAoZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoZnVuY3Rpb25Db25maWcpLmxlbmd0aCA9PT0gMCkgZnVuY3Rpb25Db25maWcgPSB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYXBpR3dEZXBsb3ltZW50SnNvbkVudiA9IHByb2Nlc3MuZW52Lk9DSV9BUElHQVRFV0FZX0RFUExPWU1FTlRfSlNPTj8udHJpbSgpO1xuICBjb25zdCBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCA9IGFwaUd3RGVwbG95bWVudEpzb25FbnZcbiAgICA/IHBhdGgucmVzb2x2ZShhcGlHd0RlcGxveW1lbnRKc29uRW52KVxuICAgIDogZG9ja2VyQ29udGV4dFBhdGhcbiAgICAgID8gZW5zdXJlRGVmYXVsdEFwaUd3RGVwbG95bWVudEpzb24oZG9ja2VyQ29udGV4dFBhdGgpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGRvY2tlckNvbnRleHRQYXRoKSB7XG4gICAgZW5zdXJlVGFpbEZ1bmN0aW9uTG9nc1NjcmlwdChkb2NrZXJDb250ZXh0UGF0aCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbXBhcnRtZW50SWQsXG4gICAgb2NpckNvbXBhcnRtZW50SWQ6IG9jaXJDb21wYXJ0bWVudElkIHx8IHVuZGVmaW5lZCxcbiAgICB0ZW5hbmN5SWQsXG4gICAgcmVnaW9uLFxuICAgIG5hbWVzcGFjZSxcbiAgICBmdW5jdGlvbkFwcE5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9BUFBfTkFNRSA/PyBkaXNjb3ZlcmVkLmZ1bmN0aW9uQXBwTmFtZSA/PyAnJyxcbiAgICBmdW5jdGlvbk5hbWU6IHByb2Nlc3MuZW52Lk9DSV9GVU5DVElPTl9OQU1FID8/IGRpc2NvdmVyZWQuZnVuY3Rpb25OYW1lID8/ICcnLFxuICAgIGZ1bmN0aW9uSmFyUGF0aDogcHJvY2Vzcy5lbnYuT0NJX0ZVTkNUSU9OX0pBUl9QQVRIPy50cmltKCkgfHwgdW5kZWZpbmVkLFxuICAgIGRvY2tlckNvbnRleHRQYXRoOiBkb2NrZXJDb250ZXh0UGF0aCB8fCB1bmRlZmluZWQsXG4gICAgaW1hZ2VUYWcsXG4gICAgaGFuZGxlcjogaGFuZGxlciB8fCB1bmRlZmluZWQsXG4gICAgdXNlVGhpbkRvY2tlcmZpbGUsXG4gICAgb2NpclJlcG9zaXRvcnlOYW1lOiBwcm9jZXNzLmVudi5PQ0lfT0NJUl9SRVBPU0lUT1JZX05BTUUgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uTWVtb3J5TWI6IGZ1bmN0aW9uTWVtb3J5TWIgfHwgdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uVGltZW91dFNlY29uZHM6IGZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gdW5kZWZpbmVkLFxuICAgIGZ1bmN0aW9uQ29uZmlnLFxuICAgIGFwaUd3RGVwbG95bWVudEpzb25QYXRoOiBhcGlHd0RlcGxveW1lbnRKc29uUGF0aCB8fCB1bmRlZmluZWQsXG4gICAgYmFja2VuZDogYmFja2VuZENvbmZpZyxcbiAgfTtcbn1cbiJdfQ==
@@ -357,7 +357,7 @@ tail-function-logs.sh
357
357
  this.addOverride(`resource.null_resource.${writeOutputsId}.provisioner`, [
358
358
  {
359
359
  'local-exec': {
360
- command: 'if [ -n "$OCDK_PROJECT_DIR" ]; then cdktf output -json > "$OCDK_PROJECT_DIR/.ocdk-outputs.json"; fi',
360
+ command: 'if [ -n "$OCDK_PROJECT_DIR" ]; then terraform output -json > "$OCDK_PROJECT_DIR/.ocdk-outputs.json"; fi',
361
361
  },
362
362
  },
363
363
  ]);
@@ -376,4 +376,4 @@ tail-function-logs.sh
376
376
  }
377
377
  }
378
378
  exports.OciStack = OciStack;
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vb2NpLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlDQUF3RDtBQUN4RCw2REFBNkQ7QUFDN0QseUdBQW9HO0FBQ3BHLDZEQUF5RDtBQUN6RCxtRUFBK0Q7QUFDL0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUNoRix5RkFBbUY7QUFDbkYsNkVBQXdFO0FBQ3hFLHVGQUFrRjtBQUNsRixpRkFBNkU7QUFDN0UsdUZBQW1GO0FBQ25GLHVGQUFtRjtBQUNuRixpRkFBNkU7QUFDN0UsK0VBQTBFO0FBQzFFLG1FQUErRDtBQUMvRCxxREFBcUY7QUFDckYsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQXdDN0IsTUFBYSxRQUFTLFNBQVEsc0JBQWM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxNQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDZDQUE2QztRQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbEMscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO29CQUNwQyxHQUFHLEVBQUU7d0JBQ0gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTTt3QkFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO3dCQUMzQixHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLG9CQUFvQjt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7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QUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBRUQseUhBQXlIO1FBQ3pILElBQUksQ0FBQyxXQUFXLENBQUMsa0NBQWtDLEVBQUU7WUFDbkQsTUFBTSxFQUFFLFlBQVk7WUFDcEIsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFoVkQsNEJBZ1ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjaywgVGVycmFmb3JtT3V0cHV0IH0gZnJvbSAnY2RrdGYnO1xuaW1wb3J0IHsgT2NpUHJvdmlkZXIgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvcHJvdmlkZXInO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcnRpZmFjdHMtY29udGFpbmVyLXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQ29yZVZjbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXZjbic7XG5pbXBvcnQgeyBDb3JlU3VibmV0IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtc3VibmV0JztcbmltcG9ydCB7IENvcmVTZWN1cml0eUxpc3QgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1zZWN1cml0eS1saXN0JztcbmltcG9ydCB7IENvcmVTZXJ2aWNlR2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXNlcnZpY2UtZ2F0ZXdheSc7XG5pbXBvcnQgeyBEYXRhT2NpQ29yZVNlcnZpY2VzIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2RhdGEtb2NpLWNvcmUtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZVJvdXRlVGFibGUgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1yb3V0ZS10YWJsZSc7XG5pbXBvcnQgeyBDb3JlSW50ZXJuZXRHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtaW50ZXJuZXQtZ2F0ZXdheSc7XG5pbXBvcnQgeyBBcGlnYXRld2F5R2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcGlnYXRld2F5LWdhdGV3YXknO1xuaW1wb3J0IHsgQXBpZ2F0ZXdheURlcGxveW1lbnQgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvYXBpZ2F0ZXdheS1kZXBsb3ltZW50JztcbmltcG9ydCB7IEZ1bmN0aW9uc0FwcGxpY2F0aW9uIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2Z1bmN0aW9ucy1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBGdW5jdGlvbnNGdW5jdGlvbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9mdW5jdGlvbnMtZnVuY3Rpb24nO1xuaW1wb3J0IHsgTG9nZ2luZ0xvZ0dyb3VwIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2xvZ2dpbmctbG9nLWdyb3VwJztcbmltcG9ydCB7IExvZ2dpbmdMb2cgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvbG9nZ2luZy1sb2cnO1xuaW1wb3J0IHsgT2NpQmFja2VuZENvbmZpZywgb2Npckhvc3RLZXksIGdldE9jaUltYWdlVXJsIH0gZnJvbSAnLi4vY29uZmlnL29jaS1jb25maWcnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBPY2lTdGFja0NvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKiBPQ0kgRnVuY3Rpb25zIGFwcGxpY2F0aW9uIG5hbWUgKGUuZy4gbXktYXBwKS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgb3IgcGFzcyBpbiBjb25maWcuICovXG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICAvKiogT0NJIEZ1bmN0aW9uIG5hbWUgKGUuZy4gbXktZnVuY3Rpb24pLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9OQU1FIG9yIHBhc3MgaW4gY29uZmlnLiAqL1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHBhdGggdG8gSkFSIChvciBEb2NrZXJmaWxlIGNvbnRleHQpIHRvIGJ1aWxkIGFuZCBkZXBsb3kgYXMgdGhlIGZ1bmN0aW9uIGltYWdlLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9KQVJfUEFUSC4gRW1wdHkgPSBubyBmdW5jdGlvbi9pbWFnZSBidWlsZC4gKi9cbiAgZnVuY3Rpb25KYXJQYXRoPzogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGFyZ2V0LyAoRG9ja2VyZmlsZSBpcyBnZW5lcmF0ZWQgaW4gbG9jYWwtZXhlYykuIFdoZW4gc2V0IHdpdGggZnVuY3Rpb25OYW1lLCBjcmVhdGVzIFZDTiwgRnVuY3Rpb24sIEFQSSBHYXRld2F5LiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVIpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyB0aGluIERvY2tlcmZpbGUgKG5vIE1hdmVuIGluIGltYWdlKTsgZnVsbCBidWlsZCBvbmx5IGluIHJlZGVwbG95OmZ1bmN0aW9uLiAqL1xuICB1c2VUaGluRG9ja2VyZmlsZT86IGJvb2xlYW47XG4gIG9jaXJSZXBvc2l0b3J5TmFtZT86IHN0cmluZztcbiAgLyoqIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgcGF0aCBwcmVmaXguIERlZmF1bHQgJy8nLiAqL1xuICBhcGlHd1BhdGhQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBBUEkgR2F0ZXdheSByb3V0ZSBwYXRoLiBEZWZhdWx0ICcve3BhdGgqfScuICovXG4gIGFwaUd3Um91dGVQYXRoPzogc3RyaW5nO1xuICAvKiogQVBJIEdhdGV3YXkgcm91dGUgbWV0aG9kcy4gRGVmYXVsdCBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXS4gKi9cbiAgYXBpR3dNZXRob2RzPzogc3RyaW5nW107XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKGUuZy4gJzI1NicpLiBGcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fTUVNT1JZX01CLiAqL1xuICBmdW5jdGlvbk1lbW9yeU1iPzogc3RyaW5nO1xuICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzLiBGcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTLiAqL1xuICBmdW5jdGlvblRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogRnVuY3Rpb24gY29uZmlnL2VudiBrZXktdmFsdWUuIEZyb20gZnVuYy55YW1sIGNvbmZpZyBvciBPQ0lfRlVOQ1RJT05fQ09ORklHLiAqL1xuICBmdW5jdGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBQYXRoIHRvIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgc3BlYyBKU09OIChyb3V0ZXMpLiBEZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE9jaVN0YWNrIGV4dGVuZHMgVGVycmFmb3JtU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IE9jaVN0YWNrQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENvbmZpZ3VyZSBUZXJyYWZvcm0gYmFja2VuZCAoaWYgbm90IGxvY2FsKVxuICAgIGlmIChjb25maWcuYmFja2VuZCAmJiBjb25maWcuYmFja2VuZC50eXBlICE9PSAnbG9jYWwnKSB7XG4gICAgICBpZiAoY29uZmlnLmJhY2tlbmQudHlwZSA9PT0gJ29jaScpIHtcbiAgICAgICAgLy8gT0NJIG5hdGl2ZSBiYWNrZW5kXG4gICAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5iYWNrZW5kJywge1xuICAgICAgICAgIG9jaToge1xuICAgICAgICAgICAgYnVja2V0OiBjb25maWcuYmFja2VuZC5idWNrZXQsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IGNvbmZpZy5uYW1lc3BhY2UsXG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5iYWNrZW5kLmtleSB8fCBgJHtpZH0vdGVycmFmb3JtLnRmc3RhdGVgLFxuICAgICAgICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcuYmFja2VuZC50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgLy8gSFRUUCBiYWNrZW5kIChmb3IgT0NJIE9iamVjdCBTdG9yYWdlIHZpYSBSRVNUIEFQSSlcbiAgICAgICAgY29uc3QgaHR0cEJhY2tlbmQ6IGFueSA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb25maWcuYmFja2VuZC5hZGRyZXNzLFxuICAgICAgICAgIHVwZGF0ZV9tZXRob2Q6IGNvbmZpZy5iYWNrZW5kLnVwZGF0ZU1ldGhvZCB8fCAnUFVUJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbmZpZy5iYWNrZW5kLmxvY2tBZGRyZXNzKSB7XG4gICAgICAgICAgaHR0cEJhY2tlbmQubG9ja19hZGRyZXNzID0gY29uZmlnLmJhY2tlbmQubG9ja0FkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5iYWNrZW5kLnVubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgICBodHRwQmFja2VuZC51bmxvY2tfYWRkcmVzcyA9IGNvbmZpZy5iYWNrZW5kLnVubG9ja0FkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLmJhY2tlbmQnLCB7XG4gICAgICAgICAgaHR0cDogaHR0cEJhY2tlbmQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9DSSBQcm92aWRlclxuICAgIG5ldyBPY2lQcm92aWRlcih0aGlzLCAnb2NpJywge1xuICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgdGVuYW5jeU9jaWQ6IGNvbmZpZy50ZW5hbmN5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBPQ0lSIENvbnRhaW5lciBSZXBvc2l0b3J5IChyb290IGNvbXBhcnRtZW50IGFsbG93ZWQgaWYgZXhwbGljaXRseSBzZXQpXG4gICAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBjb25maWcub2NpckNvbXBhcnRtZW50SWQgfHwgY29uZmlnLmNvbXBhcnRtZW50SWQ7XG4gICAgY29uc3Qgb2NpclJlcG9OYW1lID0gY29uZmlnLm9jaXJSZXBvc2l0b3J5TmFtZSB8fCBjb25maWcuZnVuY3Rpb25OYW1lIHx8ICdvY2ktZnVuY3Rpb24nO1xuXG4gICAgY29uc3Qgb2NpclJlcG9zaXRvcnkgPSBuZXcgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSh0aGlzLCAnT2NpclJlcG9zaXRvcnknLCB7XG4gICAgICBjb21wYXJ0bWVudElkOiBvY2lyQ29tcGFydG1lbnRJZCxcbiAgICAgIGRpc3BsYXlOYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICBpc1B1YmxpYzogZmFsc2UsIC8vIFByaXZhdGUgcmVwb3NpdG9yeSBieSBkZWZhdWx0XG4gICAgICBpc0ltbXV0YWJsZTogZmFsc2UsIC8vIEFsbG93IGltYWdlIHVwZGF0ZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvY2tlckNvbnRleHRQYXRoID0gKGNvbmZpZy5kb2NrZXJDb250ZXh0UGF0aCB8fCBjb25maWcuZnVuY3Rpb25KYXJQYXRoKT8udHJpbSgpO1xuICAgIGNvbnN0IGNyZWF0ZUZ1bGxTdGFjayA9IGNvbmZpZy5mdW5jdGlvbk5hbWUgJiYgZG9ja2VyQ29udGV4dFBhdGg7XG5cbiAgICBpZiAoY3JlYXRlRnVsbFN0YWNrKSB7XG4gICAgICBpZiAob2NpckNvbXBhcnRtZW50SWQuaW5jbHVkZXMoJ3Jvb3QnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Z1bGwgc3RhY2sgKEZ1bmN0aW9uICsgQVBJIEdhdGV3YXkpIHJlcXVpcmVzIGEgbm9uLXJvb3QgY29tcGFydG1lbnQgZm9yIE9DSVIuIFNldCBPQ0lfT0NJUl9DT01QQVJUTUVOVF9JRCB0byB5b3VyIGhvbWUgY29tcGFydG1lbnQgT0NJRC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBmdW5jdGlvbkNvZGVQYXRoID0gcGF0aC5yZXNvbHZlKGRvY2tlckNvbnRleHRQYXRoISk7XG4gICAgICBjb25zdCBpbWFnZVRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgICAgIGNvbnN0IG9jaXJSZWdpc3RyeSA9IGAke29jaXJIb3N0S2V5KGNvbmZpZy5yZWdpb24pfS5vY2lyLmlvYDtcbiAgICAgIGNvbnN0IGltYWdlVXJsID0gZ2V0T2NpSW1hZ2VVcmwoY29uZmlnKTtcbiAgICAgIGNvbnN0IGFwcE5hbWUgPSBjb25maWcuZnVuY3Rpb25BcHBOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUhO1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXBwTmFtZTtcblxuICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycy5udWxsJywge1xuICAgICAgICBzb3VyY2U6ICdoYXNoaWNvcnAvbnVsbCcsXG4gICAgICAgIHZlcnNpb246ICd+PiAzLjAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidWlsZEFuZFB1c2hJbWFnZUlkID0gJ0J1aWxkQW5kUHVzaEltYWdlJztcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5kZXBlbmRzX29uYCwgW1xuICAgICAgICAnb2NpX2FydGlmYWN0c19jb250YWluZXJfcmVwb3NpdG9yeS5PY2lyUmVwb3NpdG9yeScsXG4gICAgICBdKTtcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS50cmlnZ2Vyc2AsIHtcbiAgICAgICAgcmVwb19uYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICAgIGltYWdlX3VybDogaW1hZ2VVcmwsXG4gICAgICAgIGltYWdlX3RhZzogaW1hZ2VUYWcsXG4gICAgICAgIGhhbmRsZXI6IGNvbmZpZy5oYW5kbGVyIHx8ICcnLFxuICAgICAgICB1c2VfdGhpbl9kb2NrZXJmaWxlOiBjb25maWcudXNlVGhpbkRvY2tlcmZpbGUgPT09IHRydWUgPyAnMScgOiAnMCcsXG4gICAgICAgIG5hbWVzcGFjZTogY29uZmlnLm5hbWVzcGFjZSxcbiAgICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWdpb25QID0gY29uZmlnLnJlZ2lvbjtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZVAgPSBjb25maWcubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgb2NpclVzZXIgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9VU0VSTkFNRSB8fCAnQVVUT19ERVRFQ1QnO1xuICAgICAgY29uc3QgbG9naW5TY3JpcHQgPSBwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTlxuICAgICAgICA/IGBleHBvcnQgT0NJUl9BVVRIX1RPS0VOPVwiJHtwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTn1cIjsgT0NJUl9VU0VSPVwiJHtvY2lyVXNlcn1cIjsgWyBcIiRPQ0lSX1VTRVJcIiA9IFwiQVVUT19ERVRFQ1RcIiBdICYmIE9DSVJfVVNFUj1cIiR7bmFtZXNwYWNlUH0vdXNlclwiOyBlY2hvIFwiJE9DSVJfQVVUSF9UT0tFTlwiIHwgZG9ja2VyIGxvZ2luICR7b2NpclJlZ2lzdHJ5fSAtdSBcIiRPQ0lSX1VTRVJcIiAtLXBhc3N3b3JkLXN0ZGluIHx8IGV4aXQgMWBcbiAgICAgICAgOiBgb2NpIHJhdy1yZXF1ZXN0IC0tcmVnaW9uICR7cmVnaW9uUH0gLS1odHRwLW1ldGhvZCBHRVQgLS10YXJnZXQtdXJpIFwiaHR0cHM6Ly8ke29jaXJSZWdpc3RyeX0vMjAxODA0MTkvZG9ja2VyL3Rva2VuXCIgMj4vZGV2L251bGwgfCAoY29tbWFuZCAtdiBqcSA+L2Rldi9udWxsICYmIGpxIC1yIC5kYXRhLnRva2VuIHx8IGdyZXAgLW8gJ1widG9rZW5cIjpcIlteXCJdKlwiJyB8IGN1dCAtZCdcIicgLWY0KSB8IGRvY2tlciBsb2dpbiAtdSBCRUFSRVJfVE9LRU4gLS1wYXNzd29yZC1zdGRpbiAke29jaXJSZWdpc3RyeX0gfHwgKGVjaG8gXCJTZXQgT0NJX0FVVEhfVE9LRU4gb3IgY29uZmlndXJlIE9DSSBDTElcIiA+JjI7IGV4aXQgMSlgO1xuICAgICAgY29uc3QgaGFuZGxlciA9IGNvbmZpZy5oYW5kbGVyIHx8ICdjb20uZXhhbXBsZS5mbi5IZWxsb0Z1bmN0aW9uOjpoYW5kbGVSZXF1ZXN0JztcbiAgICAgIGNvbnN0IHVzZVRoaW4gPSBjb25maWcudXNlVGhpbkRvY2tlcmZpbGUgPT09IHRydWU7XG4gICAgICBjb25zdCBkb2NrZXJmaWxlQ29udGVudFRoaW4gPSBgRlJPTSBmbnByb2plY3QvZm4tamF2YS1mZGs6anJlMTctMS4xLjVcbldPUktESVIgL2Z1bmN0aW9uXG5DT1BZIHRhcmdldC8qLmphciAvZnVuY3Rpb24vYXBwL1xuQ01EIFtcIiR7aGFuZGxlci5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJdXG5gO1xuICAgICAgY29uc3QgZG9ja2VyZmlsZUNvbnRlbnRGdWxsID0gYEZST00gZm5wcm9qZWN0L2ZuLWphdmEtZmRrLWJ1aWxkOmpkazE3LTEuMS41IGFzIGJ1aWxkLXN0YWdlXG5XT1JLRElSIC9mdW5jdGlvblxuRU5WIE1BVkVOX09QVFMgLURodHRwLnByb3h5SG9zdD0gLURodHRwLnByb3h5UG9ydD0gLURodHRwcy5wcm94eUhvc3Q9IC1EaHR0cHMucHJveHlQb3J0PSAtRGh0dHAubm9uUHJveHlIb3N0cz0gLURtYXZlbi5yZXBvLmxvY2FsPS91c3Ivc2hhcmUvbWF2ZW4vcmVmL3JlcG9zaXRvcnlcbkFERCBwb20ueG1sIC9mdW5jdGlvbi9wb20ueG1sXG5SVU4gW1wibXZuXCIsIFwicGFja2FnZVwiLCBcImRlcGVuZGVuY3k6Y29weS1kZXBlbmRlbmNpZXNcIiwgXCItRGluY2x1ZGVTY29wZT1ydW50aW1lXCIsIFwiLURza2lwVGVzdHM9dHJ1ZVwiLCBcIi1EbWRlcC5wcmVwZW5kR3JvdXBJZD10cnVlXCIsIFwiLURvdXRwdXREaXJlY3Rvcnk9dGFyZ2V0XCIsIFwiLS1mYWlsLW5ldmVyXCJdXG5BREQgc3JjIC9mdW5jdGlvbi9zcmNcblJVTiBbXCJtdm5cIiwgXCJwYWNrYWdlXCJdXG5GUk9NIGZucHJvamVjdC9mbi1qYXZhLWZkazpqcmUxNy0xLjEuNVxuV09SS0RJUiAvZnVuY3Rpb25cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9mdW5jdGlvbi90YXJnZXQvKi5qYXIgL2Z1bmN0aW9uL2FwcC9cbkNNRCBbXCIke2hhbmRsZXIucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiXVxuYDtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50ID0gdXNlVGhpbiA/IGRvY2tlcmZpbGVDb250ZW50VGhpbiA6IGRvY2tlcmZpbGVDb250ZW50RnVsbDtcbiAgICAgIGNvbnN0IGRvY2tlcmlnbm9yZUNvbnRlbnQgPSBgbm9kZV9tb2R1bGVzXG4uZ2l0XG4qLm1kXG4uZW52XG4uaWRlYVxuLnZzY29kZVxuKi5sb2dcbm9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvblxuLm9jZGstb3V0cHV0cy5qc29uXG50YWlsLWZ1bmN0aW9uLWxvZ3MuanNcbnRhaWwtZnVuY3Rpb24tbG9ncy5zaFxuYDtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVCNjQgPSBCdWZmZXIuZnJvbShkb2NrZXJmaWxlQ29udGVudCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBjb25zdCBkb2NrZXJpZ25vcmVCNjQgPSBCdWZmZXIuZnJvbShkb2NrZXJpZ25vcmVDb250ZW50LCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIC8vIEdlbmVyYXRlIERvY2tlcmZpbGUgYW5kIC5kb2NrZXJpZ25vcmUgaW4gbG9jYWwtZXhlYyBvbmx5IGlmIG1pc3Npbmc7IGlmIHRoZXkgZXhpc3QgdXNlIGFzLWlzLiBUaGVuIGxvZ2luLCBidWlsZCwgcHVzaC5cbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5wcm92aXNpb25lcmAsIFtcbiAgICAgICAge1xuICAgICAgICAgICdsb2NhbC1leGVjJzoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2NkIFwiJEZVTkNUSU9OX0NPREVfUEFUSFwiICYmIChbIC1mIERvY2tlcmZpbGUgXSB8fCAoZWNobyBcIiRET0NLRVJGSUxFX0I2NFwiIHwgYmFzZTY0IC1kID4gRG9ja2VyZmlsZSkpICYmIChbIC1mIC5kb2NrZXJpZ25vcmUgXSB8fCAoZWNobyBcIiRET0NLRVJJR05PUkVfQjY0XCIgfCBiYXNlNjQgLWQgPiAuZG9ja2VyaWdub3JlKSknLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgRlVOQ1RJT05fQ09ERV9QQVRIOiBmdW5jdGlvbkNvZGVQYXRoLFxuICAgICAgICAgICAgICBET0NLRVJGSUxFX0I2NDogZG9ja2VyZmlsZUI2NCxcbiAgICAgICAgICAgICAgRE9DS0VSSUdOT1JFX0I2NDogZG9ja2VyaWdub3JlQjY0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBsb2dpblNjcmlwdCwgb25fZmFpbHVyZTogJ2NvbnRpbnVlJyB9IH0sXG4gICAgICAgIHsgJ2xvY2FsLWV4ZWMnOiB7IGNvbW1hbmQ6IGBjZCBcIiR7ZnVuY3Rpb25Db2RlUGF0aC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCIgJiYgZG9ja2VyIGJ1aWxkIC0tcGxhdGZvcm0gbGludXgvYW1kNjQgLXQgJHtpbWFnZVVybH0gLmAgfSB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBgZG9ja2VyIHB1c2ggJHtpbWFnZVVybH1gIH0gfSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCB2Y24gPSBuZXcgQ29yZVZjbih0aGlzLCAnVmNuJywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tdmNuYCxcbiAgICAgICAgY2lkckJsb2NrczogWycxMC4wLjAuMC8xNiddLFxuICAgICAgICBkbnNMYWJlbDogJ2FwcGZuJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHVibGljU3VibmV0ID0gbmV3IENvcmVTdWJuZXQodGhpcywgJ1B1YmxpY1N1Ym5ldCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXB1YmxpY2AsXG4gICAgICAgIGNpZHJCbG9jazogJzEwLjAuMS4wLzI0JyxcbiAgICAgICAgZG5zTGFiZWw6ICdwdWJsaWMnLFxuICAgICAgICBwcm9oaWJpdFB1YmxpY0lwT25WbmljOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJpdmF0ZVN1Ym5ldCA9IG5ldyBDb3JlU3VibmV0KHRoaXMsICdQcml2YXRlU3VibmV0Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZWAsXG4gICAgICAgIGNpZHJCbG9jazogJzEwLjAuMi4wLzI0JyxcbiAgICAgICAgZG5zTGFiZWw6ICdwcml2YXRlJyxcbiAgICAgICAgcHJvaGliaXRQdWJsaWNJcE9uVm5pYzogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwdWJsaWNTbCA9IG5ldyBDb3JlU2VjdXJpdHlMaXN0KHRoaXMsICdQdWJsaWNTZWN1cml0eUxpc3QnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWMtc2xgLFxuICAgICAgICBpbmdyZXNzU2VjdXJpdHlSdWxlczogW1xuICAgICAgICAgIHsgcHJvdG9jb2w6ICc2Jywgc291cmNlOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdIVFRQJywgdGNwT3B0aW9uczogeyBtaW46IDgwLCBtYXg6IDgwIH0gfSxcbiAgICAgICAgICB7IHByb3RvY29sOiAnNicsIHNvdXJjZTogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnSFRUUFMnLCB0Y3BPcHRpb25zOiB7IG1pbjogNDQzLCBtYXg6IDQ0MyB9IH0sXG4gICAgICAgIF0sXG4gICAgICAgIGVncmVzc1NlY3VyaXR5UnVsZXM6IFt7IHByb3RvY29sOiAnYWxsJywgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0FsbCcgfV0sXG4gICAgICB9KTtcbiAgICAgIHB1YmxpY1N1Ym5ldC5hZGRPdmVycmlkZSgnc2VjdXJpdHlfbGlzdF9pZHMnLCBbcHVibGljU2wuaWRdKTtcbiAgICAgIGNvbnN0IHByaXZhdGVTbCA9IG5ldyBDb3JlU2VjdXJpdHlMaXN0KHRoaXMsICdQcml2YXRlU2VjdXJpdHlMaXN0Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZS1zbGAsXG4gICAgICAgIGluZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbXG4gICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcxMC4wLjIuMC8yNCcsIGRlc2NyaXB0aW9uOiAnUEcnLCB0Y3BPcHRpb25zOiB7IG1pbjogNTQzMiwgbWF4OiA1NDMyIH0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgZWdyZXNzU2VjdXJpdHlSdWxlczogW3sgcHJvdG9jb2w6ICdhbGwnLCBkZXN0aW5hdGlvbjogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnQWxsJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcHJpdmF0ZVN1Ym5ldC5hZGRPdmVycmlkZSgnc2VjdXJpdHlfbGlzdF9pZHMnLCBbcHJpdmF0ZVNsLmlkXSk7XG5cbiAgICAgIGNvbnN0IGFsbFNlcnZpY2VzID0gbmV3IERhdGFPY2lDb3JlU2VydmljZXModGhpcywgJ0FsbFNlcnZpY2VzJywge30pO1xuICAgICAgY29uc3Qgc3ZjR3cgPSBuZXcgQ29yZVNlcnZpY2VHYXRld2F5KHRoaXMsICdTZXJ2aWNlR2F0ZXdheScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXNnd2AsXG4gICAgICAgIHNlcnZpY2VzOiBbeyBzZXJ2aWNlSWQ6IGFsbFNlcnZpY2VzLnNlcnZpY2VzLmdldCgwKS5pZCB9XSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJpdlJ0ID0gbmV3IENvcmVSb3V0ZVRhYmxlKHRoaXMsICdQcml2YXRlUm91dGVUYWJsZScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXByaXZhdGUtcnRgLFxuICAgICAgICByb3V0ZVJ1bGVzOiBbXG4gICAgICAgICAgeyBuZXR3b3JrRW50aXR5SWQ6IHN2Y0d3LmlkLCBkZXN0aW5hdGlvbjogYWxsU2VydmljZXMuc2VydmljZXMuZ2V0KDApLmNpZHJCbG9jaywgZGVzdGluYXRpb25UeXBlOiAnU0VSVklDRV9DSURSX0JMT0NLJywgZGVzY3JpcHRpb246ICdPQ0lSJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBwcml2YXRlU3VibmV0LmFkZE92ZXJyaWRlKCdyb3V0ZV90YWJsZV9pZCcsIHByaXZSdC5pZCk7XG4gICAgICBjb25zdCBpZ3cgPSBuZXcgQ29yZUludGVybmV0R2F0ZXdheSh0aGlzLCAnSW50ZXJuZXRHYXRld2F5Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0taWd3YCxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHViUnQgPSBuZXcgQ29yZVJvdXRlVGFibGUodGhpcywgJ1B1YmxpY1JvdXRlVGFibGUnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWMtcnRgLFxuICAgICAgICByb3V0ZVJ1bGVzOiBbXG4gICAgICAgICAgeyBuZXR3b3JrRW50aXR5SWQ6IGlndy5pZCwgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXN0aW5hdGlvblR5cGU6ICdDSURSX0JMT0NLJywgZGVzY3JpcHRpb246ICdJbnRlcm5ldCcgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgcHVibGljU3VibmV0LmFkZE92ZXJyaWRlKCdyb3V0ZV90YWJsZV9pZCcsIHB1YlJ0LmlkKTtcblxuICAgICAgY29uc3QgYXBpR2F0ZXdheSA9IG5ldyBBcGlnYXRld2F5R2F0ZXdheSh0aGlzLCAnQXBpR2F0ZXdheScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHN1Ym5ldElkOiBwdWJsaWNTdWJuZXQuaWQsXG4gICAgICAgIGVuZHBvaW50VHlwZTogJ1BVQkxJQycsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWFwaS1nYXRld2F5YCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgTG9nZ2luZ0xvZ0dyb3VwKHRoaXMsICdMb2dHcm91cCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBhcHBOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYExvZyBncm91cCBmb3IgJHthcHBOYW1lfWAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uQXBwID0gbmV3IEZ1bmN0aW9uc0FwcGxpY2F0aW9uKHRoaXMsICdGdW5jdGlvbkFwcCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBhcHBOYW1lLFxuICAgICAgICBzdWJuZXRJZHM6IFtwcml2YXRlU3VibmV0LmlkXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb2NpRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25zRnVuY3Rpb24odGhpcywgJ0Z1bmN0aW9uJywge1xuICAgICAgICBhcHBsaWNhdGlvbklkOiBmdW5jdGlvbkFwcC5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGNvbmZpZy5mdW5jdGlvbk5hbWUhLFxuICAgICAgICBpbWFnZTogaW1hZ2VVcmwsXG4gICAgICAgIG1lbW9yeUluTWJzOiBjb25maWcuZnVuY3Rpb25NZW1vcnlNYiA/PyAnMjU2JyxcbiAgICAgICAgdGltZW91dEluU2Vjb25kczogY29uZmlnLmZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gMzAsXG4gICAgICAgIC4uLihjb25maWcuZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoY29uZmlnLmZ1bmN0aW9uQ29uZmlnKS5sZW5ndGggPiAwID8geyBjb25maWc6IGNvbmZpZy5mdW5jdGlvbkNvbmZpZyB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICBvY2lGdW5jdGlvbi5hZGRPdmVycmlkZSgnZGVwZW5kc19vbicsIFtgbnVsbF9yZXNvdXJjZS4ke2J1aWxkQW5kUHVzaEltYWdlSWR9YF0pO1xuICAgICAgY29uc3QgcGF0aFByZWZpeCA9IGNvbmZpZy5hcGlHd1BhdGhQcmVmaXggPz8gJy8nO1xuICAgICAgbGV0IHJvdXRlczogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1ldGhvZHM6IHN0cmluZ1tdOyBiYWNrZW5kOiB7IHR5cGU6IHN0cmluZzsgZnVuY3Rpb25JZDogdHlwZW9mIG9jaUZ1bmN0aW9uLmlkOyByZWFkVGltZW91dEluU2Vjb25kcz86IG51bWJlciB9IH0+O1xuICAgICAgaWYgKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCAmJiBmcy5leGlzdHNTeW5jKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCkpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UocmF3KSBhcyB7IHJvdXRlcz86IEFycmF5PHsgcGF0aD86IHN0cmluZzsgbWV0aG9kcz86IHN0cmluZ1tdOyBiYWNrZW5kPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4gfTtcbiAgICAgICAgY29uc3Qgcm91dGVMaXN0ID0gc3BlYz8ucm91dGVzID8/IFtdO1xuICAgICAgICByb3V0ZXMgPSByb3V0ZUxpc3QubWFwKChyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYiA9IHIuYmFja2VuZCA/PyB7fTtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvbklkUmF3ID0gKGIuZnVuY3Rpb25JZCA/PyBiLmZ1bmN0aW9uX2lkKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IHR5cGVvZiBmdW5jdGlvbklkUmF3ID09PSAnc3RyaW5nJyAmJiBmdW5jdGlvbklkUmF3LmluY2x1ZGVzKCcke2Z1bmN0aW9uX2lkfScpXG4gICAgICAgICAgICA/IG9jaUZ1bmN0aW9uLmlkXG4gICAgICAgICAgICA6IChmdW5jdGlvbklkUmF3ID8/IG9jaUZ1bmN0aW9uLmlkKTtcbiAgICAgICAgICBjb25zdCByZWFkVGltZW91dCA9IChiLnJlYWRUaW1lb3V0SW5TZWNvbmRzID8/IGIucmVhZF90aW1lb3V0X2luX3NlY29uZHMpIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aDogci5wYXRoID8/ICcve3BhdGgqfScsXG4gICAgICAgICAgICBtZXRob2RzOiBBcnJheS5pc0FycmF5KHIubWV0aG9kcykgPyByLm1ldGhvZHMgOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogKGIudHlwZSBhcyBzdHJpbmcpID8/ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgICAgICBmdW5jdGlvbklkLFxuICAgICAgICAgICAgICAuLi4ocmVhZFRpbWVvdXQgIT0gbnVsbCA/IHsgcmVhZFRpbWVvdXRJblNlY29uZHM6IHJlYWRUaW1lb3V0IH0gOiB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gY29uZmlnLmFwaUd3Um91dGVQYXRoID8/ICcve3BhdGgqfSc7XG4gICAgICAgIGNvbnN0IG1ldGhvZHMgPSBjb25maWcuYXBpR3dNZXRob2RzPy5sZW5ndGggPyBjb25maWcuYXBpR3dNZXRob2RzIDogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ107XG4gICAgICAgIHJvdXRlcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICAgICAgICBtZXRob2RzLFxuICAgICAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgICAgICB0eXBlOiAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICAgICAgZnVuY3Rpb25JZDogb2NpRnVuY3Rpb24uaWQsXG4gICAgICAgICAgICAgIHJlYWRUaW1lb3V0SW5TZWNvbmRzOiBjb25maWcuZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwaURlcGxveW1lbnQgPSBuZXcgQXBpZ2F0ZXdheURlcGxveW1lbnQodGhpcywgJ0FwaURlcGxveW1lbnQnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBnYXRld2F5SWQ6IGFwaUdhdGV3YXkuaWQsXG4gICAgICAgIHBhdGhQcmVmaXgsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWRlcGxveW1lbnRgLFxuICAgICAgICBzcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhcGlEZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeShvY2lGdW5jdGlvbik7XG5cbiAgICAgIC8vIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9nOiBTRVJWSUNFIGxvZyBmb3IgdGhlIEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiAoY2F0ZWdvcnkgaW52b2tlKVxuICAgICAgY29uc3QgZXhlY3V0aW9uTG9nID0gbmV3IExvZ2dpbmdMb2codGhpcywgJ0V4ZWN1dGlvbkxvZycsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke2FwcE5hbWV9LWludm9rZWAsXG4gICAgICAgIGxvZ0dyb3VwSWQ6IGxvZ0dyb3VwLmlkLFxuICAgICAgICBsb2dUeXBlOiAnU0VSVklDRScsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnaW52b2tlJyxcbiAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGlzIHNlcnZpY2UgbG9nIHdpdGggdGhlIEZ1bmN0aW9ucyBhcHBsaWNhdGlvblxuICAgICAgICAgICAgcmVzb3VyY2U6IGZ1bmN0aW9uQXBwLmlkLFxuICAgICAgICAgICAgc2VydmljZTogJ2Z1bmN0aW9ucycsXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAnT0NJU0VSVklDRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZXhlY3V0aW9uTG9nLm5vZGUuYWRkRGVwZW5kZW5jeShmdW5jdGlvbkFwcCk7XG5cbiAgICAgIC8vIFdyaXRlIHN0YWNrIG91dHB1dHMgdG8gcHJvamVjdCBkaXIgc28gZ2VuZXJhdGVkIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBjYW4gcmVhZCB0aGVtXG4gICAgICBjb25zdCB3cml0ZU91dHB1dHNJZCA9ICdXcml0ZU91dHB1dHNUb1Byb2plY3QnO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke3dyaXRlT3V0cHV0c0lkfS50cmlnZ2Vyc2AsIHsgZXhlY3V0aW9uX2xvZ19pZDogZXhlY3V0aW9uTG9nLmlkIH0pO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke3dyaXRlT3V0cHV0c0lkfS5kZXBlbmRzX29uYCwgWydvY2lfbG9nZ2luZ19sb2cuRXhlY3V0aW9uTG9nJ10pO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke3dyaXRlT3V0cHV0c0lkfS5wcm92aXNpb25lcmAsIFtcbiAgICAgICAge1xuICAgICAgICAgICdsb2NhbC1leGVjJzoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2lmIFsgLW4gXCIkT0NES19QUk9KRUNUX0RJUlwiIF07IHRoZW4gY2RrdGYgb3V0cHV0IC1qc29uID4gXCIkT0NES19QUk9KRUNUX0RJUi8ub2Nkay1vdXRwdXRzLmpzb25cIjsgZmknLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnb2Npcl9yZXBvc2l0b3J5X25hbWUnLCB7IHZhbHVlOiBvY2lyUmVwb3NpdG9yeS5kaXNwbGF5TmFtZSwgZGVzY3JpcHRpb246ICdPQ0lSIHJlcG9zaXRvcnkgbmFtZScgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdhcGlfZ2F0ZXdheV9ob3N0JywgeyB2YWx1ZTogYXBpR2F0ZXdheS5ob3N0bmFtZSwgZGVzY3JpcHRpb246ICdBUEkgR2F0ZXdheSBob3N0bmFtZScgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9pbnZva2VfdXJsJywgeyB2YWx1ZTogYGh0dHBzOi8vJHthcGlHYXRld2F5Lmhvc3RuYW1lfWAsIGRlc2NyaXB0aW9uOiAnQmFzZSBVUkwgdG8gaW52b2tlIHRoZSBmdW5jdGlvbicgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdmdW5jdGlvbl9pZCcsIHsgdmFsdWU6IG9jaUZ1bmN0aW9uLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBGdW5jdGlvbiBPQ0lEJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2xvZ19ncm91cF9pZCcsIHsgdmFsdWU6IGxvZ0dyb3VwLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBMb2cgR3JvdXAgT0NJRCBmb3IgdGhlIGFwcGxpY2F0aW9uJyB9KTtcbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ2V4ZWN1dGlvbl9sb2dfaWQnLCB7IHZhbHVlOiBleGVjdXRpb25Mb2cuaWQsIGRlc2NyaXB0aW9uOiAnT0NJIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9nIE9DSUQnIH0pO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIG9yYWNsZS9vY2kgKFRlcnJhZm9ybSBSZWdpc3RyeSkgc28gdGVycmFmb3JtIGluaXQgdXNlcyBpdCBvbiBPTDggYW5kIGVsc2V3aGVyZTsgbXVzdCBydW4gYWZ0ZXIgcHJvdmlkZXIgaXMgYWRkZWRcbiAgICB0aGlzLmFkZE92ZXJyaWRlKCd0ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzLm9jaScsIHtcbiAgICAgIHNvdXJjZTogJ29yYWNsZS9vY2knLFxuICAgICAgdmVyc2lvbjogJz49IDUuMC4wLCA8IDYuMC4wJyxcbiAgICB9KTtcbiAgfVxufVxuIl19
379
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2NpLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vb2NpLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLGlDQUF3RDtBQUN4RCw2REFBNkQ7QUFDN0QseUdBQW9HO0FBQ3BHLDZEQUF5RDtBQUN6RCxtRUFBK0Q7QUFDL0QsaUZBQTRFO0FBQzVFLHFGQUFnRjtBQUNoRix5RkFBbUY7QUFDbkYsNkVBQXdFO0FBQ3hFLHVGQUFrRjtBQUNsRixpRkFBNkU7QUFDN0UsdUZBQW1GO0FBQ25GLHVGQUFtRjtBQUNuRixpRkFBNkU7QUFDN0UsK0VBQTBFO0FBQzFFLG1FQUErRDtBQUMvRCxxREFBcUY7QUFDckYsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQXdDN0IsTUFBYSxRQUFTLFNBQVEsc0JBQWM7SUFDMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxNQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLDZDQUE2QztRQUM3QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDdEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDbEMscUJBQXFCO2dCQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFO29CQUNwQyxHQUFHLEVBQUU7d0JBQ0gsTUFBTSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTTt3QkFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO3dCQUMzQixHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLG9CQUFvQjt3QkFDcEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3FCQUN0QjtpQkFDRixDQUFDLENBQUM7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QUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLGtDQUFrQyxFQUFFLENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBRUQseUhBQXlIO1FBQ3pILElBQUksQ0FBQyxXQUFXLENBQUMsa0NBQWtDLEVBQUU7WUFDbkQsTUFBTSxFQUFFLFlBQVk7WUFDcEIsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFoVkQsNEJBZ1ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBUZXJyYWZvcm1TdGFjaywgVGVycmFmb3JtT3V0cHV0IH0gZnJvbSAnY2RrdGYnO1xuaW1wb3J0IHsgT2NpUHJvdmlkZXIgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvcHJvdmlkZXInO1xuaW1wb3J0IHsgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcnRpZmFjdHMtY29udGFpbmVyLXJlcG9zaXRvcnknO1xuaW1wb3J0IHsgQ29yZVZjbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXZjbic7XG5pbXBvcnQgeyBDb3JlU3VibmV0IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtc3VibmV0JztcbmltcG9ydCB7IENvcmVTZWN1cml0eUxpc3QgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1zZWN1cml0eS1saXN0JztcbmltcG9ydCB7IENvcmVTZXJ2aWNlR2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9jb3JlLXNlcnZpY2UtZ2F0ZXdheSc7XG5pbXBvcnQgeyBEYXRhT2NpQ29yZVNlcnZpY2VzIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2RhdGEtb2NpLWNvcmUtc2VydmljZXMnO1xuaW1wb3J0IHsgQ29yZVJvdXRlVGFibGUgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvY29yZS1yb3V0ZS10YWJsZSc7XG5pbXBvcnQgeyBDb3JlSW50ZXJuZXRHYXRld2F5IH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2NvcmUtaW50ZXJuZXQtZ2F0ZXdheSc7XG5pbXBvcnQgeyBBcGlnYXRld2F5R2F0ZXdheSB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9hcGlnYXRld2F5LWdhdGV3YXknO1xuaW1wb3J0IHsgQXBpZ2F0ZXdheURlcGxveW1lbnQgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvYXBpZ2F0ZXdheS1kZXBsb3ltZW50JztcbmltcG9ydCB7IEZ1bmN0aW9uc0FwcGxpY2F0aW9uIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2Z1bmN0aW9ucy1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBGdW5jdGlvbnNGdW5jdGlvbiB9IGZyb20gJy4uLy5nZW4vcHJvdmlkZXJzL29jaS9mdW5jdGlvbnMtZnVuY3Rpb24nO1xuaW1wb3J0IHsgTG9nZ2luZ0xvZ0dyb3VwIH0gZnJvbSAnLi4vLmdlbi9wcm92aWRlcnMvb2NpL2xvZ2dpbmctbG9nLWdyb3VwJztcbmltcG9ydCB7IExvZ2dpbmdMb2cgfSBmcm9tICcuLi8uZ2VuL3Byb3ZpZGVycy9vY2kvbG9nZ2luZy1sb2cnO1xuaW1wb3J0IHsgT2NpQmFja2VuZENvbmZpZywgb2Npckhvc3RLZXksIGdldE9jaUltYWdlVXJsIH0gZnJvbSAnLi4vY29uZmlnL29jaS1jb25maWcnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuZXhwb3J0IGludGVyZmFjZSBPY2lTdGFja0NvbmZpZyB7XG4gIGNvbXBhcnRtZW50SWQ6IHN0cmluZztcbiAgb2NpckNvbXBhcnRtZW50SWQ/OiBzdHJpbmc7XG4gIHRlbmFuY3lJZDogc3RyaW5nO1xuICByZWdpb246IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIC8qKiBPQ0kgRnVuY3Rpb25zIGFwcGxpY2F0aW9uIG5hbWUgKGUuZy4gbXktYXBwKS4gU2V0IHZpYSBPQ0lfRlVOQ1RJT05fQVBQX05BTUUgb3IgcGFzcyBpbiBjb25maWcuICovXG4gIGZ1bmN0aW9uQXBwTmFtZTogc3RyaW5nO1xuICAvKiogT0NJIEZ1bmN0aW9uIG5hbWUgKGUuZy4gbXktZnVuY3Rpb24pLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9OQU1FIG9yIHBhc3MgaW4gY29uZmlnLiAqL1xuICBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIHBhdGggdG8gSkFSIChvciBEb2NrZXJmaWxlIGNvbnRleHQpIHRvIGJ1aWxkIGFuZCBkZXBsb3kgYXMgdGhlIGZ1bmN0aW9uIGltYWdlLiBTZXQgdmlhIE9DSV9GVU5DVElPTl9KQVJfUEFUSC4gRW1wdHkgPSBubyBmdW5jdGlvbi9pbWFnZSBidWlsZC4gKi9cbiAgZnVuY3Rpb25KYXJQYXRoPzogc3RyaW5nO1xuICAvKiogRGlyZWN0b3J5IGNvbnRhaW5pbmcgdGFyZ2V0LyAoRG9ja2VyZmlsZSBpcyBnZW5lcmF0ZWQgaW4gbG9jYWwtZXhlYykuIFdoZW4gc2V0IHdpdGggZnVuY3Rpb25OYW1lLCBjcmVhdGVzIFZDTiwgRnVuY3Rpb24sIEFQSSBHYXRld2F5LiAqL1xuICBkb2NrZXJDb250ZXh0UGF0aD86IHN0cmluZztcbiAgLyoqIEltYWdlIHRhZyBmb3IgT0NJUiAoZnJvbSBmdW5jLnlhbWwgdmVyc2lvbiBvciBPQ0lfSU1BR0VfVEFHOyBkZWZhdWx0ICdsYXRlc3QnKS4gKi9cbiAgaW1hZ2VUYWc/OiBzdHJpbmc7XG4gIC8qKiBKYXZhIEZESyBDTUQgaGFuZGxlciAoZnJvbSBmdW5jLnlhbWwgb3IgT0NJX0ZVTkNUSU9OX0hBTkRMRVIpLiAqL1xuICBoYW5kbGVyPzogc3RyaW5nO1xuICAvKiogV2hlbiB0cnVlLCBkZXBsb3kgdXNlcyB0aGluIERvY2tlcmZpbGUgKG5vIE1hdmVuIGluIGltYWdlKTsgZnVsbCBidWlsZCBvbmx5IGluIHJlZGVwbG95OmZ1bmN0aW9uLiAqL1xuICB1c2VUaGluRG9ja2VyZmlsZT86IGJvb2xlYW47XG4gIG9jaXJSZXBvc2l0b3J5TmFtZT86IHN0cmluZztcbiAgLyoqIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgcGF0aCBwcmVmaXguIERlZmF1bHQgJy8nLiAqL1xuICBhcGlHd1BhdGhQcmVmaXg/OiBzdHJpbmc7XG4gIC8qKiBBUEkgR2F0ZXdheSByb3V0ZSBwYXRoLiBEZWZhdWx0ICcve3BhdGgqfScuICovXG4gIGFwaUd3Um91dGVQYXRoPzogc3RyaW5nO1xuICAvKiogQVBJIEdhdGV3YXkgcm91dGUgbWV0aG9kcy4gRGVmYXVsdCBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXS4gKi9cbiAgYXBpR3dNZXRob2RzPzogc3RyaW5nW107XG4gIC8qKiBGdW5jdGlvbiBtZW1vcnkgaW4gTUIgKGUuZy4gJzI1NicpLiBGcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fTUVNT1JZX01CLiAqL1xuICBmdW5jdGlvbk1lbW9yeU1iPzogc3RyaW5nO1xuICAvKiogRnVuY3Rpb24gdGltZW91dCBpbiBzZWNvbmRzLiBGcm9tIGZ1bmMueWFtbCBvciBPQ0lfRlVOQ1RJT05fVElNRU9VVF9TRUNPTkRTLiAqL1xuICBmdW5jdGlvblRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICAvKiogRnVuY3Rpb24gY29uZmlnL2VudiBrZXktdmFsdWUuIEZyb20gZnVuYy55YW1sIGNvbmZpZyBvciBPQ0lfRlVOQ1RJT05fQ09ORklHLiAqL1xuICBmdW5jdGlvbkNvbmZpZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBQYXRoIHRvIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgc3BlYyBKU09OIChyb3V0ZXMpLiBEZWZhdWx0IG9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvbiBpbiBwcm9qZWN0IHJvb3QuICovXG4gIGFwaUd3RGVwbG95bWVudEpzb25QYXRoPzogc3RyaW5nO1xuICBiYWNrZW5kPzogT2NpQmFja2VuZENvbmZpZztcbn1cblxuZXhwb3J0IGNsYXNzIE9jaVN0YWNrIGV4dGVuZHMgVGVycmFmb3JtU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IE9jaVN0YWNrQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENvbmZpZ3VyZSBUZXJyYWZvcm0gYmFja2VuZCAoaWYgbm90IGxvY2FsKVxuICAgIGlmIChjb25maWcuYmFja2VuZCAmJiBjb25maWcuYmFja2VuZC50eXBlICE9PSAnbG9jYWwnKSB7XG4gICAgICBpZiAoY29uZmlnLmJhY2tlbmQudHlwZSA9PT0gJ29jaScpIHtcbiAgICAgICAgLy8gT0NJIG5hdGl2ZSBiYWNrZW5kXG4gICAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoJ3RlcnJhZm9ybS5iYWNrZW5kJywge1xuICAgICAgICAgIG9jaToge1xuICAgICAgICAgICAgYnVja2V0OiBjb25maWcuYmFja2VuZC5idWNrZXQsXG4gICAgICAgICAgICBuYW1lc3BhY2U6IGNvbmZpZy5uYW1lc3BhY2UsXG4gICAgICAgICAgICBrZXk6IGNvbmZpZy5iYWNrZW5kLmtleSB8fCBgJHtpZH0vdGVycmFmb3JtLnRmc3RhdGVgLFxuICAgICAgICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcuYmFja2VuZC50eXBlID09PSAnaHR0cCcpIHtcbiAgICAgICAgLy8gSFRUUCBiYWNrZW5kIChmb3IgT0NJIE9iamVjdCBTdG9yYWdlIHZpYSBSRVNUIEFQSSlcbiAgICAgICAgY29uc3QgaHR0cEJhY2tlbmQ6IGFueSA9IHtcbiAgICAgICAgICBhZGRyZXNzOiBjb25maWcuYmFja2VuZC5hZGRyZXNzLFxuICAgICAgICAgIHVwZGF0ZV9tZXRob2Q6IGNvbmZpZy5iYWNrZW5kLnVwZGF0ZU1ldGhvZCB8fCAnUFVUJyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGNvbmZpZy5iYWNrZW5kLmxvY2tBZGRyZXNzKSB7XG4gICAgICAgICAgaHR0cEJhY2tlbmQubG9ja19hZGRyZXNzID0gY29uZmlnLmJhY2tlbmQubG9ja0FkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5iYWNrZW5kLnVubG9ja0FkZHJlc3MpIHtcbiAgICAgICAgICBodHRwQmFja2VuZC51bmxvY2tfYWRkcmVzcyA9IGNvbmZpZy5iYWNrZW5kLnVubG9ja0FkZHJlc3M7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLmJhY2tlbmQnLCB7XG4gICAgICAgICAgaHR0cDogaHR0cEJhY2tlbmQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9DSSBQcm92aWRlclxuICAgIG5ldyBPY2lQcm92aWRlcih0aGlzLCAnb2NpJywge1xuICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgdGVuYW5jeU9jaWQ6IGNvbmZpZy50ZW5hbmN5SWQsXG4gICAgfSk7XG5cbiAgICAvLyBPQ0lSIENvbnRhaW5lciBSZXBvc2l0b3J5IChyb290IGNvbXBhcnRtZW50IGFsbG93ZWQgaWYgZXhwbGljaXRseSBzZXQpXG4gICAgY29uc3Qgb2NpckNvbXBhcnRtZW50SWQgPSBjb25maWcub2NpckNvbXBhcnRtZW50SWQgfHwgY29uZmlnLmNvbXBhcnRtZW50SWQ7XG4gICAgY29uc3Qgb2NpclJlcG9OYW1lID0gY29uZmlnLm9jaXJSZXBvc2l0b3J5TmFtZSB8fCBjb25maWcuZnVuY3Rpb25OYW1lIHx8ICdvY2ktZnVuY3Rpb24nO1xuXG4gICAgY29uc3Qgb2NpclJlcG9zaXRvcnkgPSBuZXcgQXJ0aWZhY3RzQ29udGFpbmVyUmVwb3NpdG9yeSh0aGlzLCAnT2NpclJlcG9zaXRvcnknLCB7XG4gICAgICBjb21wYXJ0bWVudElkOiBvY2lyQ29tcGFydG1lbnRJZCxcbiAgICAgIGRpc3BsYXlOYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICBpc1B1YmxpYzogZmFsc2UsIC8vIFByaXZhdGUgcmVwb3NpdG9yeSBieSBkZWZhdWx0XG4gICAgICBpc0ltbXV0YWJsZTogZmFsc2UsIC8vIEFsbG93IGltYWdlIHVwZGF0ZXNcbiAgICB9KTtcblxuICAgIGNvbnN0IGRvY2tlckNvbnRleHRQYXRoID0gKGNvbmZpZy5kb2NrZXJDb250ZXh0UGF0aCB8fCBjb25maWcuZnVuY3Rpb25KYXJQYXRoKT8udHJpbSgpO1xuICAgIGNvbnN0IGNyZWF0ZUZ1bGxTdGFjayA9IGNvbmZpZy5mdW5jdGlvbk5hbWUgJiYgZG9ja2VyQ29udGV4dFBhdGg7XG5cbiAgICBpZiAoY3JlYXRlRnVsbFN0YWNrKSB7XG4gICAgICBpZiAob2NpckNvbXBhcnRtZW50SWQuaW5jbHVkZXMoJ3Jvb3QnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ0Z1bGwgc3RhY2sgKEZ1bmN0aW9uICsgQVBJIEdhdGV3YXkpIHJlcXVpcmVzIGEgbm9uLXJvb3QgY29tcGFydG1lbnQgZm9yIE9DSVIuIFNldCBPQ0lfT0NJUl9DT01QQVJUTUVOVF9JRCB0byB5b3VyIGhvbWUgY29tcGFydG1lbnQgT0NJRC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBmdW5jdGlvbkNvZGVQYXRoID0gcGF0aC5yZXNvbHZlKGRvY2tlckNvbnRleHRQYXRoISk7XG4gICAgICBjb25zdCBpbWFnZVRhZyA9IGNvbmZpZy5pbWFnZVRhZyB8fCAnbGF0ZXN0JztcbiAgICAgIGNvbnN0IG9jaXJSZWdpc3RyeSA9IGAke29jaXJIb3N0S2V5KGNvbmZpZy5yZWdpb24pfS5vY2lyLmlvYDtcbiAgICAgIGNvbnN0IGltYWdlVXJsID0gZ2V0T2NpSW1hZ2VVcmwoY29uZmlnKTtcbiAgICAgIGNvbnN0IGFwcE5hbWUgPSBjb25maWcuZnVuY3Rpb25BcHBOYW1lIHx8IGNvbmZpZy5mdW5jdGlvbk5hbWUhO1xuICAgICAgY29uc3QgcmVzb3VyY2VOYW1lID0gYXBwTmFtZTtcblxuICAgICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycy5udWxsJywge1xuICAgICAgICBzb3VyY2U6ICdoYXNoaWNvcnAvbnVsbCcsXG4gICAgICAgIHZlcnNpb246ICd+PiAzLjAnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBidWlsZEFuZFB1c2hJbWFnZUlkID0gJ0J1aWxkQW5kUHVzaEltYWdlJztcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5kZXBlbmRzX29uYCwgW1xuICAgICAgICAnb2NpX2FydGlmYWN0c19jb250YWluZXJfcmVwb3NpdG9yeS5PY2lyUmVwb3NpdG9yeScsXG4gICAgICBdKTtcbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS50cmlnZ2Vyc2AsIHtcbiAgICAgICAgcmVwb19uYW1lOiBvY2lyUmVwb05hbWUsXG4gICAgICAgIGltYWdlX3VybDogaW1hZ2VVcmwsXG4gICAgICAgIGltYWdlX3RhZzogaW1hZ2VUYWcsXG4gICAgICAgIGhhbmRsZXI6IGNvbmZpZy5oYW5kbGVyIHx8ICcnLFxuICAgICAgICB1c2VfdGhpbl9kb2NrZXJmaWxlOiBjb25maWcudXNlVGhpbkRvY2tlcmZpbGUgPT09IHRydWUgPyAnMScgOiAnMCcsXG4gICAgICAgIG5hbWVzcGFjZTogY29uZmlnLm5hbWVzcGFjZSxcbiAgICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgfSk7XG4gICAgICBjb25zdCByZWdpb25QID0gY29uZmlnLnJlZ2lvbjtcbiAgICAgIGNvbnN0IG5hbWVzcGFjZVAgPSBjb25maWcubmFtZXNwYWNlO1xuICAgICAgY29uc3Qgb2NpclVzZXIgPSBwcm9jZXNzLmVudi5PQ0lfT0NJUl9VU0VSTkFNRSB8fCAnQVVUT19ERVRFQ1QnO1xuICAgICAgY29uc3QgbG9naW5TY3JpcHQgPSBwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTlxuICAgICAgICA/IGBleHBvcnQgT0NJUl9BVVRIX1RPS0VOPVwiJHtwcm9jZXNzLmVudi5PQ0lfQVVUSF9UT0tFTn1cIjsgT0NJUl9VU0VSPVwiJHtvY2lyVXNlcn1cIjsgWyBcIiRPQ0lSX1VTRVJcIiA9IFwiQVVUT19ERVRFQ1RcIiBdICYmIE9DSVJfVVNFUj1cIiR7bmFtZXNwYWNlUH0vdXNlclwiOyBlY2hvIFwiJE9DSVJfQVVUSF9UT0tFTlwiIHwgZG9ja2VyIGxvZ2luICR7b2NpclJlZ2lzdHJ5fSAtdSBcIiRPQ0lSX1VTRVJcIiAtLXBhc3N3b3JkLXN0ZGluIHx8IGV4aXQgMWBcbiAgICAgICAgOiBgb2NpIHJhdy1yZXF1ZXN0IC0tcmVnaW9uICR7cmVnaW9uUH0gLS1odHRwLW1ldGhvZCBHRVQgLS10YXJnZXQtdXJpIFwiaHR0cHM6Ly8ke29jaXJSZWdpc3RyeX0vMjAxODA0MTkvZG9ja2VyL3Rva2VuXCIgMj4vZGV2L251bGwgfCAoY29tbWFuZCAtdiBqcSA+L2Rldi9udWxsICYmIGpxIC1yIC5kYXRhLnRva2VuIHx8IGdyZXAgLW8gJ1widG9rZW5cIjpcIlteXCJdKlwiJyB8IGN1dCAtZCdcIicgLWY0KSB8IGRvY2tlciBsb2dpbiAtdSBCRUFSRVJfVE9LRU4gLS1wYXNzd29yZC1zdGRpbiAke29jaXJSZWdpc3RyeX0gfHwgKGVjaG8gXCJTZXQgT0NJX0FVVEhfVE9LRU4gb3IgY29uZmlndXJlIE9DSSBDTElcIiA+JjI7IGV4aXQgMSlgO1xuICAgICAgY29uc3QgaGFuZGxlciA9IGNvbmZpZy5oYW5kbGVyIHx8ICdjb20uZXhhbXBsZS5mbi5IZWxsb0Z1bmN0aW9uOjpoYW5kbGVSZXF1ZXN0JztcbiAgICAgIGNvbnN0IHVzZVRoaW4gPSBjb25maWcudXNlVGhpbkRvY2tlcmZpbGUgPT09IHRydWU7XG4gICAgICBjb25zdCBkb2NrZXJmaWxlQ29udGVudFRoaW4gPSBgRlJPTSBmbnByb2plY3QvZm4tamF2YS1mZGs6anJlMTctMS4xLjVcbldPUktESVIgL2Z1bmN0aW9uXG5DT1BZIHRhcmdldC8qLmphciAvZnVuY3Rpb24vYXBwL1xuQ01EIFtcIiR7aGFuZGxlci5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCJdXG5gO1xuICAgICAgY29uc3QgZG9ja2VyZmlsZUNvbnRlbnRGdWxsID0gYEZST00gZm5wcm9qZWN0L2ZuLWphdmEtZmRrLWJ1aWxkOmpkazE3LTEuMS41IGFzIGJ1aWxkLXN0YWdlXG5XT1JLRElSIC9mdW5jdGlvblxuRU5WIE1BVkVOX09QVFMgLURodHRwLnByb3h5SG9zdD0gLURodHRwLnByb3h5UG9ydD0gLURodHRwcy5wcm94eUhvc3Q9IC1EaHR0cHMucHJveHlQb3J0PSAtRGh0dHAubm9uUHJveHlIb3N0cz0gLURtYXZlbi5yZXBvLmxvY2FsPS91c3Ivc2hhcmUvbWF2ZW4vcmVmL3JlcG9zaXRvcnlcbkFERCBwb20ueG1sIC9mdW5jdGlvbi9wb20ueG1sXG5SVU4gW1wibXZuXCIsIFwicGFja2FnZVwiLCBcImRlcGVuZGVuY3k6Y29weS1kZXBlbmRlbmNpZXNcIiwgXCItRGluY2x1ZGVTY29wZT1ydW50aW1lXCIsIFwiLURza2lwVGVzdHM9dHJ1ZVwiLCBcIi1EbWRlcC5wcmVwZW5kR3JvdXBJZD10cnVlXCIsIFwiLURvdXRwdXREaXJlY3Rvcnk9dGFyZ2V0XCIsIFwiLS1mYWlsLW5ldmVyXCJdXG5BREQgc3JjIC9mdW5jdGlvbi9zcmNcblJVTiBbXCJtdm5cIiwgXCJwYWNrYWdlXCJdXG5GUk9NIGZucHJvamVjdC9mbi1qYXZhLWZkazpqcmUxNy0xLjEuNVxuV09SS0RJUiAvZnVuY3Rpb25cbkNPUFkgLS1mcm9tPWJ1aWxkLXN0YWdlIC9mdW5jdGlvbi90YXJnZXQvKi5qYXIgL2Z1bmN0aW9uL2FwcC9cbkNNRCBbXCIke2hhbmRsZXIucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpfVwiXVxuYDtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50ID0gdXNlVGhpbiA/IGRvY2tlcmZpbGVDb250ZW50VGhpbiA6IGRvY2tlcmZpbGVDb250ZW50RnVsbDtcbiAgICAgIGNvbnN0IGRvY2tlcmlnbm9yZUNvbnRlbnQgPSBgbm9kZV9tb2R1bGVzXG4uZ2l0XG4qLm1kXG4uZW52XG4uaWRlYVxuLnZzY29kZVxuKi5sb2dcbm9jaV9hcGlnYXRld2F5X2RlcGxveW1lbnQuanNvblxuLm9jZGstb3V0cHV0cy5qc29uXG50YWlsLWZ1bmN0aW9uLWxvZ3MuanNcbnRhaWwtZnVuY3Rpb24tbG9ncy5zaFxuYDtcbiAgICAgIGNvbnN0IGRvY2tlcmZpbGVCNjQgPSBCdWZmZXIuZnJvbShkb2NrZXJmaWxlQ29udGVudCwgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBjb25zdCBkb2NrZXJpZ25vcmVCNjQgPSBCdWZmZXIuZnJvbShkb2NrZXJpZ25vcmVDb250ZW50LCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgIC8vIEdlbmVyYXRlIERvY2tlcmZpbGUgYW5kIC5kb2NrZXJpZ25vcmUgaW4gbG9jYWwtZXhlYyBvbmx5IGlmIG1pc3Npbmc7IGlmIHRoZXkgZXhpc3QgdXNlIGFzLWlzLiBUaGVuIGxvZ2luLCBidWlsZCwgcHVzaC5cbiAgICAgIHRoaXMuYWRkT3ZlcnJpZGUoYHJlc291cmNlLm51bGxfcmVzb3VyY2UuJHtidWlsZEFuZFB1c2hJbWFnZUlkfS5wcm92aXNpb25lcmAsIFtcbiAgICAgICAge1xuICAgICAgICAgICdsb2NhbC1leGVjJzoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2NkIFwiJEZVTkNUSU9OX0NPREVfUEFUSFwiICYmIChbIC1mIERvY2tlcmZpbGUgXSB8fCAoZWNobyBcIiRET0NLRVJGSUxFX0I2NFwiIHwgYmFzZTY0IC1kID4gRG9ja2VyZmlsZSkpICYmIChbIC1mIC5kb2NrZXJpZ25vcmUgXSB8fCAoZWNobyBcIiRET0NLRVJJR05PUkVfQjY0XCIgfCBiYXNlNjQgLWQgPiAuZG9ja2VyaWdub3JlKSknLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgICAgRlVOQ1RJT05fQ09ERV9QQVRIOiBmdW5jdGlvbkNvZGVQYXRoLFxuICAgICAgICAgICAgICBET0NLRVJGSUxFX0I2NDogZG9ja2VyZmlsZUI2NCxcbiAgICAgICAgICAgICAgRE9DS0VSSUdOT1JFX0I2NDogZG9ja2VyaWdub3JlQjY0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBsb2dpblNjcmlwdCwgb25fZmFpbHVyZTogJ2NvbnRpbnVlJyB9IH0sXG4gICAgICAgIHsgJ2xvY2FsLWV4ZWMnOiB7IGNvbW1hbmQ6IGBjZCBcIiR7ZnVuY3Rpb25Db2RlUGF0aC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJyl9XCIgJiYgZG9ja2VyIGJ1aWxkIC0tcGxhdGZvcm0gbGludXgvYW1kNjQgLXQgJHtpbWFnZVVybH0gLmAgfSB9LFxuICAgICAgICB7ICdsb2NhbC1leGVjJzogeyBjb21tYW5kOiBgZG9ja2VyIHB1c2ggJHtpbWFnZVVybH1gIH0gfSxcbiAgICAgIF0pO1xuXG4gICAgICBjb25zdCB2Y24gPSBuZXcgQ29yZVZjbih0aGlzLCAnVmNuJywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tdmNuYCxcbiAgICAgICAgY2lkckJsb2NrczogWycxMC4wLjAuMC8xNiddLFxuICAgICAgICBkbnNMYWJlbDogJ2FwcGZuJyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHVibGljU3VibmV0ID0gbmV3IENvcmVTdWJuZXQodGhpcywgJ1B1YmxpY1N1Ym5ldCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXB1YmxpY2AsXG4gICAgICAgIGNpZHJCbG9jazogJzEwLjAuMS4wLzI0JyxcbiAgICAgICAgZG5zTGFiZWw6ICdwdWJsaWMnLFxuICAgICAgICBwcm9oaWJpdFB1YmxpY0lwT25WbmljOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJpdmF0ZVN1Ym5ldCA9IG5ldyBDb3JlU3VibmV0KHRoaXMsICdQcml2YXRlU3VibmV0Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZWAsXG4gICAgICAgIGNpZHJCbG9jazogJzEwLjAuMi4wLzI0JyxcbiAgICAgICAgZG5zTGFiZWw6ICdwcml2YXRlJyxcbiAgICAgICAgcHJvaGliaXRQdWJsaWNJcE9uVm5pYzogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBwdWJsaWNTbCA9IG5ldyBDb3JlU2VjdXJpdHlMaXN0KHRoaXMsICdQdWJsaWNTZWN1cml0eUxpc3QnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWMtc2xgLFxuICAgICAgICBpbmdyZXNzU2VjdXJpdHlSdWxlczogW1xuICAgICAgICAgIHsgcHJvdG9jb2w6ICc2Jywgc291cmNlOiAnMC4wLjAuMC8wJywgZGVzY3JpcHRpb246ICdIVFRQJywgdGNwT3B0aW9uczogeyBtaW46IDgwLCBtYXg6IDgwIH0gfSxcbiAgICAgICAgICB7IHByb3RvY29sOiAnNicsIHNvdXJjZTogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnSFRUUFMnLCB0Y3BPcHRpb25zOiB7IG1pbjogNDQzLCBtYXg6IDQ0MyB9IH0sXG4gICAgICAgIF0sXG4gICAgICAgIGVncmVzc1NlY3VyaXR5UnVsZXM6IFt7IHByb3RvY29sOiAnYWxsJywgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXNjcmlwdGlvbjogJ0FsbCcgfV0sXG4gICAgICB9KTtcbiAgICAgIHB1YmxpY1N1Ym5ldC5hZGRPdmVycmlkZSgnc2VjdXJpdHlfbGlzdF9pZHMnLCBbcHVibGljU2wuaWRdKTtcbiAgICAgIGNvbnN0IHByaXZhdGVTbCA9IG5ldyBDb3JlU2VjdXJpdHlMaXN0KHRoaXMsICdQcml2YXRlU2VjdXJpdHlMaXN0Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0tcHJpdmF0ZS1zbGAsXG4gICAgICAgIGluZ3Jlc3NTZWN1cml0eVJ1bGVzOiBbXG4gICAgICAgICAgeyBwcm90b2NvbDogJzYnLCBzb3VyY2U6ICcxMC4wLjIuMC8yNCcsIGRlc2NyaXB0aW9uOiAnUEcnLCB0Y3BPcHRpb25zOiB7IG1pbjogNTQzMiwgbWF4OiA1NDMyIH0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgZWdyZXNzU2VjdXJpdHlSdWxlczogW3sgcHJvdG9jb2w6ICdhbGwnLCBkZXN0aW5hdGlvbjogJzAuMC4wLjAvMCcsIGRlc2NyaXB0aW9uOiAnQWxsJyB9XSxcbiAgICAgIH0pO1xuICAgICAgcHJpdmF0ZVN1Ym5ldC5hZGRPdmVycmlkZSgnc2VjdXJpdHlfbGlzdF9pZHMnLCBbcHJpdmF0ZVNsLmlkXSk7XG5cbiAgICAgIGNvbnN0IGFsbFNlcnZpY2VzID0gbmV3IERhdGFPY2lDb3JlU2VydmljZXModGhpcywgJ0FsbFNlcnZpY2VzJywge30pO1xuICAgICAgY29uc3Qgc3ZjR3cgPSBuZXcgQ29yZVNlcnZpY2VHYXRld2F5KHRoaXMsICdTZXJ2aWNlR2F0ZXdheScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXNnd2AsXG4gICAgICAgIHNlcnZpY2VzOiBbeyBzZXJ2aWNlSWQ6IGFsbFNlcnZpY2VzLnNlcnZpY2VzLmdldCgwKS5pZCB9XSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJpdlJ0ID0gbmV3IENvcmVSb3V0ZVRhYmxlKHRoaXMsICdQcml2YXRlUm91dGVUYWJsZScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHZjbklkOiB2Y24uaWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LXByaXZhdGUtcnRgLFxuICAgICAgICByb3V0ZVJ1bGVzOiBbXG4gICAgICAgICAgeyBuZXR3b3JrRW50aXR5SWQ6IHN2Y0d3LmlkLCBkZXN0aW5hdGlvbjogYWxsU2VydmljZXMuc2VydmljZXMuZ2V0KDApLmNpZHJCbG9jaywgZGVzdGluYXRpb25UeXBlOiAnU0VSVklDRV9DSURSX0JMT0NLJywgZGVzY3JpcHRpb246ICdPQ0lSJyB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBwcml2YXRlU3VibmV0LmFkZE92ZXJyaWRlKCdyb3V0ZV90YWJsZV9pZCcsIHByaXZSdC5pZCk7XG4gICAgICBjb25zdCBpZ3cgPSBuZXcgQ29yZUludGVybmV0R2F0ZXdheSh0aGlzLCAnSW50ZXJuZXRHYXRld2F5Jywge1xuICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgdmNuSWQ6IHZjbi5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke3Jlc291cmNlTmFtZX0taWd3YCxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHViUnQgPSBuZXcgQ29yZVJvdXRlVGFibGUodGhpcywgJ1B1YmxpY1JvdXRlVGFibGUnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICB2Y25JZDogdmNuLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogYCR7cmVzb3VyY2VOYW1lfS1wdWJsaWMtcnRgLFxuICAgICAgICByb3V0ZVJ1bGVzOiBbXG4gICAgICAgICAgeyBuZXR3b3JrRW50aXR5SWQ6IGlndy5pZCwgZGVzdGluYXRpb246ICcwLjAuMC4wLzAnLCBkZXN0aW5hdGlvblR5cGU6ICdDSURSX0JMT0NLJywgZGVzY3JpcHRpb246ICdJbnRlcm5ldCcgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgcHVibGljU3VibmV0LmFkZE92ZXJyaWRlKCdyb3V0ZV90YWJsZV9pZCcsIHB1YlJ0LmlkKTtcblxuICAgICAgY29uc3QgYXBpR2F0ZXdheSA9IG5ldyBBcGlnYXRld2F5R2F0ZXdheSh0aGlzLCAnQXBpR2F0ZXdheScsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIHN1Ym5ldElkOiBwdWJsaWNTdWJuZXQuaWQsXG4gICAgICAgIGVuZHBvaW50VHlwZTogJ1BVQkxJQycsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWFwaS1nYXRld2F5YCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgTG9nZ2luZ0xvZ0dyb3VwKHRoaXMsICdMb2dHcm91cCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBhcHBOYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYExvZyBncm91cCBmb3IgJHthcHBOYW1lfWAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZ1bmN0aW9uQXBwID0gbmV3IEZ1bmN0aW9uc0FwcGxpY2F0aW9uKHRoaXMsICdGdW5jdGlvbkFwcCcsIHtcbiAgICAgICAgY29tcGFydG1lbnRJZDogY29uZmlnLmNvbXBhcnRtZW50SWQsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBhcHBOYW1lLFxuICAgICAgICBzdWJuZXRJZHM6IFtwcml2YXRlU3VibmV0LmlkXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgb2NpRnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25zRnVuY3Rpb24odGhpcywgJ0Z1bmN0aW9uJywge1xuICAgICAgICBhcHBsaWNhdGlvbklkOiBmdW5jdGlvbkFwcC5pZCxcbiAgICAgICAgZGlzcGxheU5hbWU6IGNvbmZpZy5mdW5jdGlvbk5hbWUhLFxuICAgICAgICBpbWFnZTogaW1hZ2VVcmwsXG4gICAgICAgIG1lbW9yeUluTWJzOiBjb25maWcuZnVuY3Rpb25NZW1vcnlNYiA/PyAnMjU2JyxcbiAgICAgICAgdGltZW91dEluU2Vjb25kczogY29uZmlnLmZ1bmN0aW9uVGltZW91dFNlY29uZHMgPz8gMzAsXG4gICAgICAgIC4uLihjb25maWcuZnVuY3Rpb25Db25maWcgJiYgT2JqZWN0LmtleXMoY29uZmlnLmZ1bmN0aW9uQ29uZmlnKS5sZW5ndGggPiAwID8geyBjb25maWc6IGNvbmZpZy5mdW5jdGlvbkNvbmZpZyB9IDoge30pLFxuICAgICAgfSk7XG4gICAgICBvY2lGdW5jdGlvbi5hZGRPdmVycmlkZSgnZGVwZW5kc19vbicsIFtgbnVsbF9yZXNvdXJjZS4ke2J1aWxkQW5kUHVzaEltYWdlSWR9YF0pO1xuICAgICAgY29uc3QgcGF0aFByZWZpeCA9IGNvbmZpZy5hcGlHd1BhdGhQcmVmaXggPz8gJy8nO1xuICAgICAgbGV0IHJvdXRlczogQXJyYXk8eyBwYXRoOiBzdHJpbmc7IG1ldGhvZHM6IHN0cmluZ1tdOyBiYWNrZW5kOiB7IHR5cGU6IHN0cmluZzsgZnVuY3Rpb25JZDogdHlwZW9mIG9jaUZ1bmN0aW9uLmlkOyByZWFkVGltZW91dEluU2Vjb25kcz86IG51bWJlciB9IH0+O1xuICAgICAgaWYgKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCAmJiBmcy5leGlzdHNTeW5jKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCkpIHtcbiAgICAgICAgY29uc3QgcmF3ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZy5hcGlHd0RlcGxveW1lbnRKc29uUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgY29uc3Qgc3BlYyA9IEpTT04ucGFyc2UocmF3KSBhcyB7IHJvdXRlcz86IEFycmF5PHsgcGF0aD86IHN0cmluZzsgbWV0aG9kcz86IHN0cmluZ1tdOyBiYWNrZW5kPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4gfTtcbiAgICAgICAgY29uc3Qgcm91dGVMaXN0ID0gc3BlYz8ucm91dGVzID8/IFtdO1xuICAgICAgICByb3V0ZXMgPSByb3V0ZUxpc3QubWFwKChyKSA9PiB7XG4gICAgICAgICAgY29uc3QgYiA9IHIuYmFja2VuZCA/PyB7fTtcbiAgICAgICAgICBjb25zdCBmdW5jdGlvbklkUmF3ID0gKGIuZnVuY3Rpb25JZCA/PyBiLmZ1bmN0aW9uX2lkKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IHR5cGVvZiBmdW5jdGlvbklkUmF3ID09PSAnc3RyaW5nJyAmJiBmdW5jdGlvbklkUmF3LmluY2x1ZGVzKCcke2Z1bmN0aW9uX2lkfScpXG4gICAgICAgICAgICA/IG9jaUZ1bmN0aW9uLmlkXG4gICAgICAgICAgICA6IChmdW5jdGlvbklkUmF3ID8/IG9jaUZ1bmN0aW9uLmlkKTtcbiAgICAgICAgICBjb25zdCByZWFkVGltZW91dCA9IChiLnJlYWRUaW1lb3V0SW5TZWNvbmRzID8/IGIucmVhZF90aW1lb3V0X2luX3NlY29uZHMpIGFzIG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aDogci5wYXRoID8/ICcve3BhdGgqfScsXG4gICAgICAgICAgICBtZXRob2RzOiBBcnJheS5pc0FycmF5KHIubWV0aG9kcykgPyByLm1ldGhvZHMgOiBbJ0dFVCcsICdQT1NUJywgJ09QVElPTlMnXSxcbiAgICAgICAgICAgIGJhY2tlbmQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogKGIudHlwZSBhcyBzdHJpbmcpID8/ICdPUkFDTEVfRlVOQ1RJT05TX0JBQ0tFTkQnLFxuICAgICAgICAgICAgICBmdW5jdGlvbklkLFxuICAgICAgICAgICAgICAuLi4ocmVhZFRpbWVvdXQgIT0gbnVsbCA/IHsgcmVhZFRpbWVvdXRJblNlY29uZHM6IHJlYWRUaW1lb3V0IH0gOiB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgcm91dGVQYXRoID0gY29uZmlnLmFwaUd3Um91dGVQYXRoID8/ICcve3BhdGgqfSc7XG4gICAgICAgIGNvbnN0IG1ldGhvZHMgPSBjb25maWcuYXBpR3dNZXRob2RzPy5sZW5ndGggPyBjb25maWcuYXBpR3dNZXRob2RzIDogWydHRVQnLCAnUE9TVCcsICdPUFRJT05TJ107XG4gICAgICAgIHJvdXRlcyA9IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwYXRoOiByb3V0ZVBhdGgsXG4gICAgICAgICAgICBtZXRob2RzLFxuICAgICAgICAgICAgYmFja2VuZDoge1xuICAgICAgICAgICAgICB0eXBlOiAnT1JBQ0xFX0ZVTkNUSU9OU19CQUNLRU5EJyxcbiAgICAgICAgICAgICAgZnVuY3Rpb25JZDogb2NpRnVuY3Rpb24uaWQsXG4gICAgICAgICAgICAgIHJlYWRUaW1lb3V0SW5TZWNvbmRzOiBjb25maWcuZnVuY3Rpb25UaW1lb3V0U2Vjb25kcyA/PyAzMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwaURlcGxveW1lbnQgPSBuZXcgQXBpZ2F0ZXdheURlcGxveW1lbnQodGhpcywgJ0FwaURlcGxveW1lbnQnLCB7XG4gICAgICAgIGNvbXBhcnRtZW50SWQ6IGNvbmZpZy5jb21wYXJ0bWVudElkLFxuICAgICAgICBnYXRld2F5SWQ6IGFwaUdhdGV3YXkuaWQsXG4gICAgICAgIHBhdGhQcmVmaXgsXG4gICAgICAgIGRpc3BsYXlOYW1lOiBgJHtyZXNvdXJjZU5hbWV9LWRlcGxveW1lbnRgLFxuICAgICAgICBzcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBhcGlEZXBsb3ltZW50Lm5vZGUuYWRkRGVwZW5kZW5jeShvY2lGdW5jdGlvbik7XG5cbiAgICAgIC8vIEZ1bmN0aW9ucyBleGVjdXRpb24gbG9nOiBTRVJWSUNFIGxvZyBmb3IgdGhlIEZ1bmN0aW9ucyBhcHBsaWNhdGlvbiAoY2F0ZWdvcnkgaW52b2tlKVxuICAgICAgY29uc3QgZXhlY3V0aW9uTG9nID0gbmV3IExvZ2dpbmdMb2codGhpcywgJ0V4ZWN1dGlvbkxvZycsIHtcbiAgICAgICAgZGlzcGxheU5hbWU6IGAke2FwcE5hbWV9LWludm9rZWAsXG4gICAgICAgIGxvZ0dyb3VwSWQ6IGxvZ0dyb3VwLmlkLFxuICAgICAgICBsb2dUeXBlOiAnU0VSVklDRScsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBjb21wYXJ0bWVudElkOiBjb25maWcuY29tcGFydG1lbnRJZCxcbiAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnaW52b2tlJyxcbiAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGlzIHNlcnZpY2UgbG9nIHdpdGggdGhlIEZ1bmN0aW9ucyBhcHBsaWNhdGlvblxuICAgICAgICAgICAgcmVzb3VyY2U6IGZ1bmN0aW9uQXBwLmlkLFxuICAgICAgICAgICAgc2VydmljZTogJ2Z1bmN0aW9ucycsXG4gICAgICAgICAgICBzb3VyY2VUeXBlOiAnT0NJU0VSVklDRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgZXhlY3V0aW9uTG9nLm5vZGUuYWRkRGVwZW5kZW5jeShmdW5jdGlvbkFwcCk7XG5cbiAgICAgIC8vIFdyaXRlIHN0YWNrIG91dHB1dHMgdG8gcHJvamVjdCBkaXIgc28gZ2VuZXJhdGVkIHRhaWwtZnVuY3Rpb24tbG9ncy5qcyBjYW4gcmVhZCB0aGVtXG4gICAgICBjb25zdCB3cml0ZU91dHB1dHNJZCA9ICdXcml0ZU91dHB1dHNUb1Byb2plY3QnO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke3dyaXRlT3V0cHV0c0lkfS50cmlnZ2Vyc2AsIHsgZXhlY3V0aW9uX2xvZ19pZDogZXhlY3V0aW9uTG9nLmlkIH0pO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke3dyaXRlT3V0cHV0c0lkfS5kZXBlbmRzX29uYCwgWydvY2lfbG9nZ2luZ19sb2cuRXhlY3V0aW9uTG9nJ10pO1xuICAgICAgdGhpcy5hZGRPdmVycmlkZShgcmVzb3VyY2UubnVsbF9yZXNvdXJjZS4ke3dyaXRlT3V0cHV0c0lkfS5wcm92aXNpb25lcmAsIFtcbiAgICAgICAge1xuICAgICAgICAgICdsb2NhbC1leGVjJzoge1xuICAgICAgICAgICAgY29tbWFuZDogJ2lmIFsgLW4gXCIkT0NES19QUk9KRUNUX0RJUlwiIF07IHRoZW4gdGVycmFmb3JtIG91dHB1dCAtanNvbiA+IFwiJE9DREtfUFJPSkVDVF9ESVIvLm9jZGstb3V0cHV0cy5qc29uXCI7IGZpJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIG5ldyBUZXJyYWZvcm1PdXRwdXQodGhpcywgJ29jaXJfcmVwb3NpdG9yeV9uYW1lJywgeyB2YWx1ZTogb2NpclJlcG9zaXRvcnkuZGlzcGxheU5hbWUsIGRlc2NyaXB0aW9uOiAnT0NJUiByZXBvc2l0b3J5IG5hbWUnIH0pO1xuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnYXBpX2dhdGV3YXlfaG9zdCcsIHsgdmFsdWU6IGFwaUdhdGV3YXkuaG9zdG5hbWUsIGRlc2NyaXB0aW9uOiAnQVBJIEdhdGV3YXkgaG9zdG5hbWUnIH0pO1xuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnZnVuY3Rpb25faW52b2tlX3VybCcsIHsgdmFsdWU6IGBodHRwczovLyR7YXBpR2F0ZXdheS5ob3N0bmFtZX1gLCBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIHRvIGludm9rZSB0aGUgZnVuY3Rpb24nIH0pO1xuICAgICAgbmV3IFRlcnJhZm9ybU91dHB1dCh0aGlzLCAnZnVuY3Rpb25faWQnLCB7IHZhbHVlOiBvY2lGdW5jdGlvbi5pZCwgZGVzY3JpcHRpb246ICdPQ0kgRnVuY3Rpb24gT0NJRCcgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdsb2dfZ3JvdXBfaWQnLCB7IHZhbHVlOiBsb2dHcm91cC5pZCwgZGVzY3JpcHRpb246ICdPQ0kgTG9nIEdyb3VwIE9DSUQgZm9yIHRoZSBhcHBsaWNhdGlvbicgfSk7XG4gICAgICBuZXcgVGVycmFmb3JtT3V0cHV0KHRoaXMsICdleGVjdXRpb25fbG9nX2lkJywgeyB2YWx1ZTogZXhlY3V0aW9uTG9nLmlkLCBkZXNjcmlwdGlvbjogJ09DSSBGdW5jdGlvbnMgZXhlY3V0aW9uIGxvZyBPQ0lEJyB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBvcmFjbGUvb2NpIChUZXJyYWZvcm0gUmVnaXN0cnkpIHNvIHRlcnJhZm9ybSBpbml0IHVzZXMgaXQgb24gT0w4IGFuZCBlbHNld2hlcmU7IG11c3QgcnVuIGFmdGVyIHByb3ZpZGVyIGlzIGFkZGVkXG4gICAgdGhpcy5hZGRPdmVycmlkZSgndGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycy5vY2knLCB7XG4gICAgICBzb3VyY2U6ICdvcmFjbGUvb2NpJyxcbiAgICAgIHZlcnNpb246ICc+PSA1LjAuMCwgPCA2LjAuMCcsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
package/lib/oci-stack.ts CHANGED
@@ -374,7 +374,7 @@ tail-function-logs.sh
374
374
  this.addOverride(`resource.null_resource.${writeOutputsId}.provisioner`, [
375
375
  {
376
376
  'local-exec': {
377
- command: 'if [ -n "$OCDK_PROJECT_DIR" ]; then cdktf output -json > "$OCDK_PROJECT_DIR/.ocdk-outputs.json"; fi',
377
+ command: 'if [ -n "$OCDK_PROJECT_DIR" ]; then terraform output -json > "$OCDK_PROJECT_DIR/.ocdk-outputs.json"; fi',
378
378
  },
379
379
  },
380
380
  ]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oci-cdk-test",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "OCI CDK stack for OCI Functions, API Gateway, and related infrastructure",
5
5
  "main": "lib/index.js",
6
6
  "bin": {