aws-cdk 2.19.0 → 2.20.0

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.
Files changed (47) hide show
  1. package/README.md +59 -11
  2. package/build-info.json +2 -2
  3. package/does-not-exist.json +1 -1
  4. package/lib/api/bootstrap/bootstrap-template.yaml +3 -1
  5. package/lib/api/cloudformation-deployments.d.ts +12 -1
  6. package/lib/api/cloudformation-deployments.js +31 -8
  7. package/lib/api/deploy-stack.d.ts +24 -0
  8. package/lib/api/deploy-stack.js +35 -8
  9. package/lib/api/evaluate-cloudformation-template.js +3 -2
  10. package/lib/api/hotswap/common.js +2 -2
  11. package/lib/api/util/cloudformation/stack-activity-monitor.js +7 -6
  12. package/lib/api/util/cloudformation/stack-status.js +2 -2
  13. package/lib/api/util/cloudformation.d.ts +3 -0
  14. package/lib/api/util/cloudformation.js +1 -1
  15. package/lib/api/util/display.d.ts +2 -0
  16. package/lib/api/util/display.js +15 -2
  17. package/lib/cdk-toolkit.d.ts +44 -21
  18. package/lib/cdk-toolkit.js +68 -1
  19. package/lib/cli.js +46 -3
  20. package/lib/commands/doctor.js +2 -2
  21. package/lib/import.d.ts +151 -0
  22. package/lib/import.js +245 -0
  23. package/lib/index.js +2296 -815
  24. package/lib/settings.js +3 -2
  25. package/lib/util/asset-publishing.d.ts +7 -1
  26. package/lib/util/asset-publishing.js +13 -6
  27. package/lib/version.js +2 -2
  28. package/package.json +10 -10
  29. package/test/api/hotswap/state-machine-hotswap-deployments.test.js +75 -1
  30. package/test/api/util/display.test.d.ts +1 -0
  31. package/test/api/util/display.test.js +34 -0
  32. package/test/bockfs.js +2 -2
  33. package/test/cdk-toolkit.test.js +4 -2
  34. package/test/import.test.d.ts +1 -0
  35. package/test/import.test.js +189 -0
  36. package/test/integ/cli/app/app.js +25 -0
  37. package/test/integ/cli/app/docker/Dockerfile +1 -1
  38. package/test/integ/cli/app/docker/Dockerfile.Custom +1 -1
  39. package/test/integ/cli/cli.integtest.js +33 -1
  40. package/test/integ/cli-regression-patches/v1.64.0/cdk-helpers.js +1 -1
  41. package/test/integ/cli-regression-patches/v1.64.1/cdk-helpers.js +1 -1
  42. package/test/integ/cli-regression-patches/v1.67.0/cdk-helpers.js +1 -1
  43. package/test/integ/helpers/cdk.js +4 -5
  44. package/test/integ/helpers/test-helpers.js +1 -3
  45. package/test/settings.test.js +10 -1
  46. package/test/util/mock-sdk.d.ts +2 -0
  47. package/test/util/mock-sdk.js +8 -2
@@ -589,7 +589,9 @@ describe('synth', () => {
589
589
  test('successful synth outputs hierarchical stack ids', async () => {
590
590
  const toolkit = defaultToolkitSetup();
591
591
  await toolkit.synth([], false, false);
592
- expect(stderrMock.mock.calls[1][0]).toMatch('Test-Stack-A-Display-Name, Test-Stack-B');
592
+ // Separate tests as colorizing hampers detection
593
+ expect(stderrMock.mock.calls[1][0]).toMatch('Test-Stack-A-Display-Name');
594
+ expect(stderrMock.mock.calls[1][0]).toMatch('Test-Stack-B');
593
595
  });
594
596
  test('with no stdout option', async () => {
595
597
  // GIVE
@@ -787,4 +789,4 @@ class FakeCloudFormation extends cloudformation_deployments_1.CloudFormationDepl
787
789
  }
788
790
  }
789
791
  }
790
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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Q0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIG5lZWQgdG8gbW9jayB0aGUgY2hva2lkYXIgbGlicmFyeSwgdXNlZCBieSAnY2RrIHdhdGNoJ1xuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2hlck9uID0gamVzdC5mbigpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlciA9IHtcbiAgb246IG1vY2tDaG9raWRhcldhdGNoZXJPbixcbn07XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24gPSB7XG4gIGdldCByZWFkeUNhbGxiYWNrKCk6ICgpID0+IHZvaWQge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMSk7XG4gICAgLy8gVGhlIGNhbGwgdG8gdGhlIGZpcnN0ICd3YXRjaGVyLm9uKCknIGluIHRoZSBwcm9kdWN0aW9uIGNvZGUgaXMgdGhlIG9uZSB3ZSBhY3R1YWxseSB3YW50IGhlcmUuXG4gICAgLy8gVGhpcyBpcyBhIHByZXR0eSBmcmFnaWxlLCBidXQgYXQgbGVhc3Qgd2l0aCB0aGlzIGhlbHBlciBjbGFzcyxcbiAgICAvLyB3ZSB3b3VsZCBoYXZlIHRvIGNoYW5nZSBpdCBvbmx5IGluIG9uZSBwbGFjZSBpZiBpdCBldmVyIGJyZWFrc1xuICAgIGNvbnN0IGZpcnN0Q2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzBdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChmaXJzdENhbGxbMF0pLnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gZmlyc3RDYWxsWzFdO1xuICB9LFxuXG4gIGdldCBmaWxlRXZlbnRDYWxsYmFjaygpOiAoZXZlbnQ6ICdhZGQnIHwgJ2FkZERpcicgfCAnY2hhbmdlJyB8ICd1bmxpbmsnIHwgJ3VubGlua0RpcicsIHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgyKTtcbiAgICBjb25zdCBzZWNvbmRDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMV07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChzZWNvbmRDYWxsWzBdKS5ub3QudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBzZWNvbmRDYWxsWzFdO1xuICB9LFxufTtcblxuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2ggPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJ2Nob2tpZGFyJywgKCkgPT4gKHtcbiAgd2F0Y2g6IG1vY2tDaG9raWRhcldhdGNoLFxufSkpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2ggPSB7XG4gIGdldCBpbmNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpbmNsdWRlIGFyZ3MgYXJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgcmV0dXJuIG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMF07XG4gIH0sXG5cbiAgZ2V0IGV4Y2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGlnbm9yZSBhcmdzIGFyZSBhIHByb3BlcnR5IG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIGNvbnN0IGNob2tpZGFyV2F0Y2hPcHRzID0gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVsxXTtcbiAgICByZXR1cm4gY2hva2lkYXJXYXRjaE9wdHMuaWdub3JlZDtcbiAgfSxcbn07XG5cbmNvbnN0IG1vY2tEYXRhID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCcuLi9saWIvbG9nZ2luZycsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbCgnLi4vbGliL2xvZ2dpbmcnKSxcbiAgZGF0YTogbW9ja0RhdGEsXG59KSk7XG5cbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vbGliL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cywgRGVwbG95U3RhY2tPcHRpb25zIH0gZnJvbSAnLi4vbGliL2FwaS9jbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2xpYi9hcGkvZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENka1Rvb2xraXQsIFRhZyB9IGZyb20gJy4uL2xpYi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICcuLi9saWIvZGlmZic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgaW5zdGFuY2VNb2NrRnJvbSwgTW9ja0Nsb3VkRXhlY3V0YWJsZSwgVGVzdFN0YWNrQXJ0aWZhY3QgfSBmcm9tICcuL3V0aWwnO1xuXG5sZXQgY2xvdWRFeGVjdXRhYmxlOiBNb2NrQ2xvdWRFeGVjdXRhYmxlO1xubGV0IGJvb3RzdHJhcHBlcjogamVzdC5Nb2NrZWQ8Qm9vdHN0cmFwcGVyPjtcbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuXG4gIG1vY2tDaG9raWRhcldhdGNoLm1vY2tSZXR1cm5WYWx1ZShmYWtlQ2hva2lkYXJXYXRjaGVyKTtcbiAgLy8gb24oKSBpbiBjaG9raWRhcidzIFdhdGNoZXIgcmV0dXJucyAndGhpcydcbiAgbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2tSZXR1cm5WYWx1ZShmYWtlQ2hva2lkYXJXYXRjaGVyKTtcblxuICBib290c3RyYXBwZXIgPSBpbnN0YW5jZU1vY2tGcm9tKEJvb3RzdHJhcHBlcik7XG4gIGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudC5tb2NrUmVzb2x2ZWRWYWx1ZSh7IG5vT3A6IGZhbHNlLCBvdXRwdXRzOiB7fSB9IGFzIGFueSk7XG5cbiAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgIHN0YWNrczogW1xuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0IsXG4gICAgXSxcbiAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgc3RhY2tzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQ10sXG4gICAgfV0sXG4gIH0pO1xuXG4gIHN0ZGVyck1vY2sgPSBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4gdHJ1ZTsgfSk7XG59KTtcblxuZnVuY3Rpb24gZGVmYXVsdFRvb2xraXRTZXR1cCgpIHtcbiAgcmV0dXJuIG5ldyBDZGtUb29sa2l0KHtcbiAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICBjbG91ZEZvcm1hdGlvbjogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAnVGVzdC1TdGFjay1CJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgICAnVGVzdC1TdGFjay1DJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgfSksXG4gIH0pO1xufVxuXG5kZXNjcmliZSgncmVhZEN1cnJlbnRUZW1wbGF0ZScsICgpID0+IHtcbiAgbGV0IHRlbXBsYXRlOiBhbnk7XG4gIGxldCBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCk7XG4gIGxldCBtb2NrQ2xvdWRFeGVjdXRhYmxlOiBNb2NrQ2xvdWRFeGVjdXRhYmxlO1xuICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgIHRlbXBsYXRlID0ge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBLZXk6ICdWYWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgICBsb29rdXBSb2xlOiB7XG4gICAgICAgICAgICAgIGFybjogJ2Jsb29wLWxvb2t1cDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgICAgIHJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uOiA1LFxuICAgICAgICAgICAgICBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI6ICcvYm9vdHN0cmFwL3BhcmFtZXRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTsgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJDbG91ZEZvcm1hdGlvbih7XG4gICAgICBnZXRUZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBUZW1wbGF0ZUJvZHk6IEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBkZXNjcmliZVN0YWNrcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBTdGFja3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICAgICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2xvb2t1cCByb2xlIGlzIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBsZXQgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lID0gcmVxdWVzdC5OYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFBhcmFtZXRlcjoge1xuICAgICAgICAgICAgVmFsdWU6ICc2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChyZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lISkudG9FcXVhbCgnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gaXMgbm90IHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbGV0IHJlcXVlc3RlZFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZSA9IHJlcXVlc3QuTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgIFZhbHVlOiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChyZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lISkudG9FcXVhbCgnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIG5vdCBmb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGZvdW5kJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgZm9yRW52aXJvbm1lbnQgdGhyb3dzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgLy8gdGhyb3cgZXJyb3IgZmlyc3QgZm9yIHRoZSAncHJlcGFyZVNka1dpdGhMb29rdXBSb2xlRm9yJyBjYWxsIGFuZCBzdWNjZWVkIGZvciB0aGUgcmVzdFxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdlcnJvcicpOyB9KVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTt9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7IH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkb250IGxvb2t1cCBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXIgaWYgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgdXNlZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiBmYWxzZSB9OyB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7IH07XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkbyBub3QgcHJpbnQgd2FybmluZ3MgaWYgbG9va3VwIHJvbGUgbm90IHByb3ZpZGVkIGluIHN0YWNrIGFydGlmYWN0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLm5vdC50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uLyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogdW5kZWZpbmVkLFxuICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2RlcGxveScsICgpID0+IHtcbiAgdGVzdCgnZmFpbHMgd2hlbiBubyB2YWxpZCBzdGFjayBuYW1lcyBhcmUgZ2l2ZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdCgoKSA9PiB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stRCddIH0gfSkpLnJlamVjdHMudG9UaHJvdygnTm8gc3RhY2tzIG1hdGNoIHRoZSBuYW1lKHMpIFRlc3QtU3RhY2stRCcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBob3Rzd2FwIGRlcGxveW1lbnQnLCAoKSA9PiB7XG4gICAgdGVzdChcInBhc3NlcyB0aHJvdWdoIHRoZSAnaG90c3dhcCcgb3B0aW9uIHRvIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMuZGVwbG95U3RhY2soKVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgbW9ja0NmbkRlcGxveW1lbnRzID0gaW5zdGFuY2VNb2NrRnJvbShDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKTtcbiAgICAgIG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjay5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgbm9PcDogZmFsc2UsXG4gICAgICAgIG91dHB1dHM6IHt9LFxuICAgICAgICBzdGFja0FybjogJ3N0YWNrQXJuJyxcbiAgICAgICAgc3RhY2tBcnRpZmFjdDogaW5zdGFuY2VNb2NrRnJvbShjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpLFxuICAgICAgfSkpO1xuICAgICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgY2xvdWRGb3JtYXRpb246IG1vY2tDZm5EZXBsb3ltZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9LFxuICAgICAgICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbC5OZXZlcixcbiAgICAgICAgaG90c3dhcDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QobW9ja0NmbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtYWtlcyBjb3JyZWN0IENsb3VkRm9ybWF0aW9uIGNhbGxzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3dpdGhvdXQgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQScsICdUZXN0LVN0YWNrLUInXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzdGFja3MgYWxsIHN0YWNrcyBzcGVjaWZpZWQgYXMgZG91YmxlIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKionXSB9IH0pO1xuICAgIH0pO1xuXG5cbiAgICB0ZXN0KCd3aXRoIG9uZSBzdGFjayBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKiddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHNucyBub3RpZmljYXRpb24gYXJucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46YXdzOnNuczo6OmNmbi1ub3RpZmljYXRpb25zJywgJ2Fybjphd3M6c25zOjo6bXktY29vbC10b3BpYyddO1xuICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgICAnVGVzdC1TdGFjay1CJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgICAgIH0sIG5vdGlmaWNhdGlvbkFybnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJywgJ1Rlc3QtU3RhY2stQiddIH0sXG4gICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICc1Njc4OScsXG4gICAgICAgIHJlZ2lvbjogJ3NvdXRoLXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vNTY3ODkvc291dGgtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZ2xvYmJ5IGJvb3RzdHJhcCB1c2VzIHdoYXRzIGluIHRoZSBzdGFja3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ2FwcCddLCAnc29tZXRoaW5nJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vKi9iZXJtdWRhLXRyaWFuZ2xlLTEnXSwgYm9vdHN0cmFwcGVyLCB7fSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICAgIH0sIGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSk7XG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdib290c3RyYXAgY2FuIGJlIGludm9rZWQgd2l0aG91dCB0aGUgLS1hcHAgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG1vY2tTeW50aGVzaXplID0gamVzdC5mbigpO1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLnN5bnRoZXNpemUgPSBtb2NrU3ludGhlc2l6ZTtcblxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly8xMjM0NTY3ODkwMTIvd2VzdC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICd3ZXN0LXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXG4gICAgICBleHBlY3QoY2xvdWRFeGVjdXRhYmxlLmhhc0FwcCkudG9FcXVhbChmYWxzZSk7XG4gICAgICBleHBlY3QobW9ja1N5bnRoZXNpemUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd3YXRjaCcsICgpID0+IHtcbiAgdGVzdChcImZhaWxzIHdoZW4gbm8gJ3dhdGNoJyBzZXR0aW5ncyBhcmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KS5yZWplY3RzLnRvVGhyb3coXCJDYW5ub3QgdXNlIHRoZSAnd2F0Y2gnIGNvbW1hbmQgd2l0aG91dCBzcGVjaWZ5aW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgdG8gbW9uaXRvci4gXCIgK1xuICAgICAgJ01ha2Ugc3VyZSB0byBhZGQgYSBcIndhdGNoXCIga2V5IHRvIHlvdXIgY2RrLmpzb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnb2JzZXJ2ZXMgb25seSB0aGUgcm9vdCBkaXJlY3RvcnkgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGluY2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGluY2x1ZGVBcmdzLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpciddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZXMgdGhlIG91dHB1dCBkaXIsIGRvdCBmaWxlcywgZG90IGRpcmVjdG9yaWVzLCBhbmQgbm9kZV9tb2R1bGVzIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ291dHB1dCddLCAnY2RrLm91dCcpO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoW1xuICAgICAgJ2Nkay5vdXQvKionLFxuICAgICAgJyoqLy4qJyxcbiAgICAgICcqKi8uKi8qKicsXG4gICAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICBdKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg1KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcicpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjInXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDYpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyMScpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1sxXSkudG9CZSgnKiovbXktZGlyMicpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBmaWxlIGNoYW5nZSBldmVudHMnLCAoKSA9PiB7XG4gICAgbGV0IHRvb2xraXQ6IENka1Rvb2xraXQ7XG4gICAgbGV0IGNka0RlcGxveU1vY2s6IGplc3QuTW9jaztcblxuICAgIGJlZm9yZUVhY2goYXN5bmMgKCkgPT4ge1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgICAgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNka0RlcGxveU1vY2sgPSBqZXN0LmZuKCk7XG4gICAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG4gICAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KFwiZG9lcyBub3QgdHJpZ2dlciBhICdkZXBsb3knIGJlZm9yZSB0aGUgJ3JlYWR5JyBldmVudCBoYXMgZmlyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKFwid2hlbiB0aGUgJ3JlYWR5JyBldmVudCBoYXMgYWxyZWFkeSBmaXJlZFwiLCAoKSA9PiB7XG4gICAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgICAgLy8gVGhlIHJlYWR5IGNhbGxiYWNrIHRyaWdnZXJzIGEgZGVwbG95bWVudCBzbyBlYWNoIHRlc3RcbiAgICAgICAgLy8gdGhhdCB1c2VzIHRoaXMgZnVuY3Rpb24gd2lsbCBzZWUgJ2Nka0RlcGxveU1vY2snIGNhbGxlZFxuICAgICAgICAvLyBhbiBhZGRpdGlvbmFsIHRpbWUuXG4gICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImFuIGluaXRpYWwgJ2RlcGxveScgaXMgdHJpZ2dlcmVkLCB3aXRob3V0IGFueSBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJkb2VzIHRyaWdnZXIgYSAnZGVwbG95JyBmb3IgYSBmaWxlIGNoYW5nZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJ0cmlnZ2VycyBhICdkZXBsb3knIHR3aWNlIGZvciB0d28gZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiYmF0Y2hlcyBmaWxlIGNoYW5nZXMgdGhhdCBoYXBwZW4gZHVyaW5nICdkZXBsb3knXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUxJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdjaGFuZ2UnLCAnbXktZmlsZTInKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ3VubGluaycsICdteS1maWxlMycpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGU0JyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3N5bnRoJywgKCkgPT4ge1xuICB0ZXN0KCdzdWNjZXNzZnVsIHN5bnRoIG91dHB1dHMgaGllcmFyY2hpY2FsIHN0YWNrIGlkcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW10sIGZhbHNlLCBmYWxzZSk7XG5cbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lLCBUZXN0LVN0YWNrLUInKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBubyBzdGRvdXQgb3B0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10sIGZhbHNlLCB0cnVlKTtcbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuU1RBQ0tTX1RPX1ZBTElEQVRFID0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhY2sgd2l0aCBlcnJvciBhbmQgZmxhZ2dlZCBmb3IgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgICBdLFxuICAgICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogdHJ1ZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBmYWlsIGlmIGF1dG9WYWxpZGF0ZT10cnVlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2F1c2VzIHN5bnRoIHRvIHN1Y2NlZWQgaWYgYXV0b1ZhbGlkYXRlPWZhbHNlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKTtcbiAgICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yIGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgXSxcbiAgICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IGZhbHNlIH0sIC4uLk1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1IgfSxcbiAgICAgICAgXSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnXSwgZmFsc2UsIHRydWUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciwgaXMgbm90IGZsYWdnZWQgZm9yIHZhbGlkYXRpb24gYW5kIHdhcyBub3QgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBkZXBlbmRlbmN5IGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQyxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRC5zdGFja05hbWVdLCB0cnVlLCBmYWxzZSk7XG5cbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHNbMF1bMF0pLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIE1vY2tTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19BOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUEnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUEnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdGb28nLCB2YWx1ZTogJ0JhcicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZScsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19COiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUInLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUInIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUInOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQzogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1DJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1DJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfRDogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1EJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1EJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1EJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkZXBlbmRzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdLFxuICB9XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX0VSUk9SOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICd3aXRoZXJyb3JzJyxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICB0ZW1wbGF0ZTogeyByZXNvdXJjZTogJ2Vycm9ycmVzb3VyY2UnIH0sXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvcmVzb3VyY2UnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLkVSUk9SLFxuICAgICAgICAgIGRhdGE6ICd0aGlzIGlzIGFuIGVycm9yJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJyxcbiAgfVxufVxuXG5jbGFzcyBGYWtlQ2xvdWRGb3JtYXRpb24gZXh0ZW5kcyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBlY3RlZFRhZ3M6IHsgW3N0YWNrTmFtZTogc3RyaW5nXTogVGFnW10gfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fSxcbiAgICBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgc3VwZXIoeyBzZGtQcm92aWRlcjogdW5kZWZpbmVkIGFzIGFueSB9KTtcblxuICAgIGZvciAoY29uc3QgW3N0YWNrTmFtZSwgdGFnc10gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWRUYWdzKSkge1xuICAgICAgdGhpcy5leHBlY3RlZFRhZ3Nbc3RhY2tOYW1lXSA9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRhZ3MpLm1hcCgoW0tleSwgVmFsdWVdKSA9PiAoeyBLZXksIFZhbHVlIH0pKVxuICAgICAgICAgIC5zb3J0KChsLCByKSA9PiBsLktleS5sb2NhbGVDb21wYXJlKHIuS2V5KSk7XG4gICAgfVxuICAgIGlmIChleHBlY3RlZE5vdGlmaWNhdGlvbkFybnMpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zID0gZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXBsb3lTdGFjayhvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgZXhwZWN0KFtNb2NrU3RhY2suTU9DS19TVEFDS19BLnN0YWNrTmFtZSwgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWUsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lXSlcbiAgICAgIC50b0NvbnRhaW4ob3B0aW9ucy5zdGFjay5zdGFja05hbWUpO1xuICAgIGV4cGVjdChvcHRpb25zLnRhZ3MpLnRvRXF1YWwodGhpcy5leHBlY3RlZFRhZ3Nbb3B0aW9ucy5zdGFjay5zdGFja05hbWVdKTtcbiAgICBleHBlY3Qob3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zKS50b0VxdWFsKHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHN0YWNrQXJuOiBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjo6OnN0YWNrLyR7b3B0aW9ucy5zdGFjay5zdGFja05hbWV9L01vY2tlZE91dGAsXG4gICAgICBub09wOiBmYWxzZSxcbiAgICAgIG91dHB1dHM6IHsgU3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSB9LFxuICAgICAgc3RhY2tBcnRpZmFjdDogb3B0aW9ucy5zdGFjayxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkQ3VycmVudFRlbXBsYXRlKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgc3dpdGNoIChzdGFjay5zdGFja05hbWUpIHtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQS5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19CLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgTm90IGFuIGV4cGVjdGVkIG1vY2sgc3RhY2s6ICR7c3RhY2suc3RhY2tOYW1lfWApO1xuICAgIH1cbiAgfVxufVxuIl19
792
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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QztJQUVNLG1CQUFtQixDQUFDLEtBQXdDO1FBQ2pFLFFBQVEsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUN2QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0IsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QjtnQkFDRSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsK0JBQStCLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzNFO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gV2UgbmVlZCB0byBtb2NrIHRoZSBjaG9raWRhciBsaWJyYXJ5LCB1c2VkIGJ5ICdjZGsgd2F0Y2gnXG5jb25zdCBtb2NrQ2hva2lkYXJXYXRjaGVyT24gPSBqZXN0LmZuKCk7XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyID0ge1xuICBvbjogbW9ja0Nob2tpZGFyV2F0Y2hlck9uLFxufTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoZXJPbiA9IHtcbiAgZ2V0IHJlYWR5Q2FsbGJhY2soKTogKCkgPT4gdm9pZCB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgxKTtcbiAgICAvLyBUaGUgY2FsbCB0byB0aGUgZmlyc3QgJ3dhdGNoZXIub24oKScgaW4gdGhlIHByb2R1Y3Rpb24gY29kZSBpcyB0aGUgb25lIHdlIGFjdHVhbGx5IHdhbnQgaGVyZS5cbiAgICAvLyBUaGlzIGlzIGEgcHJldHR5IGZyYWdpbGUsIGJ1dCBhdCBsZWFzdCB3aXRoIHRoaXMgaGVscGVyIGNsYXNzLFxuICAgIC8vIHdlIHdvdWxkIGhhdmUgdG8gY2hhbmdlIGl0IG9ubHkgaW4gb25lIHBsYWNlIGlmIGl0IGV2ZXIgYnJlYWtzXG4gICAgY29uc3QgZmlyc3RDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMF07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgJ3JlYWR5JyBldmVudCxcbiAgICAvLyBqdXN0IHRvIGJlIGRvdWJsZSBzYWZlXG4gICAgZXhwZWN0KGZpcnN0Q2FsbFswXSkudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBmaXJzdENhbGxbMV07XG4gIH0sXG5cbiAgZ2V0IGZpbGVFdmVudENhbGxiYWNrKCk6IChldmVudDogJ2FkZCcgfCAnYWRkRGlyJyB8ICdjaGFuZ2UnIHwgJ3VubGluaycgfCAndW5saW5rRGlyJywgcGF0aDogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+IHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDIpO1xuICAgIGNvbnN0IHNlY29uZENhbGwgPSBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxsc1sxXTtcbiAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCB0aGUgJ3JlYWR5JyBldmVudCxcbiAgICAvLyBqdXN0IHRvIGJlIGRvdWJsZSBzYWZlXG4gICAgZXhwZWN0KHNlY29uZENhbGxbMF0pLm5vdC50b0JlKCdyZWFkeScpO1xuICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgcmV0dXJuIHNlY29uZENhbGxbMV07XG4gIH0sXG59O1xuXG5jb25zdCBtb2NrQ2hva2lkYXJXYXRjaCA9IGplc3QuZm4oKTtcbmplc3QubW9jaygnY2hva2lkYXInLCAoKSA9PiAoe1xuICB3YXRjaDogbW9ja0Nob2tpZGFyV2F0Y2gsXG59KSk7XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaCA9IHtcbiAgZ2V0IGluY2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGluY2x1ZGUgYXJncyBhcmUgdGhlIGZpcnN0IHBhcmFtZXRlciB0byB0aGUgJ3dhdGNoKCknIGNhbGxcbiAgICByZXR1cm4gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVswXTtcbiAgfSxcblxuICBnZXQgZXhjbHVkZUFyZ3MoKTogc3RyaW5nW10ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAvLyB0aGUgaWdub3JlIGFyZ3MgYXJlIGEgcHJvcGVydHkgb2YgdGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgY29uc3QgY2hva2lkYXJXYXRjaE9wdHMgPSBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzWzBdWzFdO1xuICAgIHJldHVybiBjaG9raWRhcldhdGNoT3B0cy5pZ25vcmVkO1xuICB9LFxufTtcblxuY29uc3QgbW9ja0RhdGEgPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJy4uL2xpYi9sb2dnaW5nJywgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKCcuLi9saWIvbG9nZ2luZycpLFxuICBkYXRhOiBtb2NrRGF0YSxcbn0pKTtcblxuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBCb290c3RyYXBwZXIgfSBmcm9tICcuLi9saWIvYXBpL2Jvb3RzdHJhcCc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzLCBEZXBsb3lTdGFja09wdGlvbnMgfSBmcm9tICcuLi9saWIvYXBpL2Nsb3VkZm9ybWF0aW9uLWRlcGxveW1lbnRzJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vbGliL2FwaS9kZXBsb3ktc3RhY2snO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi9saWIvYXBpL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgQ2RrVG9vbGtpdCwgVGFnIH0gZnJvbSAnLi4vbGliL2Nkay10b29sa2l0JztcbmltcG9ydCB7IFJlcXVpcmVBcHByb3ZhbCB9IGZyb20gJy4uL2xpYi9kaWZmJztcbmltcG9ydCB7IGZsYXR0ZW4gfSBmcm9tICcuLi9saWIvdXRpbCc7XG5pbXBvcnQgeyBpbnN0YW5jZU1vY2tGcm9tLCBNb2NrQ2xvdWRFeGVjdXRhYmxlLCBUZXN0U3RhY2tBcnRpZmFjdCB9IGZyb20gJy4vdXRpbCc7XG5cbmxldCBjbG91ZEV4ZWN1dGFibGU6IE1vY2tDbG91ZEV4ZWN1dGFibGU7XG5sZXQgYm9vdHN0cmFwcGVyOiBqZXN0Lk1vY2tlZDxCb290c3RyYXBwZXI+O1xubGV0IHN0ZGVyck1vY2s6IGplc3QuU3B5SW5zdGFuY2U7XG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG5cbiAgbW9ja0Nob2tpZGFyV2F0Y2gubW9ja1JldHVyblZhbHVlKGZha2VDaG9raWRhcldhdGNoZXIpO1xuICAvLyBvbigpIGluIGNob2tpZGFyJ3MgV2F0Y2hlciByZXR1cm5zICd0aGlzJ1xuICBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9ja1JldHVyblZhbHVlKGZha2VDaG9raWRhcldhdGNoZXIpO1xuXG4gIGJvb3RzdHJhcHBlciA9IGluc3RhbmNlTW9ja0Zyb20oQm9vdHN0cmFwcGVyKTtcbiAgYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50Lm1vY2tSZXNvbHZlZFZhbHVlKHsgbm9PcDogZmFsc2UsIG91dHB1dHM6IHt9IH0gYXMgYW55KTtcblxuICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgc3RhY2tzOiBbXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICBdLFxuICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICBzdGFja3M6IFtNb2NrU3RhY2suTU9DS19TVEFDS19DXSxcbiAgICB9XSxcbiAgfSk7XG5cbiAgc3RkZXJyTW9jayA9IGplc3Quc3B5T24ocHJvY2Vzcy5zdGRlcnIsICd3cml0ZScpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB0cnVlOyB9KTtcbn0pO1xuXG5mdW5jdGlvbiBkZWZhdWx0VG9vbGtpdFNldHVwKCkge1xuICByZXR1cm4gbmV3IENka1Rvb2xraXQoe1xuICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICdUZXN0LVN0YWNrLUMnOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICB9KSxcbiAgfSk7XG59XG5cbmRlc2NyaWJlKCdyZWFkQ3VycmVudFRlbXBsYXRlJywgKCkgPT4ge1xuICBsZXQgdGVtcGxhdGU6IGFueTtcbiAgbGV0IG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKTtcbiAgbGV0IG1vY2tDbG91ZEV4ZWN1dGFibGU6IE1vY2tDbG91ZEV4ZWN1dGFibGU7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuXG4gICAgdGVtcGxhdGUgPSB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgRnVuYzoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIEtleTogJ1ZhbHVlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAge1xuICAgICAgICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9JyxcbiAgICAgICAgICAgIGxvb2t1cFJvbGU6IHtcbiAgICAgICAgICAgICAgYXJuOiAnYmxvb3AtbG9va3VwOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9JyxcbiAgICAgICAgICAgICAgcmVxdWlyZXNCb290c3RyYXBTdGFja1ZlcnNpb246IDUsXG4gICAgICAgICAgICAgIGJvb3RzdHJhcFN0YWNrVmVyc2lvblNzbVBhcmFtZXRlcjogJy9ib290c3RyYXAvcGFyYW1ldGVyJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQScsXG4gICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOiR7QVdTOjpSZWdpb259OiR7QVdTOjpBY2NvdW50SWR9JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9OyB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YkNsb3VkRm9ybWF0aW9uKHtcbiAgICAgIGdldFRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIGRlc2NyaWJlU3RhY2tzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQScsXG4gICAgICAgICAgICAgIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnbG9va3VwIHJvbGUgaXMgdXNlZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGxldCByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcihyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3RlZFBhcmFtZXRlck5hbWUgPSByZXF1ZXN0Lk5hbWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBWYWx1ZTogJzYnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KHJlcXVlc3RlZFBhcmFtZXRlck5hbWUhKS50b0VxdWFsKCcvYm9vdHN0cmFwL3BhcmFtZXRlcicpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBib290c3RyYXAgc3RhY2sgdmVyc2lvbiBpcyBub3QgdmFsaWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBsZXQgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lID0gcmVxdWVzdC5OYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFBhcmFtZXRlcjoge1xuICAgICAgICAgICAgVmFsdWU6ICcxJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KHJlcXVlc3RlZFBhcmFtZXRlck5hbWUhKS50b0VxdWFsKCcvYm9vdHN0cmFwL3BhcmFtZXRlcicpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXIgbm90IGZvdW5kJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgZm91bmQnKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdmYWxsYmFjayB0byBkZXBsb3kgcm9sZSBpZiBmb3JFbnZpcm9ubWVudCB0aHJvd3MnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICAvLyB0aHJvdyBlcnJvciBmaXJzdCBmb3IgdGhlICdwcmVwYXJlU2RrV2l0aExvb2t1cFJvbGVGb3InIGNhbGwgYW5kIHN1Y2NlZWQgZm9yIHRoZSByZXN0XG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbk9uY2UoKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ2Vycm9yJyk7IH0pXG4gICAgICAubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogdHJ1ZSB9O30pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHsgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvbnQgbG9va3VwIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBpZiBkZWZhdWx0IGNyZWRlbnRpYWxzIGFyZSB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IGZhbHNlIH07IH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHsgfTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2RvIG5vdCBwcmludCB3YXJuaW5ncyBpZiBsb29rdXAgcm9sZSBub3QgcHJvdmlkZWQgaW4gc3RhY2sgYXJ0aWZhY3QnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQSddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkubm90LnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24vKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiB1bmRlZmluZWQsXG4gICAgICBhc3N1bWVSb2xlRXh0ZXJuYWxJZDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnZGVwbG95JywgKCkgPT4ge1xuICB0ZXN0KCdmYWlscyB3aGVuIG5vIHZhbGlkIHN0YWNrIG5hbWVzIGFyZSBnaXZlbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1EJ10gfSB9KSkucmVqZWN0cy50b1Rocm93KCdObyBzdGFja3MgbWF0Y2ggdGhlIG5hbWUocykgVGVzdC1TdGFjay1EJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGhvdHN3YXAgZGVwbG95bWVudCcsICgpID0+IHtcbiAgICB0ZXN0KFwicGFzc2VzIHRocm91Z2ggdGhlICdob3Rzd2FwJyBvcHRpb24gdG8gQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cy5kZXBsb3lTdGFjaygpXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBtb2NrQ2ZuRGVwbG95bWVudHMgPSBpbnN0YW5jZU1vY2tGcm9tKENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMpO1xuICAgICAgbW9ja0NmbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBub09wOiBmYWxzZSxcbiAgICAgICAgb3V0cHV0czoge30sXG4gICAgICAgIHN0YWNrQXJuOiAnc3RhY2tBcm4nLFxuICAgICAgICBzdGFja0FydGlmYWN0OiBpbnN0YW5jZU1vY2tGcm9tKGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCksXG4gICAgICB9KSk7XG4gICAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbW9ja0NmbkRlcGxveW1lbnRzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddIH0sXG4gICAgICAgIHJlcXVpcmVBcHByb3ZhbDogUmVxdWlyZUFwcHJvdmFsLk5ldmVyLFxuICAgICAgICBob3Rzd2FwOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChtb2NrQ2ZuRGVwbG95bWVudHMuZGVwbG95U3RhY2spLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgaG90c3dhcDogdHJ1ZSxcbiAgICAgIH0pKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21ha2VzIGNvcnJlY3QgQ2xvdWRGb3JtYXRpb24gY2FsbHMnLCAoKSA9PiB7XG4gICAgdGVzdCgnd2l0aG91dCBvcHRpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJywgJ1Rlc3QtU3RhY2stQiddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHN0YWNrcyBhbGwgc3RhY2tzIHNwZWNpZmllZCBhcyBkb3VibGUgd2lsZGNhcmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWycqKiddIH0gfSk7XG4gICAgfSk7XG5cblxuICAgIHRlc3QoJ3dpdGggb25lIHN0YWNrIHNwZWNpZmllZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzdGFja3MgYWxsIHN0YWNrcyBzcGVjaWZpZWQgYXMgd2lsZGNhcmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWycqJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc25zIG5vdGlmaWNhdGlvbiBhcm5zJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbkFybnMgPSBbJ2Fybjphd3M6c25zOjo6Y2ZuLW5vdGlmaWNhdGlvbnMnLCAnYXJuOmF3czpzbnM6OjpteS1jb29sLXRvcGljJ107XG4gICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICAgfSwgbm90aWZpY2F0aW9uQXJucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSxcbiAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZ2xvYmxlc3MgYm9vdHN0cmFwIHVzZXMgZW52aXJvbm1lbnQgd2l0aG91dCBxdWVzdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLzU2Nzg5L3NvdXRoLXBvbGUnXSwgYm9vdHN0cmFwcGVyLCB7fSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYWNjb3VudDogJzU2Nzg5JyxcbiAgICAgICAgcmVnaW9uOiAnc291dGgtcG9sZScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJyxcbiAgICAgIH0sIGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSk7XG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdnbG9iYnkgYm9vdHN0cmFwIHVzZXMgd2hhdHMgaW4gdGhlIHN0YWNrcycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnYXBwJ10sICdzb21ldGhpbmcnKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly8qL2Jlcm11ZGEtdHJpYW5nbGUtMSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgcmVnaW9uOiAnYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Jvb3RzdHJhcCBjYW4gYmUgaW52b2tlZCB3aXRob3V0IHRoZSAtLWFwcCBhcmd1bWVudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5jbGVhcigpO1xuICAgICAgY29uc3QgbW9ja1N5bnRoZXNpemUgPSBqZXN0LmZuKCk7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuc3ludGhlc2l6ZSA9IG1vY2tTeW50aGVzaXplO1xuXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLzEyMzQ1Njc4OTAxMi93ZXN0LXBvbGUnXSwgYm9vdHN0cmFwcGVyLCB7fSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIHJlZ2lvbjogJ3dlc3QtcG9sZScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvd2VzdC1wb2xlJyxcbiAgICAgIH0sIGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSk7XG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICAgIGV4cGVjdChjbG91ZEV4ZWN1dGFibGUuaGFzQXBwKS50b0VxdWFsKGZhbHNlKTtcbiAgICAgIGV4cGVjdChtb2NrU3ludGhlc2l6ZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3dhdGNoJywgKCkgPT4ge1xuICB0ZXN0KFwiZmFpbHMgd2hlbiBubyAnd2F0Y2gnIHNldHRpbmdzIGFyZSBmb3VuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCgoKSA9PiB7XG4gICAgICByZXR1cm4gdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuICAgIH0pLnJlamVjdHMudG9UaHJvdyhcIkNhbm5vdCB1c2UgdGhlICd3YXRjaCcgY29tbWFuZCB3aXRob3V0IHNwZWNpZnlpbmcgYXQgbGVhc3Qgb25lIGRpcmVjdG9yeSB0byBtb25pdG9yLiBcIiArXG4gICAgICAnTWFrZSBzdXJlIHRvIGFkZCBhIFwid2F0Y2hcIiBrZXkgdG8geW91ciBjZGsuanNvbicpO1xuICB9KTtcblxuICB0ZXN0KCdvYnNlcnZlcyBvbmx5IHRoZSByb290IGRpcmVjdG9yeSBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgaW5jbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncztcbiAgICBleHBlY3QoaW5jbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDEpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhIHNpbmdsZSBzdHJpbmcgaW4gJ3dhdGNoLmluY2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBpbmNsdWRlOiAnbXktZGlyJyxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyJ10pO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjIvKiddLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoWydteS1kaXIxJywgJyoqL215LWRpcjIvKiddKTtcbiAgfSk7XG5cbiAgdGVzdCgnaWdub3JlcyB0aGUgb3V0cHV0IGRpciwgZG90IGZpbGVzLCBkb3QgZGlyZWN0b3JpZXMsIGFuZCBub2RlX21vZHVsZXMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnb3V0cHV0J10sICdjZGsub3V0Jyk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbXG4gICAgICAnY2RrLm91dC8qKicsXG4gICAgICAnKiovLionLFxuICAgICAgJyoqLy4qLyoqJyxcbiAgICAgICcqKi9ub2RlX21vZHVsZXMvKionLFxuICAgIF0pO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhIHNpbmdsZSBzdHJpbmcgaW4gJ3dhdGNoLmV4Y2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBleGNsdWRlOiAnbXktZGlyJyxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDUpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyJyk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhbGxvd3MgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHN0cmluZ3MgaW4gJ3dhdGNoLmV4Y2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBleGNsdWRlOiBbJ215LWRpcjEnLCAnKiovbXktZGlyMiddLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBjb25zdCBleGNsdWRlQXJncyA9IGZha2VDaG9raWRhcldhdGNoLmV4Y2x1ZGVBcmdzO1xuICAgIGV4cGVjdChleGNsdWRlQXJncy5sZW5ndGgpLnRvQmUoNik7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzBdKS50b0JlKCdteS1kaXIxJyk7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzFdKS50b0JlKCcqKi9teS1kaXIyJyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGZpbGUgY2hhbmdlIGV2ZW50cycsICgpID0+IHtcbiAgICBsZXQgdG9vbGtpdDogQ2RrVG9vbGtpdDtcbiAgICBsZXQgY2RrRGVwbG95TW9jazogamVzdC5Nb2NrO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgICB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcbiAgICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoXCJkb2VzIG5vdCB0cmlnZ2VyIGEgJ2RlcGxveScgYmVmb3JlIHRoZSAncmVhZHknIGV2ZW50IGhhcyBmaXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlJyk7XG5cbiAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJ3aGVuIHRoZSAncmVhZHknIGV2ZW50IGhhcyBhbHJlYWR5IGZpcmVkXCIsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBUaGUgcmVhZHkgY2FsbGJhY2sgdHJpZ2dlcnMgYSBkZXBsb3ltZW50IHNvIGVhY2ggdGVzdFxuICAgICAgICAvLyB0aGF0IHVzZXMgdGhpcyBmdW5jdGlvbiB3aWxsIHNlZSAnY2RrRGVwbG95TW9jaycgY2FsbGVkXG4gICAgICAgIC8vIGFuIGFkZGl0aW9uYWwgdGltZS5cbiAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiYW4gaW5pdGlhbCAnZGVwbG95JyBpcyB0cmlnZ2VyZWQsIHdpdGhvdXQgYW55IGZpbGUgY2hhbmdlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImRvZXMgdHJpZ2dlciBhICdkZXBsb3knIGZvciBhIGZpbGUgY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcInRyaWdnZXJzIGEgJ2RlcGxveScgdHdpY2UgZm9yIHR3byBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICBdKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJiYXRjaGVzIGZpbGUgY2hhbmdlcyB0aGF0IGhhcHBlbiBkdXJpbmcgJ2RlcGxveSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygndW5saW5rJywgJ215LWZpbGUzJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTQnKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc3ludGgnLCAoKSA9PiB7XG4gIHRlc3QoJ3N1Y2Nlc3NmdWwgc3ludGggb3V0cHV0cyBoaWVyYXJjaGljYWwgc3RhY2sgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIC8vIFNlcGFyYXRlIHRlc3RzIGFzIGNvbG9yaXppbmcgaGFtcGVycyBkZXRlY3Rpb25cbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJyk7XG4gICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9NYXRjaCgnVGVzdC1TdGFjay1CJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggbm8gc3Rkb3V0IG9wdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDApO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LlNUQUNLU19UT19WQUxJREFURSA9IHVuZGVmaW5lZDtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0YWNrIHdpdGggZXJyb3IgYW5kIGZsYWdnZWQgZm9yIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgICAgXSxcbiAgICAgICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IHRydWUgfSwgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gZmFpbCBpZiBhdXRvVmFsaWRhdGU9dHJ1ZScsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNvbnN0IGF1dG9WYWxpZGF0ZSA9IHRydWU7XG4gICAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSkpLnJlamVjdHMudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBzdWNjZWVkIGlmIGF1dG9WYWxpZGF0ZT1mYWxzZScsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNvbnN0IGF1dG9WYWxpZGF0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSk7XG4gICAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciBhbmQgd2FzIGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYygpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJ10sIGZhbHNlLCB0cnVlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZXJyb3IsIGlzIG5vdCBmbGFnZ2VkIGZvciB2YWxpZGF0aW9uIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0IsXG4gICAgICBdLFxuICAgICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogZmFsc2UgfSwgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUiB9LFxuICAgICAgICBdLFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZGVwZW5kZW5jeSBhbmQgd2FzIGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0MsXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0QsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Quc3RhY2tOYW1lXSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzWzBdWzBdKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5jbGFzcyBNb2NrU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQTogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1BJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1BJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1CJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1CJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1CJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0M6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stQycgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQyc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvVGVzdC1TdGFjay1DJyxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0Q6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stRCcsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stRCcgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stRCc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGVwZW5kczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lXSxcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfV0lUSF9FUlJPUjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnd2l0aGVycm9ycycsXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgdGVtcGxhdGU6IHsgcmVzb3VyY2U6ICdlcnJvcnJlc291cmNlJyB9LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL3Jlc291cmNlJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5FUlJPUixcbiAgICAgICAgICBkYXRhOiAndGhpcyBpcyBhbiBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvd2l0aGVycm9ycycsXG4gIH1cbn1cblxuY2xhc3MgRmFrZUNsb3VkRm9ybWF0aW9uIGV4dGVuZHMgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IFRhZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBleHBlY3RlZFRhZ3M6IHsgW3N0YWNrTmFtZTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge30sXG4gICAgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW10sXG4gICkge1xuICAgIHN1cGVyKHsgc2RrUHJvdmlkZXI6IHVuZGVmaW5lZCBhcyBhbnkgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHRhZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkVGFncykpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRUYWdzW3N0YWNrTmFtZV0gPVxuICAgICAgICBPYmplY3QuZW50cmllcyh0YWdzKS5tYXAoKFtLZXksIFZhbHVlXSkgPT4gKHsgS2V5LCBWYWx1ZSB9KSlcbiAgICAgICAgICAuc29ydCgobCwgcikgPT4gbC5LZXkubG9jYWxlQ29tcGFyZShyLktleSkpO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA9IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGV4cGVjdChbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQS5zdGFja05hbWUsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Iuc3RhY2tOYW1lLCBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZV0pXG4gICAgICAudG9Db250YWluKG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcbiAgICBleHBlY3Qob3B0aW9ucy50YWdzKS50b0VxdWFsKHRoaXMuZXhwZWN0ZWRUYWdzW29wdGlvbnMuc3RhY2suc3RhY2tOYW1lXSk7XG4gICAgZXhwZWN0KG9wdGlvbnMubm90aWZpY2F0aW9uQXJucykudG9FcXVhbCh0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICBzdGFja0FybjogYGFybjphd3M6Y2xvdWRmb3JtYXRpb246OjpzdGFjay8ke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfS9Nb2NrZWRPdXRgLFxuICAgICAgbm9PcDogZmFsc2UsXG4gICAgICBvdXRwdXRzOiB7IFN0YWNrTmFtZTogb3B0aW9ucy5zdGFjay5zdGFja05hbWUgfSxcbiAgICAgIHN0YWNrQXJ0aWZhY3Q6IG9wdGlvbnMuc3RhY2ssXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZEN1cnJlbnRUZW1wbGF0ZShzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIHN3aXRjaCAoc3RhY2suc3RhY2tOYW1lKSB7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYE5vdCBhbiBleHBlY3RlZCBtb2NrIHN0YWNrOiAke3N0YWNrLnN0YWNrTmFtZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ jest.mock('promptly', () => {
4
+ return {
5
+ ...jest.requireActual('promptly'),
6
+ confirm: jest.fn(),
7
+ prompt: jest.fn(),
8
+ };
9
+ });
10
+ const promptly = require("promptly");
11
+ const cloudformation_deployments_1 = require("../lib/api/cloudformation-deployments");
12
+ const import_1 = require("../lib/import");
13
+ const util_1 = require("./util");
14
+ const mock_sdk_1 = require("./util/mock-sdk");
15
+ const promptlyConfirm = promptly.confirm;
16
+ const promptlyPrompt = promptly.prompt;
17
+ let createChangeSetInput;
18
+ const STACK_WITH_QUEUE = util_1.testStack({
19
+ stackName: 'StackWithQueue',
20
+ template: {
21
+ Resources: {
22
+ MyQueue: {
23
+ Type: 'AWS::SQS::Queue',
24
+ Properties: {},
25
+ },
26
+ },
27
+ },
28
+ });
29
+ const STACK_WITH_NAMED_QUEUE = util_1.testStack({
30
+ stackName: 'StackWithQueue',
31
+ template: {
32
+ Resources: {
33
+ MyQueue: {
34
+ Type: 'AWS::SQS::Queue',
35
+ Properties: {
36
+ QueueName: 'TheQueueName',
37
+ },
38
+ },
39
+ },
40
+ },
41
+ });
42
+ let sdkProvider;
43
+ let deployments;
44
+ beforeEach(() => {
45
+ jest.resetAllMocks();
46
+ sdkProvider = new mock_sdk_1.MockSdkProvider({ realSdk: false });
47
+ deployments = new cloudformation_deployments_1.CloudFormationDeployments({ sdkProvider });
48
+ createChangeSetInput = undefined;
49
+ });
50
+ test('discovers importable resources', async () => {
51
+ givenCurrentStack(STACK_WITH_QUEUE.stackName, {
52
+ Resources: {},
53
+ });
54
+ const importer = new import_1.ResourceImporter(STACK_WITH_QUEUE, deployments);
55
+ const { additions } = await importer.discoverImportableResources();
56
+ expect(additions).toEqual([
57
+ expect.objectContaining({
58
+ logicalId: 'MyQueue',
59
+ }),
60
+ ]);
61
+ });
62
+ test('by default, its an error if there are non-addition changes in the template', async () => {
63
+ givenCurrentStack(STACK_WITH_QUEUE.stackName, {
64
+ Resources: {
65
+ SomethingThatDisappeared: {
66
+ Type: 'AWS::S3::Bucket',
67
+ },
68
+ },
69
+ });
70
+ const importer = new import_1.ResourceImporter(STACK_WITH_QUEUE, deployments);
71
+ await expect(importer.discoverImportableResources()).rejects.toThrow(/No resource updates or deletes/);
72
+ // But the error can be silenced
73
+ await expect(importer.discoverImportableResources(true)).resolves.toBeTruthy();
74
+ });
75
+ test('asks human for resource identifiers', async () => {
76
+ // GIVEN
77
+ givenCurrentStack(STACK_WITH_QUEUE.stackName, { Resources: {} });
78
+ const importer = new import_1.ResourceImporter(STACK_WITH_QUEUE, deployments);
79
+ const { additions } = await importer.discoverImportableResources();
80
+ // WHEN
81
+ promptlyPrompt.mockResolvedValue('TheQueueName');
82
+ const importable = await importer.askForResourceIdentifiers(additions);
83
+ // THEN
84
+ expect(importable.resourceMap).toEqual({
85
+ MyQueue: {
86
+ QueueName: 'TheQueueName',
87
+ },
88
+ });
89
+ expect(importable.importResources).toEqual([
90
+ expect.objectContaining({
91
+ logicalId: 'MyQueue',
92
+ }),
93
+ ]);
94
+ });
95
+ test('asks human to confirm automic import if identifier is in template', async () => {
96
+ // GIVEN
97
+ givenCurrentStack(STACK_WITH_NAMED_QUEUE.stackName, { Resources: {} });
98
+ const importer = new import_1.ResourceImporter(STACK_WITH_NAMED_QUEUE, deployments);
99
+ const { additions } = await importer.discoverImportableResources();
100
+ // WHEN
101
+ promptlyConfirm.mockResolvedValue(true);
102
+ const importable = await importer.askForResourceIdentifiers(additions);
103
+ // THEN
104
+ expect(importable.resourceMap).toEqual({
105
+ MyQueue: {
106
+ QueueName: 'TheQueueName',
107
+ },
108
+ });
109
+ expect(importable.importResources).toEqual([
110
+ expect.objectContaining({
111
+ logicalId: 'MyQueue',
112
+ }),
113
+ ]);
114
+ });
115
+ test('asks human to confirm automic import if identifier is in template', async () => {
116
+ // GIVEN
117
+ givenCurrentStack(STACK_WITH_QUEUE.stackName, { Resources: {} });
118
+ const importer = new import_1.ResourceImporter(STACK_WITH_QUEUE, deployments);
119
+ const { additions } = await importer.discoverImportableResources();
120
+ const importMap = {
121
+ importResources: additions,
122
+ resourceMap: {
123
+ MyQueue: { QueueName: 'TheQueueName' },
124
+ },
125
+ };
126
+ // WHEN
127
+ await importer.importResources(importMap, {
128
+ stack: STACK_WITH_QUEUE,
129
+ });
130
+ expect(createChangeSetInput === null || createChangeSetInput === void 0 ? void 0 : createChangeSetInput.ResourcesToImport).toEqual([
131
+ {
132
+ LogicalResourceId: 'MyQueue',
133
+ ResourceIdentifier: { QueueName: 'TheQueueName' },
134
+ ResourceType: 'AWS::SQS::Queue',
135
+ },
136
+ ]);
137
+ });
138
+ function givenCurrentStack(stackName, template) {
139
+ sdkProvider.stubCloudFormation({
140
+ describeStacks() {
141
+ return {
142
+ Stacks: [
143
+ {
144
+ StackName: stackName,
145
+ CreationTime: new Date(),
146
+ StackStatus: 'UPDATE_COMPLETE',
147
+ StackStatusReason: 'It is magic',
148
+ Outputs: [],
149
+ },
150
+ ],
151
+ };
152
+ },
153
+ getTemplate() {
154
+ return {
155
+ TemplateBody: JSON.stringify(template),
156
+ };
157
+ },
158
+ getTemplateSummary() {
159
+ return {
160
+ ResourceIdentifierSummaries: [
161
+ {
162
+ ResourceType: 'AWS::SQS::Queue',
163
+ ResourceIdentifiers: ['QueueName'],
164
+ },
165
+ ],
166
+ };
167
+ },
168
+ deleteChangeSet() {
169
+ return {};
170
+ },
171
+ createChangeSet(request) {
172
+ createChangeSetInput = request;
173
+ return {};
174
+ },
175
+ describeChangeSet() {
176
+ return {
177
+ Status: 'CREATE_COMPLETE',
178
+ Changes: [],
179
+ };
180
+ },
181
+ executeChangeSet() {
182
+ return {};
183
+ },
184
+ describeStackEvents() {
185
+ return {};
186
+ },
187
+ });
188
+ }
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbXBvcnQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtJQUN6QixPQUFPO1FBQ0wsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtLQUNsQixDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUM7QUFFSCxxQ0FBcUM7QUFDckMsc0ZBQWtGO0FBQ2xGLDBDQUE0RDtBQUM1RCxpQ0FBbUM7QUFDbkMsOENBQWtEO0FBRWxELE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxPQUFvQixDQUFDO0FBQ3RELE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxNQUFtQixDQUFDO0FBRXBELElBQUksb0JBQXlFLENBQUM7QUFFOUUsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBUyxDQUFDO0lBQ2pDLFNBQVMsRUFBRSxnQkFBZ0I7SUFDM0IsUUFBUSxFQUFFO1FBQ1IsU0FBUyxFQUFFO1lBQ1QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRSxFQUFFO2FBQ2Y7U0FDRjtLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxzQkFBc0IsR0FBRyxnQkFBUyxDQUFDO0lBQ3ZDLFNBQVMsRUFBRSxnQkFBZ0I7SUFDM0IsUUFBUSxFQUFFO1FBQ1IsU0FBUyxFQUFFO1lBQ1QsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRTtvQkFDVixTQUFTLEVBQUUsY0FBYztpQkFDMUI7YUFDRjtTQUNGO0tBQ0Y7Q0FDRixDQUFDLENBQUM7QUFFSCxJQUFJLFdBQTRCLENBQUM7QUFDakMsSUFBSSxXQUFzQyxDQUFDO0FB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UUFDRCxpQkFBaUI7WUFDZixPQUFPO2dCQUNMLE1BQU0sRUFBRSxpQkFBaUI7Z0JBQ3pCLE9BQU8sRUFBRSxFQUFFO2FBQ1osQ0FBQztRQUNKLENBQUM7UUFDRCxnQkFBZ0I7WUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxtQkFBbUI7WUFDakIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImplc3QubW9jaygncHJvbXB0bHknLCAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKCdwcm9tcHRseScpLFxuICAgIGNvbmZpcm06IGplc3QuZm4oKSxcbiAgICBwcm9tcHQ6IGplc3QuZm4oKSxcbiAgfTtcbn0pO1xuXG5pbXBvcnQgKiBhcyBwcm9tcHRseSBmcm9tICdwcm9tcHRseSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzIH0gZnJvbSAnLi4vbGliL2FwaS9jbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBSZXNvdXJjZUltcG9ydGVyLCBJbXBvcnRNYXAgfSBmcm9tICcuLi9saWIvaW1wb3J0JztcbmltcG9ydCB7IHRlc3RTdGFjayB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBNb2NrU2RrUHJvdmlkZXIgfSBmcm9tICcuL3V0aWwvbW9jay1zZGsnO1xuXG5jb25zdCBwcm9tcHRseUNvbmZpcm0gPSBwcm9tcHRseS5jb25maXJtIGFzIGplc3QuTW9jaztcbmNvbnN0IHByb21wdGx5UHJvbXB0ID0gcHJvbXB0bHkucHJvbXB0IGFzIGplc3QuTW9jaztcblxubGV0IGNyZWF0ZUNoYW5nZVNldElucHV0OiBBV1MuQ2xvdWRGb3JtYXRpb24uQ3JlYXRlQ2hhbmdlU2V0SW5wdXQgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IFNUQUNLX1dJVEhfUVVFVUUgPSB0ZXN0U3RhY2soe1xuICBzdGFja05hbWU6ICdTdGFja1dpdGhRdWV1ZScsXG4gIHRlbXBsYXRlOiB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBNeVF1ZXVlOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OlNRUzo6UXVldWUnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7fSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn0pO1xuXG5jb25zdCBTVEFDS19XSVRIX05BTUVEX1FVRVVFID0gdGVzdFN0YWNrKHtcbiAgc3RhY2tOYW1lOiAnU3RhY2tXaXRoUXVldWUnLFxuICB0ZW1wbGF0ZToge1xuICAgIFJlc291cmNlczoge1xuICAgICAgTXlRdWV1ZToge1xuICAgICAgICBUeXBlOiAnQVdTOjpTUVM6OlF1ZXVlJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIFF1ZXVlTmFtZTogJ1RoZVF1ZXVlTmFtZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcblxubGV0IHNka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5sZXQgZGVwbG95bWVudHM6IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHM7XG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG4gIHNka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcih7IHJlYWxTZGs6IGZhbHNlIH0pO1xuICBkZXBsb3ltZW50cyA9IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXIgfSk7XG4gIGNyZWF0ZUNoYW5nZVNldElucHV0ID0gdW5kZWZpbmVkO1xufSk7XG5cbnRlc3QoJ2Rpc2NvdmVycyBpbXBvcnRhYmxlIHJlc291cmNlcycsIGFzeW5jICgpID0+IHtcbiAgZ2l2ZW5DdXJyZW50U3RhY2soU1RBQ0tfV0lUSF9RVUVVRS5zdGFja05hbWUsIHtcbiAgICBSZXNvdXJjZXM6IHt9LFxuICB9KTtcblxuICBjb25zdCBpbXBvcnRlciA9IG5ldyBSZXNvdXJjZUltcG9ydGVyKFNUQUNLX1dJVEhfUVVFVUUsIGRlcGxveW1lbnRzKTtcbiAgY29uc3QgeyBhZGRpdGlvbnMgfSA9IGF3YWl0IGltcG9ydGVyLmRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcygpO1xuICBleHBlY3QoYWRkaXRpb25zKS50b0VxdWFsKFtcbiAgICBleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICBsb2dpY2FsSWQ6ICdNeVF1ZXVlJyxcbiAgICB9KSxcbiAgXSk7XG59KTtcblxudGVzdCgnYnkgZGVmYXVsdCwgaXRzIGFuIGVycm9yIGlmIHRoZXJlIGFyZSBub24tYWRkaXRpb24gY2hhbmdlcyBpbiB0aGUgdGVtcGxhdGUnLCBhc3luYyAoKSA9PiB7XG4gIGdpdmVuQ3VycmVudFN0YWNrKFNUQUNLX1dJVEhfUVVFVUUuc3RhY2tOYW1lLCB7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBTb21ldGhpbmdUaGF0RGlzYXBwZWFyZWQ6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6UzM6OkJ1Y2tldCcsXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IGltcG9ydGVyID0gbmV3IFJlc291cmNlSW1wb3J0ZXIoU1RBQ0tfV0lUSF9RVUVVRSwgZGVwbG95bWVudHMpO1xuICBhd2FpdCBleHBlY3QoaW1wb3J0ZXIuZGlzY292ZXJJbXBvcnRhYmxlUmVzb3VyY2VzKCkpLnJlamVjdHMudG9UaHJvdygvTm8gcmVzb3VyY2UgdXBkYXRlcyBvciBkZWxldGVzLyk7XG5cbiAgLy8gQnV0IHRoZSBlcnJvciBjYW4gYmUgc2lsZW5jZWRcbiAgYXdhaXQgZXhwZWN0KGltcG9ydGVyLmRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcyh0cnVlKSkucmVzb2x2ZXMudG9CZVRydXRoeSgpO1xufSk7XG5cbnRlc3QoJ2Fza3MgaHVtYW4gZm9yIHJlc291cmNlIGlkZW50aWZpZXJzJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlbkN1cnJlbnRTdGFjayhTVEFDS19XSVRIX1FVRVVFLnN0YWNrTmFtZSwgeyBSZXNvdXJjZXM6IHt9IH0pO1xuICBjb25zdCBpbXBvcnRlciA9IG5ldyBSZXNvdXJjZUltcG9ydGVyKFNUQUNLX1dJVEhfUVVFVUUsIGRlcGxveW1lbnRzKTtcbiAgY29uc3QgeyBhZGRpdGlvbnMgfSA9IGF3YWl0IGltcG9ydGVyLmRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcygpO1xuXG4gIC8vIFdIRU5cbiAgcHJvbXB0bHlQcm9tcHQubW9ja1Jlc29sdmVkVmFsdWUoJ1RoZVF1ZXVlTmFtZScpO1xuICBjb25zdCBpbXBvcnRhYmxlID0gYXdhaXQgaW1wb3J0ZXIuYXNrRm9yUmVzb3VyY2VJZGVudGlmaWVycyhhZGRpdGlvbnMpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGltcG9ydGFibGUucmVzb3VyY2VNYXApLnRvRXF1YWwoe1xuICAgIE15UXVldWU6IHtcbiAgICAgIFF1ZXVlTmFtZTogJ1RoZVF1ZXVlTmFtZScsXG4gICAgfSxcbiAgfSk7XG4gIGV4cGVjdChpbXBvcnRhYmxlLmltcG9ydFJlc291cmNlcykudG9FcXVhbChbXG4gICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgbG9naWNhbElkOiAnTXlRdWV1ZScsXG4gICAgfSksXG4gIF0pO1xufSk7XG5cbnRlc3QoJ2Fza3MgaHVtYW4gdG8gY29uZmlybSBhdXRvbWljIGltcG9ydCBpZiBpZGVudGlmaWVyIGlzIGluIHRlbXBsYXRlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlbkN1cnJlbnRTdGFjayhTVEFDS19XSVRIX05BTUVEX1FVRVVFLnN0YWNrTmFtZSwgeyBSZXNvdXJjZXM6IHt9IH0pO1xuICBjb25zdCBpbXBvcnRlciA9IG5ldyBSZXNvdXJjZUltcG9ydGVyKFNUQUNLX1dJVEhfTkFNRURfUVVFVUUsIGRlcGxveW1lbnRzKTtcbiAgY29uc3QgeyBhZGRpdGlvbnMgfSA9IGF3YWl0IGltcG9ydGVyLmRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcygpO1xuXG4gIC8vIFdIRU5cbiAgcHJvbXB0bHlDb25maXJtLm1vY2tSZXNvbHZlZFZhbHVlKHRydWUpO1xuICBjb25zdCBpbXBvcnRhYmxlID0gYXdhaXQgaW1wb3J0ZXIuYXNrRm9yUmVzb3VyY2VJZGVudGlmaWVycyhhZGRpdGlvbnMpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGltcG9ydGFibGUucmVzb3VyY2VNYXApLnRvRXF1YWwoe1xuICAgIE15UXVldWU6IHtcbiAgICAgIFF1ZXVlTmFtZTogJ1RoZVF1ZXVlTmFtZScsXG4gICAgfSxcbiAgfSk7XG4gIGV4cGVjdChpbXBvcnRhYmxlLmltcG9ydFJlc291cmNlcykudG9FcXVhbChbXG4gICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgbG9naWNhbElkOiAnTXlRdWV1ZScsXG4gICAgfSksXG4gIF0pO1xufSk7XG5cbnRlc3QoJ2Fza3MgaHVtYW4gdG8gY29uZmlybSBhdXRvbWljIGltcG9ydCBpZiBpZGVudGlmaWVyIGlzIGluIHRlbXBsYXRlJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBnaXZlbkN1cnJlbnRTdGFjayhTVEFDS19XSVRIX1FVRVVFLnN0YWNrTmFtZSwgeyBSZXNvdXJjZXM6IHt9IH0pO1xuICBjb25zdCBpbXBvcnRlciA9IG5ldyBSZXNvdXJjZUltcG9ydGVyKFNUQUNLX1dJVEhfUVVFVUUsIGRlcGxveW1lbnRzKTtcbiAgY29uc3QgeyBhZGRpdGlvbnMgfSA9IGF3YWl0IGltcG9ydGVyLmRpc2NvdmVySW1wb3J0YWJsZVJlc291cmNlcygpO1xuICBjb25zdCBpbXBvcnRNYXA6IEltcG9ydE1hcCA9IHtcbiAgICBpbXBvcnRSZXNvdXJjZXM6IGFkZGl0aW9ucyxcbiAgICByZXNvdXJjZU1hcDoge1xuICAgICAgTXlRdWV1ZTogeyBRdWV1ZU5hbWU6ICdUaGVRdWV1ZU5hbWUnIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBXSEVOXG4gIGF3YWl0IGltcG9ydGVyLmltcG9ydFJlc291cmNlcyhpbXBvcnRNYXAsIHtcbiAgICBzdGFjazogU1RBQ0tfV0lUSF9RVUVVRSxcbiAgfSk7XG5cbiAgZXhwZWN0KGNyZWF0ZUNoYW5nZVNldElucHV0Py5SZXNvdXJjZXNUb0ltcG9ydCkudG9FcXVhbChbXG4gICAge1xuICAgICAgTG9naWNhbFJlc291cmNlSWQ6ICdNeVF1ZXVlJyxcbiAgICAgIFJlc291cmNlSWRlbnRpZmllcjogeyBRdWV1ZU5hbWU6ICdUaGVRdWV1ZU5hbWUnIH0sXG4gICAgICBSZXNvdXJjZVR5cGU6ICdBV1M6OlNRUzo6UXVldWUnLFxuICAgIH0sXG4gIF0pO1xufSk7XG5cbmZ1bmN0aW9uIGdpdmVuQ3VycmVudFN0YWNrKHN0YWNrTmFtZTogc3RyaW5nLCB0ZW1wbGF0ZTogYW55KSB7XG4gIHNka1Byb3ZpZGVyLnN0dWJDbG91ZEZvcm1hdGlvbih7XG4gICAgZGVzY3JpYmVTdGFja3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBTdGFja3M6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIFN0YWNrU3RhdHVzOiAnVVBEQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgICAgIFN0YWNrU3RhdHVzUmVhc29uOiAnSXQgaXMgbWFnaWMnLFxuICAgICAgICAgICAgT3V0cHV0czogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZXRUZW1wbGF0ZSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFRlbXBsYXRlQm9keTogSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpLFxuICAgICAgfTtcbiAgICB9LFxuICAgIGdldFRlbXBsYXRlU3VtbWFyeSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFJlc291cmNlSWRlbnRpZmllclN1bW1hcmllczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlc291cmNlVHlwZTogJ0FXUzo6U1FTOjpRdWV1ZScsXG4gICAgICAgICAgICBSZXNvdXJjZUlkZW50aWZpZXJzOiBbJ1F1ZXVlTmFtZSddLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH0sXG4gICAgZGVsZXRlQ2hhbmdlU2V0KCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH0sXG4gICAgY3JlYXRlQ2hhbmdlU2V0KHJlcXVlc3QpIHtcbiAgICAgIGNyZWF0ZUNoYW5nZVNldElucHV0ID0gcmVxdWVzdDtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGRlc2NyaWJlQ2hhbmdlU2V0KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgQ2hhbmdlczogW10sXG4gICAgICB9O1xuICAgIH0sXG4gICAgZXhlY3V0ZUNoYW5nZVNldCgpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIGRlc2NyaWJlU3RhY2tFdmVudHMoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfSxcbiAgfSk7XG59Il19