aws-cdk 2.37.1 → 2.38.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 (70) hide show
  1. package/README.md +13 -1
  2. package/THIRD_PARTY_LICENSES +81 -1
  3. package/build-info.json +2 -2
  4. package/lib/api/aws-auth/aws-sdk-inifile.js +2 -3
  5. package/lib/api/aws-auth/awscli-compatible.js +5 -7
  6. package/lib/api/aws-auth/sdk-provider.js +7 -11
  7. package/lib/api/aws-auth/sdk.js +2 -3
  8. package/lib/api/bootstrap/bootstrap-environment.js +14 -15
  9. package/lib/api/bootstrap/deploy-bootstrap.js +5 -7
  10. package/lib/api/cloudformation-deployments.js +9 -12
  11. package/lib/api/cxapp/cloud-assembly.js +3 -4
  12. package/lib/api/cxapp/cloud-executable.js +2 -3
  13. package/lib/api/cxapp/exec.js +8 -10
  14. package/lib/api/deploy-stack.js +11 -13
  15. package/lib/api/evaluate-cloudformation-template.js +6 -11
  16. package/lib/api/hotswap/appsync-mapping-templates.js +4 -5
  17. package/lib/api/hotswap/code-build-projects.js +2 -3
  18. package/lib/api/hotswap/ecs-services.js +4 -5
  19. package/lib/api/hotswap/lambda-functions.js +45 -24
  20. package/lib/api/hotswap/s3-bucket-deployments.js +3 -5
  21. package/lib/api/hotswap/stepfunctions-state-machines.js +2 -3
  22. package/lib/api/hotswap-deployments.js +5 -7
  23. package/lib/api/logs/logs-monitor.js +5 -8
  24. package/lib/api/nested-stack-helpers.js +9 -11
  25. package/lib/api/toolkit-info.js +12 -17
  26. package/lib/api/util/cloudformation/stack-activity-monitor.js +17 -27
  27. package/lib/api/util/cloudformation.js +7 -11
  28. package/lib/api/util/placeholders.js +2 -3
  29. package/lib/assets.js +3 -4
  30. package/lib/cdk-toolkit.d.ts +14 -0
  31. package/lib/cdk-toolkit.js +36 -19
  32. package/lib/cli.js +14 -14
  33. package/lib/context-providers/load-balancers.js +11 -18
  34. package/lib/context-providers/security-groups.js +5 -7
  35. package/lib/deploy.d.ts +7 -0
  36. package/lib/deploy.js +43 -0
  37. package/lib/import.js +8 -13
  38. package/lib/index.js +2500 -1469
  39. package/lib/notices.js +11 -17
  40. package/lib/settings.js +4 -5
  41. package/lib/util/asset-publishing.js +5 -8
  42. package/lib/util/directories.js +2 -3
  43. package/lib/version.js +2 -2
  44. package/package.json +10 -9
  45. package/test/api/bootstrap2.test.js +2 -3
  46. package/test/api/cloud-executable.test.js +2 -3
  47. package/test/api/deploy-stack.test.js +4 -7
  48. package/test/api/fake-sts.js +6 -8
  49. package/test/api/hotswap/hotswap-deployments.test.js +4 -4
  50. package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +3 -3
  51. package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +179 -7
  52. package/test/api/sdk-provider.test.js +8 -11
  53. package/test/aws-sdk-non-public-apis.test.js +2 -3
  54. package/test/cdk-toolkit.test.js +10 -1
  55. package/test/context-providers/load-balancers.test.js +3 -5
  56. package/test/deploy.test.d.ts +1 -0
  57. package/test/deploy.test.js +175 -0
  58. package/test/import.test.js +2 -2
  59. package/test/init.test.js +2 -3
  60. package/test/integ/cli/app/app.js +19 -0
  61. package/test/integ/cli/bootstrapping.integtest.js +9 -20
  62. package/test/integ/cli/cli.integtest.js +62 -31
  63. package/test/integ/github-helpers.js +2 -3
  64. package/test/integ/helpers/aws.js +4 -7
  65. package/test/integ/helpers/cdk.js +21 -30
  66. package/test/integ/helpers/sam.js +10 -17
  67. package/test/util/mock-child_process.js +3 -4
  68. package/test/util/mock-sdk.js +4 -6
  69. package/test/util/mock-toolkitinfo.js +4 -5
  70. package/test/util.js +3 -5
@@ -558,6 +558,15 @@ describe('watch', () => {
558
558
  expect(excludeArgs[0]).toBe('my-dir1');
559
559
  expect(excludeArgs[1]).toBe('**/my-dir2');
560
560
  });
561
+ test('allows watching with deploy concurrency', async () => {
562
+ cloudExecutable.configuration.settings.set(['watch'], {});
563
+ const toolkit = defaultToolkitSetup();
564
+ const cdkDeployMock = jest.fn();
565
+ toolkit.deploy = cdkDeployMock;
566
+ await toolkit.watch({ selector: { patterns: [] }, concurrency: 3 });
567
+ fakeChokidarWatcherOn.readyCallback();
568
+ expect(cdkDeployMock).toBeCalledWith(expect.objectContaining({ concurrency: 3 }));
569
+ });
561
570
  describe('with file change events', () => {
562
571
  let toolkit;
563
572
  let cdkDeployMock;
@@ -809,4 +818,4 @@ class FakeCloudFormation extends cloudformation_deployments_1.CloudFormationDepl
809
818
  }
810
819
  }
811
820
  }
812
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FB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QVMsRUFBRSxDQUFDLENBQUM7U0FDM0U7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBXZSBuZWVkIHRvIG1vY2sgdGhlIGNob2tpZGFyIGxpYnJhcnksIHVzZWQgYnkgJ2NkayB3YXRjaCdcbmNvbnN0IG1vY2tDaG9raWRhcldhdGNoZXJPbiA9IGplc3QuZm4oKTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoZXIgPSB7XG4gIG9uOiBtb2NrQ2hva2lkYXJXYXRjaGVyT24sXG59O1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlck9uID0ge1xuICBnZXQgcmVhZHlDYWxsYmFjaygpOiAoKSA9PiB2b2lkIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlR3JlYXRlclRoYW5PckVxdWFsKDEpO1xuICAgIC8vIFRoZSBjYWxsIHRvIHRoZSBmaXJzdCAnd2F0Y2hlci5vbigpJyBpbiB0aGUgcHJvZHVjdGlvbiBjb2RlIGlzIHRoZSBvbmUgd2UgYWN0dWFsbHkgd2FudCBoZXJlLlxuICAgIC8vIFRoaXMgaXMgYSBwcmV0dHkgZnJhZ2lsZSwgYnV0IGF0IGxlYXN0IHdpdGggdGhpcyBoZWxwZXIgY2xhc3MsXG4gICAgLy8gd2Ugd291bGQgaGF2ZSB0byBjaGFuZ2UgaXQgb25seSBpbiBvbmUgcGxhY2UgaWYgaXQgZXZlciBicmVha3NcbiAgICBjb25zdCBmaXJzdENhbGwgPSBtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxsc1swXTtcbiAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSAncmVhZHknIGV2ZW50LFxuICAgIC8vIGp1c3QgdG8gYmUgZG91YmxlIHNhZmVcbiAgICBleHBlY3QoZmlyc3RDYWxsWzBdKS50b0JlKCdyZWFkeScpO1xuICAgIC8vIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxiYWNrXG4gICAgcmV0dXJuIGZpcnN0Q2FsbFsxXTtcbiAgfSxcblxuICBnZXQgZmlsZUV2ZW50Q2FsbGJhY2soKTogKGV2ZW50OiAnYWRkJyB8ICdhZGREaXInIHwgJ2NoYW5nZScgfCAndW5saW5rJyB8ICd1bmxpbmtEaXInLCBwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD4ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMik7XG4gICAgY29uc3Qgc2Vjb25kQ2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzFdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IHRoZSAncmVhZHknIGV2ZW50LFxuICAgIC8vIGp1c3QgdG8gYmUgZG91YmxlIHNhZmVcbiAgICBleHBlY3Qoc2Vjb25kQ2FsbFswXSkubm90LnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gc2Vjb25kQ2FsbFsxXTtcbiAgfSxcbn07XG5cbmNvbnN0IG1vY2tDaG9raWRhcldhdGNoID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCdjaG9raWRhcicsICgpID0+ICh7XG4gIHdhdGNoOiBtb2NrQ2hva2lkYXJXYXRjaCxcbn0pKTtcbmNvbnN0IGZha2VDaG9raWRhcldhdGNoID0ge1xuICBnZXQgaW5jbHVkZUFyZ3MoKTogc3RyaW5nW10ge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZSgxKTtcbiAgICAvLyB0aGUgaW5jbHVkZSBhcmdzIGFyZSB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIHJldHVybiBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrLmNhbGxzWzBdWzBdO1xuICB9LFxuXG4gIGdldCBleGNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpZ25vcmUgYXJncyBhcmUgYSBwcm9wZXJ0eSBvZiB0aGUgc2Vjb25kIHBhcmFtZXRlciB0byB0aGUgJ3dhdGNoKCknIGNhbGxcbiAgICBjb25zdCBjaG9raWRhcldhdGNoT3B0cyA9IG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMV07XG4gICAgcmV0dXJuIGNob2tpZGFyV2F0Y2hPcHRzLmlnbm9yZWQ7XG4gIH0sXG59O1xuXG5jb25zdCBtb2NrRGF0YSA9IGplc3QuZm4oKTtcbmplc3QubW9jaygnLi4vbGliL2xvZ2dpbmcnLCAoKSA9PiAoe1xuICAuLi5qZXN0LnJlcXVpcmVBY3R1YWwoJy4uL2xpYi9sb2dnaW5nJyksXG4gIGRhdGE6IG1vY2tEYXRhLFxufSkpO1xuXG5pbXBvcnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IEJvb3RzdHJhcHBlciB9IGZyb20gJy4uL2xpYi9hcGkvYm9vdHN0cmFwJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMsIERlcGxveVN0YWNrT3B0aW9ucyB9IGZyb20gJy4uL2xpYi9hcGkvY2xvdWRmb3JtYXRpb24tZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgRGVwbG95U3RhY2tSZXN1bHQgfSBmcm9tICcuLi9saWIvYXBpL2RlcGxveS1zdGFjayc7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gJy4uL2xpYi9hcGkvdXRpbC9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBDZGtUb29sa2l0LCBUYWcgfSBmcm9tICcuLi9saWIvY2RrLXRvb2xraXQnO1xuaW1wb3J0IHsgUmVxdWlyZUFwcHJvdmFsIH0gZnJvbSAnLi4vbGliL2RpZmYnO1xuaW1wb3J0IHsgZmxhdHRlbiB9IGZyb20gJy4uL2xpYi91dGlsJztcbmltcG9ydCB7IGluc3RhbmNlTW9ja0Zyb20sIE1vY2tDbG91ZEV4ZWN1dGFibGUsIFRlc3RTdGFja0FydGlmYWN0IH0gZnJvbSAnLi91dGlsJztcblxubGV0IGNsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbmxldCBib290c3RyYXBwZXI6IGplc3QuTW9ja2VkPEJvb3RzdHJhcHBlcj47XG5sZXQgc3RkZXJyTW9jazogamVzdC5TcHlJbnN0YW5jZTtcbmJlZm9yZUVhY2goKCkgPT4ge1xuICBqZXN0LnJlc2V0QWxsTW9ja3MoKTtcblxuICBtb2NrQ2hva2lkYXJXYXRjaC5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG4gIC8vIG9uKCkgaW4gY2hva2lkYXIncyBXYXRjaGVyIHJldHVybnMgJ3RoaXMnXG4gIG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrUmV0dXJuVmFsdWUoZmFrZUNob2tpZGFyV2F0Y2hlcik7XG5cbiAgYm9vdHN0cmFwcGVyID0gaW5zdGFuY2VNb2NrRnJvbShCb290c3RyYXBwZXIpO1xuICBib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQubW9ja1Jlc29sdmVkVmFsdWUoeyBub09wOiBmYWxzZSwgb3V0cHV0czoge30gfSBhcyBhbnkpO1xuXG4gIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICBzdGFja3M6IFtcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgIF0sXG4gICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgIHN0YWNrczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0NdLFxuICAgIH1dLFxuICB9KTtcblxuICBzdGRlcnJNb2NrID0gamVzdC5zcHlPbihwcm9jZXNzLnN0ZGVyciwgJ3dyaXRlJykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHRydWU7IH0pO1xufSk7XG5cbmZ1bmN0aW9uIGRlZmF1bHRUb29sa2l0U2V0dXAoKSB7XG4gIHJldHVybiBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQic6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgICAgJ1Rlc3QtU3RhY2stQyc6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgIH0pLFxuICB9KTtcbn1cblxuZGVzY3JpYmUoJ3JlYWRDdXJyZW50VGVtcGxhdGUnLCAoKSA9PiB7XG4gIGxldCB0ZW1wbGF0ZTogYW55O1xuICBsZXQgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpO1xuICBsZXQgbW9ja0Nsb3VkRXhlY3V0YWJsZTogTW9ja0Nsb3VkRXhlY3V0YWJsZTtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG5cbiAgICB0ZW1wbGF0ZSA9IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgS2V5OiAnVmFsdWUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgbG9va3VwUm9sZToge1xuICAgICAgICAgICAgICBhcm46ICdibG9vcC1sb29rdXA6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgICAgICByZXF1aXJlc0Jvb3RzdHJhcFN0YWNrVmVyc2lvbjogNSxcbiAgICAgICAgICAgICAgYm9vdHN0cmFwU3RhY2tWZXJzaW9uU3NtUGFyYW1ldGVyOiAnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiB0cnVlIH07IH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuZm9yRW52aXJvbm1lbnQgPSBtb2NrRm9yRW52aXJvbm1lbnQ7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgZ2V0VGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgVGVtcGxhdGVCb2R5OiBKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZGVzY3JpYmVTdGFja3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgU3RhY2tzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgICAgICAgICAgIFN0YWNrU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICAgICAgICAgICAgQ3JlYXRpb25UaW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICAgICAgICAgICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdsb29rdXAgcm9sZSBpcyB1c2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbGV0IHJlcXVlc3RlZFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZSA9IHJlcXVlc3QuTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgIFZhbHVlOiAnNicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QocmVxdWVzdGVkUGFyYW1ldGVyTmFtZSEpLnRvRXF1YWwoJy9ib290c3RyYXAvcGFyYW1ldGVyJyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uIGlzIG5vdCB2YWxpZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIGxldCByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcihyZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3RlZFBhcmFtZXRlck5hbWUgPSByZXF1ZXN0Lk5hbWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgUGFyYW1ldGVyOiB7XG4gICAgICAgICAgICBWYWx1ZTogJzEnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QocmVxdWVzdGVkUGFyYW1ldGVyTmFtZSEpLnRvRXF1YWwoJy9ib290c3RyYXAvcGFyYW1ldGVyJyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGJvb3RzdHJhcCB2ZXJzaW9uIHBhcmFtZXRlciBub3QgZm91bmQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBmb3VuZCcpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL0NvdWxkIG5vdCBhc3N1bWUgYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgzKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzFdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDpoZXJlOjEyMzQ1Njc4OTAxMicsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2ZhbGxiYWNrIHRvIGRlcGxveSByb2xlIGlmIGZvckVudmlyb25tZW50IHRocm93cycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIC8vIHRocm93IGVycm9yIGZpcnN0IGZvciB0aGUgJ3ByZXBhcmVTZGtXaXRoTG9va3VwUm9sZUZvcicgY2FsbCBhbmQgc3VjY2VlZCBmb3IgdGhlIHJlc3RcbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uT25jZSgoKSA9PiB7IHRocm93IG5ldyBFcnJvcignZXJyb3InKTsgfSlcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiB0cnVlIH07fSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG9udCBsb29rdXAgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIGlmIGRlZmF1bHQgY3JlZGVudGlhbHMgYXJlIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCkubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHsgcmV0dXJuIHsgc2RrOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkaywgZGlkQXNzdW1lUm9sZTogZmFsc2UgfTsgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKCkge1xuICAgICAgICByZXR1cm4geyB9O1xuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLnRvRXF1YWwoZXhwZWN0LmFycmF5Q29udGFpbmluZyhbXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uID49IDUvKSxcbiAgICBdKSk7XG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZG8gbm90IHByaW50IHdhcm5pbmdzIGlmIGxvb2t1cCByb2xlIG5vdCBwcm92aWRlZCBpbiBzdGFjayBhcnRpZmFjdCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS5ub3QudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZS8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbi8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMik7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46IHVuZGVmaW5lZCxcbiAgICAgIGFzc3VtZVJvbGVFeHRlcm5hbElkOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdkZXBsb3knLCAoKSA9PiB7XG4gIHRlc3QoJ2ZhaWxzIHdoZW4gbm8gdmFsaWQgc3RhY2sgbmFtZXMgYXJlIGdpdmVuJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4gdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUQnXSB9IH0pKS5yZWplY3RzLnRvVGhyb3coJ05vIHN0YWNrcyBtYXRjaCB0aGUgbmFtZShzKSBUZXN0LVN0YWNrLUQnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggaG90c3dhcCBkZXBsb3ltZW50JywgKCkgPT4ge1xuICAgIHRlc3QoXCJwYXNzZXMgdGhyb3VnaCB0aGUgJ2hvdHN3YXAnIG9wdGlvbiB0byBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrKClcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IG1vY2tDZm5EZXBsb3ltZW50cyA9IGluc3RhbmNlTW9ja0Zyb20oQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyk7XG4gICAgICBtb2NrQ2ZuRGVwbG95bWVudHMuZGVwbG95U3RhY2subW9ja1JldHVyblZhbHVlKFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIG5vT3A6IGZhbHNlLFxuICAgICAgICBvdXRwdXRzOiB7fSxcbiAgICAgICAgc3RhY2tBcm46ICdzdGFja0FybicsXG4gICAgICAgIHN0YWNrQXJ0aWZhY3Q6IGluc3RhbmNlTW9ja0Zyb20oY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSxcbiAgICAgIH0pKTtcbiAgICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBtb2NrQ2ZuRGVwbG95bWVudHMsXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSxcbiAgICAgICAgcmVxdWlyZUFwcHJvdmFsOiBSZXF1aXJlQXBwcm92YWwuTmV2ZXIsXG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjaykudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICBob3Rzd2FwOiB0cnVlLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWFrZXMgY29ycmVjdCBDbG91ZEZvcm1hdGlvbiBjYWxscycsICgpID0+IHtcbiAgICB0ZXN0KCd3aXRob3V0IG9wdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIGRvdWJsZSB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyoqJ10gfSB9KTtcbiAgICB9KTtcblxuXG4gICAgdGVzdCgnd2l0aCBvbmUgc3RhY2sgc3BlY2lmaWVkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHN0YWNrcyBhbGwgc3RhY2tzIHNwZWNpZmllZCBhcyB3aWxkY2FyZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJyonXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzbnMgbm90aWZpY2F0aW9uIGFybnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFtcbiAgICAgICAgJ2Fybjphd3M6c25zOnVzLWVhc3QtMjo0NDQ0NTU1NTY2NjY6TXlUb3BpYycsXG4gICAgICAgICdhcm46YXdzOnNuczpldS13ZXN0LTE6MTExMTU1NTU2NjY2Om15LWdyZWF0LXRvcGljJyxcbiAgICAgIF07XG4gICAgICBjb25zdCB0b29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgICBzZGtQcm92aWRlcjogY2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAgICAgJ1Rlc3QtU3RhY2stQSc6IHsgRm9vOiAnQmFyJyB9LFxuICAgICAgICAgICdUZXN0LVN0YWNrLUInOiB7IEJhejogJ1ppbmdhIScgfSxcbiAgICAgICAgfSwgbm90aWZpY2F0aW9uQXJucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koe1xuICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnLCAnVGVzdC1TdGFjay1CJ10gfSxcbiAgICAgICAgbm90aWZpY2F0aW9uQXJucyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZmFpbCB3aXRoIGluY29ycmVjdCBzbnMgbm90aWZpY2F0aW9uIGFybnMnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQXJucyA9IFsnYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMnXTtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgIH0sIG5vdGlmaWNhdGlvbkFybnMpLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IGV4cGVjdCgoKSA9PlxuICAgICAgICB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1BJ10gfSxcbiAgICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgICB9KSxcbiAgICAgICkucmVqZWN0cy50b1Rocm93KCdOb3RpZmljYXRpb24gYXJuIGFybjo6OmNmbi1teS1jb29sLXRvcGljIGlzIG5vdCBhIHZhbGlkIGFybiBmb3IgYW4gU05TIHRvcGljJyk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JsZXNzIGJvb3RzdHJhcCB1c2VzIGVudmlyb25tZW50IHdpdGhvdXQgcXVlc3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vNTY3ODkvc291dGgtcG9sZSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnNTY3ODknLFxuICAgICAgICByZWdpb246ICdzb3V0aC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzU2Nzg5L3NvdXRoLXBvbGUnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2dsb2JieSBib290c3RyYXAgdXNlcyB3aGF0cyBpbiB0aGUgc3RhY2tzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWydhcHAnXSwgJ3NvbWV0aGluZycpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmJvb3RzdHJhcChbJ2F3czovLyovYmVybXVkYS10cmlhbmdsZS0xJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICdiZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYm9vdHN0cmFwIGNhbiBiZSBpbnZva2VkIHdpdGhvdXQgdGhlIC0tYXBwIGFyZ3VtZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLmNsZWFyKCk7XG4gICAgICBjb25zdCBtb2NrU3ludGhlc2l6ZSA9IGplc3QuZm4oKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5zeW50aGVzaXplID0gbW9ja1N5bnRoZXNpemU7XG5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZSddLCBib290c3RyYXBwZXIsIHt9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBhY2NvdW50OiAnMTIzNDU2Nzg5MDEyJyxcbiAgICAgICAgcmVnaW9uOiAnd2VzdC1wb2xlJyxcbiAgICAgICAgbmFtZTogJ2F3czovLzEyMzQ1Njc4OTAxMi93ZXN0LXBvbGUnLFxuICAgICAgfSwgZXhwZWN0LmFueXRoaW5nKCksIGV4cGVjdC5hbnl0aGluZygpKTtcbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgICAgZXhwZWN0KGNsb3VkRXhlY3V0YWJsZS5oYXNBcHApLnRvRXF1YWwoZmFsc2UpO1xuICAgICAgZXhwZWN0KG1vY2tTeW50aGVzaXplKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnd2F0Y2gnLCAoKSA9PiB7XG4gIHRlc3QoXCJmYWlscyB3aGVuIG5vICd3YXRjaCcgc2V0dGluZ3MgYXJlIGZvdW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgZXhwZWN0KCgpID0+IHtcbiAgICAgIHJldHVybiB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG4gICAgfSkucmVqZWN0cy50b1Rocm93KFwiQ2Fubm90IHVzZSB0aGUgJ3dhdGNoJyBjb21tYW5kIHdpdGhvdXQgc3BlY2lmeWluZyBhdCBsZWFzdCBvbmUgZGlyZWN0b3J5IHRvIG1vbml0b3IuIFwiICtcbiAgICAgICdNYWtlIHN1cmUgdG8gYWRkIGEgXCJ3YXRjaFwiIGtleSB0byB5b3VyIGNkay5qc29uJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ29ic2VydmVzIG9ubHkgdGhlIHJvb3QgZGlyZWN0b3J5IGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBjb25zdCBpbmNsdWRlQXJncyA9IGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzO1xuICAgIGV4cGVjdChpbmNsdWRlQXJncy5sZW5ndGgpLnRvQmUoMSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhbGxvd3MgcHJvdmlkaW5nIGEgc2luZ2xlIHN0cmluZyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6ICdteS1kaXInLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoWydteS1kaXInXSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhbGxvd3MgcHJvdmlkaW5nIGFuIGFycmF5IG9mIHN0cmluZ3MgaW4gJ3dhdGNoLmluY2x1ZGUnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7XG4gICAgICBpbmNsdWRlOiBbJ215LWRpcjEnLCAnKiovbXktZGlyMi8qJ10sXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpcjEnLCAnKiovbXktZGlyMi8qJ10pO1xuICB9KTtcblxuICB0ZXN0KCdpZ25vcmVzIHRoZSBvdXRwdXQgZGlyLCBkb3QgZmlsZXMsIGRvdCBkaXJlY3RvcmllcywgYW5kIG5vZGVfbW9kdWxlcyBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWydvdXRwdXQnXSwgJ2Nkay5vdXQnKTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmV4Y2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFtcbiAgICAgICdjZGsub3V0LyoqJyxcbiAgICAgICcqKi8uKicsXG4gICAgICAnKiovLiovKionLFxuICAgICAgJyoqL25vZGVfbW9kdWxlcy8qKicsXG4gICAgXSk7XG4gIH0pO1xuXG4gIHRlc3QoXCJhbGxvd3MgcHJvdmlkaW5nIGEgc2luZ2xlIHN0cmluZyBpbiAnd2F0Y2guZXhjbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGV4Y2x1ZGU6ICdteS1kaXInLFxuICAgIH0pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBjb25zdCBleGNsdWRlQXJncyA9IGZha2VDaG9raWRhcldhdGNoLmV4Y2x1ZGVBcmdzO1xuICAgIGV4cGVjdChleGNsdWRlQXJncy5sZW5ndGgpLnRvQmUoNSk7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzWzBdKS50b0JlKCdteS1kaXInKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guZXhjbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGV4Y2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyJ10sXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg2KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcjEnKTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMV0pLnRvQmUoJyoqL215LWRpcjInKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3dpdGggZmlsZSBjaGFuZ2UgZXZlbnRzJywgKCkgPT4ge1xuICAgIGxldCB0b29sa2l0OiBDZGtUb29sa2l0O1xuICAgIGxldCBjZGtEZXBsb3lNb2NrOiBqZXN0Lk1vY2s7XG5cbiAgICBiZWZvcmVFYWNoKGFzeW5jICgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHt9KTtcbiAgICAgIHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgICBjZGtEZXBsb3lNb2NrID0gamVzdC5mbigpO1xuICAgICAgdG9vbGtpdC5kZXBsb3kgPSBjZGtEZXBsb3lNb2NrO1xuICAgICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdChcImRvZXMgbm90IHRyaWdnZXIgYSAnZGVwbG95JyBiZWZvcmUgdGhlICdyZWFkeScgZXZlbnQgaGFzIGZpcmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnYWRkJywgJ215LWZpbGUnKTtcblxuICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZShcIndoZW4gdGhlICdyZWFkeScgZXZlbnQgaGFzIGFscmVhZHkgZmlyZWRcIiwgKCkgPT4ge1xuICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIC8vIFRoZSByZWFkeSBjYWxsYmFjayB0cmlnZ2VycyBhIGRlcGxveW1lbnQgc28gZWFjaCB0ZXN0XG4gICAgICAgIC8vIHRoYXQgdXNlcyB0aGlzIGZ1bmN0aW9uIHdpbGwgc2VlICdjZGtEZXBsb3lNb2NrJyBjYWxsZWRcbiAgICAgICAgLy8gYW4gYWRkaXRpb25hbCB0aW1lLlxuICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24ucmVhZHlDYWxsYmFjaygpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJhbiBpbml0aWFsICdkZXBsb3knIGlzIHRyaWdnZXJlZCwgd2l0aG91dCBhbnkgZmlsZSBjaGFuZ2VzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiZG9lcyB0cmlnZ2VyIGEgJ2RlcGxveScgZm9yIGEgZmlsZSBjaGFuZ2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlJyk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwidHJpZ2dlcnMgYSAnZGVwbG95JyB0d2ljZSBmb3IgdHdvIGZpbGUgY2hhbmdlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlMScpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgJ215LWZpbGUyJyksXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMyk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImJhdGNoZXMgZmlsZSBjaGFuZ2VzIHRoYXQgaGFwcGVuIGR1cmluZyAnZGVwbG95J1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlMScpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygnY2hhbmdlJywgJ215LWZpbGUyJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCd1bmxpbmsnLCAnbXktZmlsZTMnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlNCcpLFxuICAgICAgICBdKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdzeW50aCcsICgpID0+IHtcbiAgdGVzdCgnc3VjY2Vzc2Z1bCBzeW50aCBvdXRwdXRzIGhpZXJhcmNoaWNhbCBzdGFjayBpZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgZmFsc2UpO1xuXG4gICAgLy8gU2VwYXJhdGUgdGVzdHMgYXMgY29sb3JpemluZyBoYW1wZXJzIGRldGVjdGlvblxuICAgIGV4cGVjdChzdGRlcnJNb2NrLm1vY2suY2FsbHNbMV1bMF0pLnRvTWF0Y2goJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnKTtcbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUInKTtcbiAgfSk7XG5cbiAgdGVzdCgnd2l0aCBubyBzdGRvdXQgb3B0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10sIGZhbHNlLCB0cnVlKTtcbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYuU1RBQ0tTX1RPX1ZBTElEQVRFID0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhY2sgd2l0aCBlcnJvciBhbmQgZmxhZ2dlZCBmb3IgdmFsaWRhdGlvbicsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgICBdLFxuICAgICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICAgIHN0YWNrczogW1xuICAgICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogdHJ1ZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBmYWlsIGlmIGF1dG9WYWxpZGF0ZT10cnVlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gdHJ1ZTtcbiAgICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2F1c2VzIHN5bnRoIHRvIHN1Y2NlZWQgaWYgYXV0b1ZhbGlkYXRlPWZhbHNlJywgYXN5bmMoKSA9PiB7XG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY29uc3QgYXV0b1ZhbGlkYXRlID0gZmFsc2U7XG4gICAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSwgYXV0b1ZhbGlkYXRlKTtcbiAgICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgwKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnc3RhY2sgaGFzIGVycm9yIGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZSA9IG5ldyBNb2NrQ2xvdWRFeGVjdXRhYmxlKHtcbiAgICAgIHN0YWNrczogW1xuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19BLFxuICAgICAgICBNb2NrU3RhY2suTU9DS19TVEFDS19CLFxuICAgICAgXSxcbiAgICAgIG5lc3RlZEFzc2VtYmxpZXM6IFt7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IGZhbHNlIH0sIC4uLk1vY2tTdGFjay5NT0NLX1NUQUNLX1dJVEhfRVJST1IgfSxcbiAgICAgICAgXSxcbiAgICAgIH1dLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IGV4cGVjdCh0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BL3dpdGhlcnJvcnMnXSwgZmFsc2UsIHRydWUpKS5yZWplY3RzLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciwgaXMgbm90IGZsYWdnZWQgZm9yIHZhbGlkYXRpb24gYW5kIHdhcyBub3QgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFtdLCBmYWxzZSwgdHJ1ZSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBkZXBlbmRlbmN5IGFuZCB3YXMgZXhwbGljaXRseSBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQyxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRCxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfRC5zdGFja05hbWVdLCB0cnVlLCBmYWxzZSk7XG5cbiAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHNbMF1bMF0pLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmNsYXNzIE1vY2tTdGFjayB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19BOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUEnIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUEnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdGb28nLCB2YWx1ZTogJ0JhcicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIGRpc3BsYXlOYW1lOiAnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZScsXG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19COiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUInLFxuICAgIHRlbXBsYXRlOiB7IFJlc291cmNlczogeyBUZW1wbGF0ZU5hbWU6ICdUZXN0LVN0YWNrLUInIH0gfSxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICBtZXRhZGF0YToge1xuICAgICAgJy9UZXN0LVN0YWNrLUInOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLlNUQUNLX1RBR1MsXG4gICAgICAgICAgZGF0YTogW1xuICAgICAgICAgICAgeyBrZXk6ICdCYXonLCB2YWx1ZTogJ1ppbmdhIScgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQzogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1DJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1DJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS9UZXN0LVN0YWNrLUMnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfRDogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1EJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1EJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1EJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkZXBlbmRzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQy5zdGFja05hbWVdLFxuICB9XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTU9DS19TVEFDS19XSVRIX0VSUk9SOiBUZXN0U3RhY2tBcnRpZmFjdCA9IHtcbiAgICBzdGFja05hbWU6ICd3aXRoZXJyb3JzJyxcbiAgICBlbnY6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICB0ZW1wbGF0ZTogeyByZXNvdXJjZTogJ2Vycm9ycmVzb3VyY2UnIH0sXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvcmVzb3VyY2UnOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBjeHNjaGVtYS5BcnRpZmFjdE1ldGFkYXRhRW50cnlUeXBlLkVSUk9SLFxuICAgICAgICAgIGRhdGE6ICd0aGlzIGlzIGFuIGVycm9yJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJyxcbiAgfVxufVxuXG5jbGFzcyBGYWtlQ2xvdWRGb3JtYXRpb24gZXh0ZW5kcyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBlY3RlZFRhZ3M6IHsgW3N0YWNrTmFtZTogc3RyaW5nXTogVGFnW10gfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucz86IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGV4cGVjdGVkVGFnczogeyBbc3RhY2tOYW1lOiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fSxcbiAgICBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgc3VwZXIoeyBzZGtQcm92aWRlcjogdW5kZWZpbmVkIGFzIGFueSB9KTtcblxuICAgIGZvciAoY29uc3QgW3N0YWNrTmFtZSwgdGFnc10gb2YgT2JqZWN0LmVudHJpZXMoZXhwZWN0ZWRUYWdzKSkge1xuICAgICAgdGhpcy5leHBlY3RlZFRhZ3Nbc3RhY2tOYW1lXSA9XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRhZ3MpLm1hcCgoW0tleSwgVmFsdWVdKSA9PiAoeyBLZXksIFZhbHVlIH0pKVxuICAgICAgICAgIC5zb3J0KChsLCByKSA9PiBsLktleS5sb2NhbGVDb21wYXJlKHIuS2V5KSk7XG4gICAgfVxuICAgIGlmIChleHBlY3RlZE5vdGlmaWNhdGlvbkFybnMpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zID0gZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBkZXBsb3lTdGFjayhvcHRpb25zOiBEZXBsb3lTdGFja09wdGlvbnMpOiBQcm9taXNlPERlcGxveVN0YWNrUmVzdWx0PiB7XG4gICAgZXhwZWN0KFtNb2NrU3RhY2suTU9DS19TVEFDS19BLnN0YWNrTmFtZSwgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWUsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lXSlcbiAgICAgIC50b0NvbnRhaW4ob3B0aW9ucy5zdGFjay5zdGFja05hbWUpO1xuICAgIGV4cGVjdChvcHRpb25zLnRhZ3MpLnRvRXF1YWwodGhpcy5leHBlY3RlZFRhZ3Nbb3B0aW9ucy5zdGFjay5zdGFja05hbWVdKTtcbiAgICBleHBlY3Qob3B0aW9ucy5ub3RpZmljYXRpb25Bcm5zKS50b0VxdWFsKHRoaXMuZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHN0YWNrQXJuOiBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjo6OnN0YWNrLyR7b3B0aW9ucy5zdGFjay5zdGFja05hbWV9L01vY2tlZE91dGAsXG4gICAgICBub09wOiBmYWxzZSxcbiAgICAgIG91dHB1dHM6IHsgU3RhY2tOYW1lOiBvcHRpb25zLnN0YWNrLnN0YWNrTmFtZSB9LFxuICAgICAgc3RhY2tBcnRpZmFjdDogb3B0aW9ucy5zdGFjayxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkQ3VycmVudFRlbXBsYXRlKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpOiBQcm9taXNlPFRlbXBsYXRlPiB7XG4gICAgc3dpdGNoIChzdGFjay5zdGFja05hbWUpIHtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQS5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19CLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChgTm90IGFuIGV4cGVjdGVkIG1vY2sgc3RhY2s6ICR7c3RhY2suc3RhY2tOYW1lfWApO1xuICAgIH1cbiAgfVxufVxuIl19
821
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLXRvb2xraXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNkay10b29sa2l0LnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw0REFBNEQ7QUFDNUQsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDeEMsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixFQUFFLEVBQUUscUJBQXFCO0NBQzFCLENBQUM7QUFDRixNQUFNLHFCQUFxQixHQUFHO0lBQzVCLElBQUksYUFBYTtRQUNmLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFFLGdHQUFnRztRQUNoRyxpRUFBaUU7UUFDakUsaUVBQWlFO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEQsMkRBQTJEO1FBQzNELHlCQUF5QjtRQUN6QixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNDQUFzQztRQUN0QyxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsTUFBTSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2RCwrREFBK0Q7UUFDL0QseUJBQXlCO1FBQ3pCLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLHNDQUFzQztRQUN0QyxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0YsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDM0IsS0FBSyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDLENBQUMsQ0FBQztBQUNKLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsSUFBSSxXQUFXO1FBQ2IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELGlFQUFpRTtRQUNqRSxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwRCwrRUFBK0U7UUFDL0UsTUFBTSxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8saUJBQWlCLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7Q0FDRixDQUFDO0FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNqQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7SUFDdkMsSUFBSSxFQUFFLFFBQVE7Q0FDZixDQUFDLENBQUMsQ0FBQztBQUVKLDJEQUEyRDtBQUMzRCx5Q0FBeUM7QUFDekMsb0RBQW9EO0FBQ3BELHNGQUFzRztBQUd0RyxvREFBcUQ7QUFDckQsc0NBQThDO0FBQzlDLHNDQUFzQztBQUN0QyxpQ0FBa0Y7QUFFbEYsSUFBSSxlQUFvQyxDQUFDO0FBQ3pDLElBQUksWUFBdUMsQ0FBQztBQUM1QyxJQUFJLFVBQTRCLENBQUM7QUFDakMsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUVyQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN2RCw0Q0FBNEM7SUFDNUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFM0QsWUFBWSxHQUFHLHVCQUFnQixDQUFDLHdCQUFZLENBQUMsQ0FBQztJQUM5QyxZQUFZLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQVMsQ0FBQyxDQUFDO0lBRXpGLGVBQWUsR0FBRyxJQUFJLDBCQUFtQixDQUFDO1FBQ3hDLE1BQU0sRUFBRTtZQUNOLFNBQVMsQ0FBQyxZQUFZO1lBQ3RCLFNBQVMsQ0FBQyxZQUFZO1NBQ3ZCO1FBQ0QsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQzthQUNqQyxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBRUgsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlGLENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxtQkFBbUI7SUFDMUIsT0FBTyxJQUFJLHdCQUFVLENBQUM7UUFDcEIsZUFBZTtRQUNmLGFBQWEsRUFBRSxlQUFlLENBQUMsYUFBYTtRQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7UUFDeEMsY0FBYyxFQUFFLElBQUksa0JBQWtCLENBQUM7WUFDckMsY0FBYyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO1lBQ2pDLGNBQWMsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUU7U0FDbEMsQ0FBQztLQUNILENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxRQUFRLENBQUMscUJBQXFCLEVBQUUsR0FBRyxFQUFFO0lBQ25DLElBQUksUUFBYSxDQUFDO0lBQ2xCLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25DLElBQUksbUJBQXdDLENBQUM7SUFDN0MsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUVkLFFBQVEsR0FBRztZQUNULFNBQVMsRUFBRTtnQkFDVCxJQUFJLEVBQUU7b0JBQ0osSUFBSSxFQUFFLHVCQUF1QjtvQkFDN0IsVUFBVSxFQUFFO3dCQUNWLEdBQUcsRUFBRSxPQUFPO3FCQUNiO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsbUJBQW1CLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQztZQUM1QyxNQUFNLEVBQUU7Z0JBQ047b0JBQ0UsU0FBUyxFQUFFLGNBQWM7b0JBQ3pCLFFBQVE7b0JBQ1IsVUFBVSxFQUFFO3dCQUNWLGFBQWEsRUFBRSx3Q0FBd0M7d0JBQ3ZELFVBQVUsRUFBRTs0QkFDVixHQUFHLEVBQUUsK0NBQStDOzRCQUNwRCw2QkFBNkIsRUFBRSxDQUFDOzRCQUNoQyxpQ0FBaUMsRUFBRSxzQkFBc0I7eUJBQzFEO3FCQUNGO2lCQUNGO2dCQUNEO29CQUNFLFNBQVMsRUFBRSxjQUFjO29CQUN6QixRQUFRO29CQUNSLFVBQVUsRUFBRTt3QkFDVixhQUFhLEVBQUUsd0NBQXdDO3FCQUN4RDtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2SSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLGtCQUFrQixDQUFDO1FBQ3BFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxXQUFXO2dCQUNULE9BQU87b0JBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO2lCQUN2QyxDQUFDO1lBQ0osQ0FBQztZQUNELGNBQWM7Z0JBQ1osT0FBTztvQkFDTCxNQUFNLEVBQUU7d0JBQ047NEJBQ0UsU0FBUyxFQUFFLGNBQWM7NEJBQ3pCLFdBQVcsRUFBRSxpQkFBaUI7NEJBQzlCLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRTt5QkFDekI7d0JBQ0Q7NEJBQ0UsU0FBUyxFQUFFLGNBQWM7NEJBQ3pCLFdBQVcsRUFBRSxpQkFBaUI7NEJBQzlCLFlBQVksRUFBRSxJQUFJLElBQUksRUFBRTt5QkFDekI7cUJBQ0Y7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyQyxRQUFRO1FBQ1IsSUFBSSxzQkFBOEIsQ0FBQztRQUNuQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVksQ0FBQyxPQUFPO2dCQUNsQixzQkFBc0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUN0QyxPQUFPO29CQUNMLFNBQVMsRUFBRTt3QkFDVCxLQUFLLEVBQUUsR0FBRztxQkFDWDtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1lBQ3BDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2hELFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1lBQzVDLGNBQWMsRUFBRSxJQUFJLHNEQUF5QixDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hHLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sQ0FBQyxzQkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUsZ0NBQWdDO1NBQ2hELENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLGlFQUFpRSxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ2pGLFFBQVE7UUFDUixJQUFJLHNCQUE4QixDQUFDO1FBQ25DLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWSxDQUFDLE9BQU87Z0JBQ2xCLHNCQUFzQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLE9BQU87b0JBQ0wsU0FBUyxFQUFFO3dCQUNULEtBQUssRUFBRSxHQUFHO3FCQUNYO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxtQkFBbUI7WUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7WUFDaEQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7WUFDNUMsY0FBYyxFQUFFLElBQUksc0RBQXlCLENBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEcsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLGNBQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDcEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpREFBaUQsQ0FBQztZQUN4RSxNQUFNLENBQUMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxDQUFDLHNCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDaEUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSxnQ0FBZ0M7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLHlCQUF5QjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxrRUFBa0UsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNsRixRQUFRO1FBQ1IsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0IsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1lBQ3BDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2hELFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1lBQzVDLGNBQWMsRUFBRSxJQUFJLHNEQUF5QixDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hHLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sQ0FBQyxjQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxjQUFjLENBQUMsaURBQWlELENBQUM7WUFDeEUsTUFBTSxDQUFDLGNBQWMsQ0FBQywwQ0FBMEMsQ0FBQztTQUNsRSxDQUFDLENBQUMsQ0FBQztRQUNKLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNsRCxhQUFhLEVBQUUsZ0NBQWdDO1NBQ2hELENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSx5QkFBeUI7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEUsUUFBUTtRQUNSLHdGQUF3RjtRQUN4RixrQkFBa0IsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsc0JBQXNCLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN2RixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFDLENBQUM7UUFDMUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQztRQUNwRSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ3RDLFlBQVk7Z0JBQ1YsT0FBTyxFQUFHLENBQUM7WUFDYixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxtQkFBbUI7WUFDcEMsYUFBYSxFQUFFLG1CQUFtQixDQUFDLGFBQWE7WUFDaEQsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVc7WUFDNUMsY0FBYyxFQUFFLElBQUksc0RBQXlCLENBQUMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEcsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUN0QixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtTQUN6QyxDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkUsTUFBTSxDQUFDLGNBQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7WUFDcEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpREFBaUQsQ0FBQztZQUN4RSxNQUFNLENBQUMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSxnQ0FBZ0M7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLHlCQUF5QjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5RUFBeUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RixRQUFRO1FBQ1Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLEVBQUUsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4SSxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLGtCQUFrQixDQUFDO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1lBQ3BDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2hELFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1lBQzVDLGNBQWMsRUFBRSxJQUFJLHNEQUF5QixDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hHLENBQUMsQ0FBQztRQUNILG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWTtnQkFDVixPQUFPLEVBQUcsQ0FBQztZQUNiLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPO1FBQ1AsTUFBTSxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3RCLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1NBQ3pDLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLENBQUMsY0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUNwRSxNQUFNLENBQUMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDO1NBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0osTUFBTSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDdkUsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xELGFBQWEsRUFBRSxnQ0FBZ0M7U0FDaEQsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLHlCQUF5QjtTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyxxRUFBcUUsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNyRixRQUFRO1FBQ1IsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztZQUN0QyxZQUFZO2dCQUNWLE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztTQUNGLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUNoQyxlQUFlLEVBQUUsbUJBQW1CO1lBQ3BDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2hELFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxXQUFXO1lBQzVDLGNBQWMsRUFBRSxJQUFJLHNEQUF5QixDQUFDLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2hHLENBQUMsQ0FBQztRQUVILE9BQU87UUFDUCxNQUFNLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUU7U0FDekMsQ0FBQyxDQUFDO1FBRUgsT0FBTztRQUNQLE1BQU0sQ0FBQyxjQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztZQUN4RSxNQUFNLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxjQUFjLENBQUMscUNBQXFDLENBQUM7U0FDN0QsQ0FBQyxDQUFDLENBQUM7UUFDSixNQUFNLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN2RSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbEQsYUFBYSxFQUFFLFNBQVM7WUFDeEIsb0JBQW9CLEVBQUUsU0FBUztTQUNoQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7SUFDdEIsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzNELFFBQVE7UUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE9BQU87UUFDUCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDL0ksQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxnRkFBZ0YsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRyxRQUFRO1lBQ1IsTUFBTSxrQkFBa0IsR0FBRyx1QkFBZ0IsQ0FBQyxzREFBeUIsQ0FBQyxDQUFDO1lBQ3ZFLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDN0QsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLGFBQWEsRUFBRSx1QkFBZ0IsQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQUM7YUFDbkUsQ0FBQyxDQUFDLENBQUM7WUFDSixNQUFNLFVBQVUsR0FBRyxJQUFJLHdCQUFVLENBQUM7Z0JBQ2hDLGVBQWU7Z0JBQ2YsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUFhO2dCQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkMsQ0FBQyxDQUFDO1lBRUgsT0FBTztZQUNQLE1BQU0sVUFBVSxDQUFDLE1BQU0sQ0FBQztnQkFDdEIsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsMkJBQTJCLENBQUMsRUFBRTtnQkFDckQsZUFBZSxFQUFFLHNCQUFlLENBQUMsS0FBSztnQkFDdEMsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7WUFFSCxPQUFPO1lBQ1AsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbEYsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0NBQW9DLEVBQUUsR0FBRyxFQUFFO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNqQyxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JFLFFBQVE7WUFDUixNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBRXRDLE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUdILElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMxQyxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsMkJBQTJCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyw4Q0FBOEMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5RCxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDNUMsUUFBUTtZQUNSLE1BQU0sZ0JBQWdCLEdBQUc7Z0JBQ3ZCLDRDQUE0QztnQkFDNUMsbURBQW1EO2FBQ3BELENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFVLENBQUM7Z0JBQzdCLGVBQWU7Z0JBQ2YsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUFhO2dCQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLGNBQWMsRUFBRSxJQUFJLGtCQUFrQixDQUFDO29CQUNyQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO29CQUM5QixjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFO2lCQUNsQyxFQUFFLGdCQUFnQixDQUFDO2FBQ3JCLENBQUMsQ0FBQztZQUVILE9BQU87WUFDUCxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ25CLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsRUFBRTtnQkFDeEQsZ0JBQWdCO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNELFFBQVE7WUFDUixNQUFNLGdCQUFnQixHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztZQUNyRCxNQUFNLE9BQU8sR0FBRyxJQUFJLHdCQUFVLENBQUM7Z0JBQzdCLGVBQWU7Z0JBQ2YsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUFhO2dCQUM1QyxXQUFXLEVBQUUsZUFBZSxDQUFDLFdBQVc7Z0JBQ3hDLGNBQWMsRUFBRSxJQUFJLGtCQUFrQixDQUFDO29CQUNyQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO2lCQUMvQixFQUFFLGdCQUFnQixDQUFDO2FBQ3JCLENBQUMsQ0FBQztZQUVILE9BQU87WUFDUCxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDYixRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDeEMsZ0JBQWdCO2FBQ2pCLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsOEVBQThFLENBQUMsQ0FBQztRQUVwRyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxzREFBc0QsRUFBRSxLQUFLLElBQUksRUFBRTtZQUN4RSxRQUFRO1lBQ04sTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsd0JBQXdCLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFdEUsT0FBTztZQUNQLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDN0QsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLE1BQU0sRUFBRSxZQUFZO2dCQUNwQixJQUFJLEVBQUUsd0JBQXdCO2FBQy9CLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMzRCxRQUFRO1lBQ1IsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QyxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUVqRSxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsNEJBQTRCLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFMUUsT0FBTztZQUNQLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDN0QsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLE1BQU0sRUFBRSxvQkFBb0I7Z0JBQzVCLElBQUksRUFBRSx1Q0FBdUM7YUFDOUMsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDekMsTUFBTSxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JFLFFBQVE7WUFDUixlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakMsZUFBZSxDQUFDLFVBQVUsR0FBRyxjQUFjLENBQUM7WUFFNUMsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUV0QyxPQUFPO1lBQ1AsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsOEJBQThCLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFNUUsT0FBTztZQUNQLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztnQkFDN0QsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixJQUFJLEVBQUUsOEJBQThCO2FBQ3JDLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVuRSxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7SUFDckIsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1RkFBdUY7WUFDeEcsaURBQWlELENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM3RCxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFcEQsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JFLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxRQUFRO1NBQ2xCLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RSxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDO1NBQ3JDLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsaUZBQWlGLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUQsZUFBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDbEQsWUFBWTtZQUNaLE9BQU87WUFDUCxVQUFVO1lBQ1Ysb0JBQW9CO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3JFLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELE9BQU8sRUFBRSxRQUFRO1NBQ2xCLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyx5REFBeUQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUN6RSxlQUFlLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDO1NBQ25DLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7UUFDbEQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3pELGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFDdEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2hDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsYUFBYSxDQUFDO1FBRS9CLE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLElBQUksT0FBbUIsQ0FBQztRQUN4QixJQUFJLGFBQXdCLENBQUM7UUFFN0IsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3BCLGVBQWUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzFELE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQ2hDLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDMUIsT0FBTyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFDL0IsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnRUFBZ0UsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNoRixNQUFNLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztZQUVoRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxRQUFRLENBQUMsMENBQTBDLEVBQUUsR0FBRyxFQUFFO1lBQ3hELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2Qsd0RBQXdEO2dCQUN4RCwwREFBMEQ7Z0JBQzFELHNCQUFzQjtnQkFDdEIscUJBQXFCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsNERBQTRELEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQzVFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDM0QsTUFBTSxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxnREFBZ0QsRUFBRSxLQUFLLElBQUksRUFBRTtnQkFDaEUsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNoQixxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO29CQUMxRCxxQkFBcUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDO2lCQUM5RCxDQUFDLENBQUM7Z0JBRUgsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGtEQUFrRCxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNsRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7b0JBQzFELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7b0JBQzdELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUM7b0JBQzdELHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxVQUFVLENBQUM7aUJBQzNELENBQUMsQ0FBQztnQkFFSCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtJQUNyQixJQUFJLENBQUMsaURBQWlELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDakUsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUN0QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0QyxpREFBaUQ7UUFDakQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDekUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3ZDLE9BQU87UUFDUCxNQUFNLE9BQU8sR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1FBRXRDLE9BQU87UUFDUCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUMzRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsZUFBZSxHQUFHLElBQUksMEJBQW1CLENBQUM7Z0JBQ3hDLE1BQU0sRUFBRTtvQkFDTixTQUFTLENBQUMsWUFBWTtvQkFDdEIsU0FBUyxDQUFDLFlBQVk7aUJBQ3ZCO2dCQUNELGdCQUFnQixFQUFFLENBQUM7d0JBQ2pCLE1BQU0sRUFBRTs0QkFDTixFQUFFLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTt5QkFDOUU7cUJBQ0YsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJDQUEyQyxFQUFFLEtBQUssSUFBRyxFQUFFO1lBQzFELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzFCLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkYsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsK0NBQStDLEVBQUUsS0FBSyxJQUFHLEVBQUU7WUFDOUQsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDM0IsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ25ELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUcsRUFBRTtRQUM1RCxlQUFlLEdBQUcsSUFBSSwwQkFBbUIsQ0FBQztZQUN4QyxNQUFNLEVBQUU7Z0JBQ04sU0FBUyxDQUFDLFlBQVk7Z0JBQ3RCLFNBQVMsQ0FBQyxZQUFZO2FBQ3ZCO1lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxFQUFFO3dCQUNOLEVBQUUsVUFBVSxFQUFFLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLHFCQUFxQixFQUFFO3FCQUMvRTtpQkFDRixDQUFDO1NBQ0gsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztRQUV0QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMseUJBQXlCLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUYsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsZ0ZBQWdGLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDaEcsZUFBZSxHQUFHLElBQUksMEJBQW1CLENBQUM7WUFDeEMsTUFBTSxFQUFFO2dCQUNOLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QixTQUFTLENBQUMsWUFBWTthQUN2QjtZQUNELGdCQUFnQixFQUFFLENBQUM7b0JBQ2pCLE1BQU0sRUFBRTt3QkFDTixFQUFFLFVBQVUsRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRTtxQkFDL0U7aUJBQ0YsQ0FBQztTQUNILENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsa0RBQWtELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbEUsZUFBZSxHQUFHLElBQUksMEJBQW1CLENBQUM7WUFDeEMsTUFBTSxFQUFFO2dCQUNOLFNBQVMsQ0FBQyxZQUFZO2dCQUN0QixTQUFTLENBQUMsWUFBWTthQUN2QjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixFQUFFLENBQUM7UUFFdEMsTUFBTSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFckUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxTQUFTOztBQUNVLHNCQUFZLEdBQXNCO0lBQ3ZELFNBQVMsRUFBRSxjQUFjO0lBQ3pCLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUN6RCxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFFBQVEsRUFBRTtRQUNSLGVBQWUsRUFBRTtZQUNmO2dCQUNFLElBQUksRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsVUFBVTtnQkFDbkQsSUFBSSxFQUFFO29CQUNKLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2lCQUM3QjthQUNGO1NBQ0Y7S0FDRjtJQUNELFdBQVcsRUFBRSwyQkFBMkI7Q0FDekMsQ0FBQztBQUNxQixzQkFBWSxHQUFzQjtJQUN2RCxTQUFTLEVBQUUsY0FBYztJQUN6QixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDekQsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxRQUFRLEVBQUU7UUFDUixlQUFlLEVBQUU7WUFDZjtnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFVBQVU7Z0JBQ25ELElBQUksRUFBRTtvQkFDSixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtpQkFDaEM7YUFDRjtTQUNGO0tBQ0Y7Q0FDRixDQUFDO0FBQ3FCLHNCQUFZLEdBQXNCO0lBQ3ZELFNBQVMsRUFBRSxjQUFjO0lBQ3pCLFFBQVEsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUN6RCxHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFFBQVEsRUFBRTtRQUNSLGVBQWUsRUFBRTtZQUNmO2dCQUNFLElBQUksRUFBRSxRQUFRLENBQUMseUJBQXlCLENBQUMsVUFBVTtnQkFDbkQsSUFBSSxFQUFFO29CQUNKLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2lCQUNoQzthQUNGO1NBQ0Y7S0FDRjtJQUNELFdBQVcsRUFBRSwyQkFBMkI7Q0FDekMsQ0FBQztBQUNxQixzQkFBWSxHQUFzQjtJQUN2RCxTQUFTLEVBQUUsY0FBYztJQUN6QixRQUFRLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLEVBQUU7SUFDekQsR0FBRyxFQUFFLHVDQUF1QztJQUM1QyxRQUFRLEVBQUU7UUFDUixlQUFlLEVBQUU7WUFDZjtnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFVBQVU7Z0JBQ25ELElBQUksRUFBRTtvQkFDSixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtpQkFDaEM7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztDQUM1QyxDQUFBO0FBQ3NCLCtCQUFxQixHQUFzQjtJQUNoRSxTQUFTLEVBQUUsWUFBWTtJQUN2QixHQUFHLEVBQUUsdUNBQXVDO0lBQzVDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7SUFDdkMsUUFBUSxFQUFFO1FBQ1IsV0FBVyxFQUFFO1lBQ1g7Z0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLO2dCQUM5QyxJQUFJLEVBQUUsa0JBQWtCO2FBQ3pCO1NBQ0Y7S0FDRjtJQUNELFdBQVcsRUFBRSx5QkFBeUI7Q0FDdkMsQ0FBQTtBQUdILE1BQU0sa0JBQW1CLFNBQVEsc0RBQXlCO0lBSXhELFlBQ0UsZUFBbUUsRUFBRSxFQUNyRSx3QkFBbUM7UUFFbkMsS0FBSyxDQUFDLEVBQUUsV0FBVyxFQUFFLFNBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBUDFCLGlCQUFZLEdBQW1DLEVBQUUsQ0FBQztRQVNqRSxLQUFLLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3FCQUN6RCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNqRDtRQUNELElBQUksd0JBQXdCLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLHdCQUF3QixDQUFDO1NBQzFEO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxPQUEyQjtRQUM1QyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzNHLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDeEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLFFBQVEsRUFBRSxrQ0FBa0MsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLFlBQVk7WUFDL0UsSUFBSSxFQUFFLEtBQUs7WUFDWCxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDL0MsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxLQUF3QztRQUNqRSxRQUFRLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDdkIsS0FBSyxTQUFTLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixLQUFLLFNBQVMsQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0I7Z0JBQ0UsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLCtCQUErQixLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMzRTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFdlIG5lZWQgdG8gbW9jayB0aGUgY2hva2lkYXIgbGlicmFyeSwgdXNlZCBieSAnY2RrIHdhdGNoJ1xuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2hlck9uID0gamVzdC5mbigpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2hlciA9IHtcbiAgb246IG1vY2tDaG9raWRhcldhdGNoZXJPbixcbn07XG5jb25zdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24gPSB7XG4gIGdldCByZWFkeUNhbGxiYWNrKCk6ICgpID0+IHZvaWQge1xuICAgIGV4cGVjdChtb2NrQ2hva2lkYXJXYXRjaGVyT24ubW9jay5jYWxscy5sZW5ndGgpLnRvQmVHcmVhdGVyVGhhbk9yRXF1YWwoMSk7XG4gICAgLy8gVGhlIGNhbGwgdG8gdGhlIGZpcnN0ICd3YXRjaGVyLm9uKCknIGluIHRoZSBwcm9kdWN0aW9uIGNvZGUgaXMgdGhlIG9uZSB3ZSBhY3R1YWxseSB3YW50IGhlcmUuXG4gICAgLy8gVGhpcyBpcyBhIHByZXR0eSBmcmFnaWxlLCBidXQgYXQgbGVhc3Qgd2l0aCB0aGlzIGhlbHBlciBjbGFzcyxcbiAgICAvLyB3ZSB3b3VsZCBoYXZlIHRvIGNoYW5nZSBpdCBvbmx5IGluIG9uZSBwbGFjZSBpZiBpdCBldmVyIGJyZWFrc1xuICAgIGNvbnN0IGZpcnN0Q2FsbCA9IG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzWzBdO1xuICAgIC8vIGxldCdzIG1ha2Ugc3VyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChmaXJzdENhbGxbMF0pLnRvQmUoJ3JlYWR5Jyk7XG4gICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbGJhY2tcbiAgICByZXR1cm4gZmlyc3RDYWxsWzFdO1xuICB9LFxuXG4gIGdldCBmaWxlRXZlbnRDYWxsYmFjaygpOiAoZXZlbnQ6ICdhZGQnIHwgJ2FkZERpcicgfCAnY2hhbmdlJyB8ICd1bmxpbmsnIHwgJ3VubGlua0RpcicsIHBhdGg6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPiB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoZXJPbi5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuT3JFcXVhbCgyKTtcbiAgICBjb25zdCBzZWNvbmRDYWxsID0gbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2suY2FsbHNbMV07XG4gICAgLy8gbGV0J3MgbWFrZSBzdXJlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgdGhlICdyZWFkeScgZXZlbnQsXG4gICAgLy8ganVzdCB0byBiZSBkb3VibGUgc2FmZVxuICAgIGV4cGVjdChzZWNvbmRDYWxsWzBdKS5ub3QudG9CZSgncmVhZHknKTtcbiAgICAvLyB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSBjYWxsYmFja1xuICAgIHJldHVybiBzZWNvbmRDYWxsWzFdO1xuICB9LFxufTtcblxuY29uc3QgbW9ja0Nob2tpZGFyV2F0Y2ggPSBqZXN0LmZuKCk7XG5qZXN0Lm1vY2soJ2Nob2tpZGFyJywgKCkgPT4gKHtcbiAgd2F0Y2g6IG1vY2tDaG9raWRhcldhdGNoLFxufSkpO1xuY29uc3QgZmFrZUNob2tpZGFyV2F0Y2ggPSB7XG4gIGdldCBpbmNsdWRlQXJncygpOiBzdHJpbmdbXSB7XG4gICAgZXhwZWN0KG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKDEpO1xuICAgIC8vIHRoZSBpbmNsdWRlIGFyZ3MgYXJlIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlICd3YXRjaCgpJyBjYWxsXG4gICAgcmV0dXJuIG1vY2tDaG9raWRhcldhdGNoLm1vY2suY2FsbHNbMF1bMF07XG4gIH0sXG5cbiAgZ2V0IGV4Y2x1ZGVBcmdzKCk6IHN0cmluZ1tdIHtcbiAgICBleHBlY3QobW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxscy5sZW5ndGgpLnRvQmUoMSk7XG4gICAgLy8gdGhlIGlnbm9yZSBhcmdzIGFyZSBhIHByb3BlcnR5IG9mIHRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvIHRoZSAnd2F0Y2goKScgY2FsbFxuICAgIGNvbnN0IGNob2tpZGFyV2F0Y2hPcHRzID0gbW9ja0Nob2tpZGFyV2F0Y2gubW9jay5jYWxsc1swXVsxXTtcbiAgICByZXR1cm4gY2hva2lkYXJXYXRjaE9wdHMuaWdub3JlZDtcbiAgfSxcbn07XG5cbmNvbnN0IG1vY2tEYXRhID0gamVzdC5mbigpO1xuamVzdC5tb2NrKCcuLi9saWIvbG9nZ2luZycsICgpID0+ICh7XG4gIC4uLmplc3QucmVxdWlyZUFjdHVhbCgnLi4vbGliL2xvZ2dpbmcnKSxcbiAgZGF0YTogbW9ja0RhdGEsXG59KSk7XG5cbmltcG9ydCAqIGFzIGN4c2NoZW1hIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYSc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgQm9vdHN0cmFwcGVyIH0gZnJvbSAnLi4vbGliL2FwaS9ib290c3RyYXAnO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cywgRGVwbG95U3RhY2tPcHRpb25zIH0gZnJvbSAnLi4vbGliL2FwaS9jbG91ZGZvcm1hdGlvbi1kZXBsb3ltZW50cyc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uL2xpYi9hcGkvZGVwbG95LXN0YWNrJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IENka1Rvb2xraXQsIFRhZyB9IGZyb20gJy4uL2xpYi9jZGstdG9vbGtpdCc7XG5pbXBvcnQgeyBSZXF1aXJlQXBwcm92YWwgfSBmcm9tICcuLi9saWIvZGlmZic7XG5pbXBvcnQgeyBmbGF0dGVuIH0gZnJvbSAnLi4vbGliL3V0aWwnO1xuaW1wb3J0IHsgaW5zdGFuY2VNb2NrRnJvbSwgTW9ja0Nsb3VkRXhlY3V0YWJsZSwgVGVzdFN0YWNrQXJ0aWZhY3QgfSBmcm9tICcuL3V0aWwnO1xuXG5sZXQgY2xvdWRFeGVjdXRhYmxlOiBNb2NrQ2xvdWRFeGVjdXRhYmxlO1xubGV0IGJvb3RzdHJhcHBlcjogamVzdC5Nb2NrZWQ8Qm9vdHN0cmFwcGVyPjtcbmxldCBzdGRlcnJNb2NrOiBqZXN0LlNweUluc3RhbmNlO1xuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuXG4gIG1vY2tDaG9raWRhcldhdGNoLm1vY2tSZXR1cm5WYWx1ZShmYWtlQ2hva2lkYXJXYXRjaGVyKTtcbiAgLy8gb24oKSBpbiBjaG9raWRhcidzIFdhdGNoZXIgcmV0dXJucyAndGhpcydcbiAgbW9ja0Nob2tpZGFyV2F0Y2hlck9uLm1vY2tSZXR1cm5WYWx1ZShmYWtlQ2hva2lkYXJXYXRjaGVyKTtcblxuICBib290c3RyYXBwZXIgPSBpbnN0YW5jZU1vY2tGcm9tKEJvb3RzdHJhcHBlcik7XG4gIGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudC5tb2NrUmVzb2x2ZWRWYWx1ZSh7IG5vT3A6IGZhbHNlLCBvdXRwdXRzOiB7fSB9IGFzIGFueSk7XG5cbiAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgIHN0YWNrczogW1xuICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0IsXG4gICAgXSxcbiAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgc3RhY2tzOiBbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQ10sXG4gICAgfV0sXG4gIH0pO1xuXG4gIHN0ZGVyck1vY2sgPSBqZXN0LnNweU9uKHByb2Nlc3Muc3RkZXJyLCAnd3JpdGUnKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4gdHJ1ZTsgfSk7XG59KTtcblxuZnVuY3Rpb24gZGVmYXVsdFRvb2xraXRTZXR1cCgpIHtcbiAgcmV0dXJuIG5ldyBDZGtUb29sa2l0KHtcbiAgICBjbG91ZEV4ZWN1dGFibGUsXG4gICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICBjbG91ZEZvcm1hdGlvbjogbmV3IEZha2VDbG91ZEZvcm1hdGlvbih7XG4gICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAnVGVzdC1TdGFjay1CJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgICAnVGVzdC1TdGFjay1DJzogeyBCYXo6ICdaaW5nYSEnIH0sXG4gICAgfSksXG4gIH0pO1xufVxuXG5kZXNjcmliZSgncmVhZEN1cnJlbnRUZW1wbGF0ZScsICgpID0+IHtcbiAgbGV0IHRlbXBsYXRlOiBhbnk7XG4gIGxldCBtb2NrRm9yRW52aXJvbm1lbnQgPSBqZXN0LmZuKCk7XG4gIGxldCBtb2NrQ2xvdWRFeGVjdXRhYmxlOiBNb2NrQ2xvdWRFeGVjdXRhYmxlO1xuICBiZWZvcmVFYWNoKCgpID0+IHtcblxuICAgIHRlbXBsYXRlID0ge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBLZXk6ICdWYWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUMnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgICBsb29rdXBSb2xlOiB7XG4gICAgICAgICAgICAgIGFybjogJ2Jsb29wLWxvb2t1cDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgICAgIHJlcXVpcmVzQm9vdHN0cmFwU3RhY2tWZXJzaW9uOiA1LFxuICAgICAgICAgICAgICBib290c3RyYXBTdGFja1ZlcnNpb25Tc21QYXJhbWV0ZXI6ICcvYm9vdHN0cmFwL3BhcmFtZXRlcicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcDoke0FXUzo6UmVnaW9ufToke0FXUzo6QWNjb3VudElkfScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgbW9ja0ZvckVudmlyb25tZW50ID0gamVzdC5mbigpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTsgfSk7XG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5mb3JFbnZpcm9ubWVudCA9IG1vY2tGb3JFbnZpcm9ubWVudDtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJDbG91ZEZvcm1hdGlvbih7XG4gICAgICBnZXRUZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBUZW1wbGF0ZUJvZHk6IEpTT04uc3RyaW5naWZ5KHRlbXBsYXRlKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBkZXNjcmliZVN0YWNrcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBTdGFja3M6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU3RhY2tOYW1lOiAnVGVzdC1TdGFjay1DJyxcbiAgICAgICAgICAgICAgU3RhY2tTdGF0dXM6ICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgICAgICAgICBDcmVhdGlvblRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6ICdUZXN0LVN0YWNrLUEnLFxuICAgICAgICAgICAgICBTdGFja1N0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAgICAgICAgIENyZWF0aW9uVGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2xvb2t1cCByb2xlIGlzIHVzZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBsZXQgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIocmVxdWVzdCkge1xuICAgICAgICByZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lID0gcmVxdWVzdC5OYW1lO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFBhcmFtZXRlcjoge1xuICAgICAgICAgICAgVmFsdWU6ICc2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUMnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChyZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lISkudG9FcXVhbCgnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDIpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gaXMgbm90IHZhbGlkJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbGV0IHJlcXVlc3RlZFBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnN0dWJTU00oe1xuICAgICAgZ2V0UGFyYW1ldGVyKHJlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdGVkUGFyYW1ldGVyTmFtZSA9IHJlcXVlc3QuTmFtZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBQYXJhbWV0ZXI6IHtcbiAgICAgICAgICAgIFZhbHVlOiAnMScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZTogbW9ja0Nsb3VkRXhlY3V0YWJsZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IG1vY2tDbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgIHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLFxuICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKHsgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIgfSksXG4gICAgfSk7XG5cbiAgICAvLyBXSEVOXG4gICAgYXdhaXQgY2RrVG9vbGtpdC5kZXBsb3koe1xuICAgICAgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnVGVzdC1TdGFjay1DJ10gfSxcbiAgICB9KTtcblxuICAgIC8vIFRIRU5cbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChyZXF1ZXN0ZWRQYXJhbWV0ZXJOYW1lISkudG9FcXVhbCgnL2Jvb3RzdHJhcC9wYXJhbWV0ZXInKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgYm9vdHN0cmFwIHZlcnNpb24gcGFyYW1ldGVyIG5vdCBmb3VuZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IGZvdW5kJyk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvQ291bGQgbm90IGFzc3VtZSBibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTIvKSxcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDMpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1swXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3AtbG9va3VwOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMV1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogJ2Jsb29wOmhlcmU6MTIzNDU2Nzg5MDEyJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZmFsbGJhY2sgdG8gZGVwbG95IHJvbGUgaWYgZm9yRW52aXJvbm1lbnQgdGhyb3dzJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgLy8gdGhyb3cgZXJyb3IgZmlyc3QgZm9yIHRoZSAncHJlcGFyZVNka1dpdGhMb29rdXBSb2xlRm9yJyBjYWxsIGFuZCBzdWNjZWVkIGZvciB0aGUgcmVzdFxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb25PbmNlKCgpID0+IHsgdGhyb3cgbmV3IEVycm9yKCdlcnJvcicpOyB9KVxuICAgICAgLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7IHJldHVybiB7IHNkazogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGssIGRpZEFzc3VtZVJvbGU6IHRydWUgfTt9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7IH07XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLnNzbSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICBleHBlY3QoZmxhdHRlbihzdGRlcnJNb2NrLm1vY2suY2FsbHMpKS50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lIGJsb29wLWxvb2t1cDpoZXJlOjEyMzQ1Njc4OTAxMi8pLFxuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9wbGVhc2UgdXBncmFkZSB0byBib290c3RyYXAgdmVyc2lvbiA+PSA1LyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkb250IGxvb2t1cCBib290c3RyYXAgdmVyc2lvbiBwYXJhbWV0ZXIgaWYgZGVmYXVsdCBjcmVkZW50aWFscyBhcmUgdXNlZCcsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIG1vY2tGb3JFbnZpcm9ubWVudCA9IGplc3QuZm4oKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4geyByZXR1cm4geyBzZGs6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc2RrLCBkaWRBc3N1bWVSb2xlOiBmYWxzZSB9OyB9KTtcbiAgICBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLmZvckVudmlyb25tZW50ID0gbW9ja0ZvckVudmlyb25tZW50O1xuICAgIGNvbnN0IGNka1Rvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICBjbG91ZEV4ZWN1dGFibGU6IG1vY2tDbG91ZEV4ZWN1dGFibGUsXG4gICAgICBjb25maWd1cmF0aW9uOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyh7IHNka1Byb3ZpZGVyOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyIH0pLFxuICAgIH0pO1xuICAgIG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIuc3R1YlNTTSh7XG4gICAgICBnZXRQYXJhbWV0ZXIoKSB7XG4gICAgICAgIHJldHVybiB7IH07XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGNka1Rvb2xraXQuZGVwbG95KHtcbiAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQyddIH0sXG4gICAgfSk7XG5cbiAgICAvLyBUSEVOXG4gICAgZXhwZWN0KGZsYXR0ZW4oc3RkZXJyTW9jay5tb2NrLmNhbGxzKSkudG9FcXVhbChleHBlY3QuYXJyYXlDb250YWluaW5nKFtcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcGxlYXNlIHVwZ3JhZGUgdG8gYm9vdHN0cmFwIHZlcnNpb24gPj0gNS8pLFxuICAgIF0pKTtcbiAgICBleHBlY3QobW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zZGsuc3NtKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMyk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzWzBdWzJdKS50b0VxdWFsKHtcbiAgICAgIGFzc3VtZVJvbGVBcm46ICdibG9vcC1sb29rdXA6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICAgIGV4cGVjdChtb2NrRm9yRW52aXJvbm1lbnQubW9jay5jYWxsc1sxXVsyXSkudG9FcXVhbCh7XG4gICAgICBhc3N1bWVSb2xlQXJuOiAnYmxvb3A6aGVyZToxMjM0NTY3ODkwMTInLFxuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkbyBub3QgcHJpbnQgd2FybmluZ3MgaWYgbG9va3VwIHJvbGUgbm90IHByb3ZpZGVkIGluIHN0YWNrIGFydGlmYWN0JywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIEdJVkVOXG4gICAgbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlci5zdHViU1NNKHtcbiAgICAgIGdldFBhcmFtZXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBjZGtUb29sa2l0ID0gbmV3IENka1Rvb2xraXQoe1xuICAgICAgY2xvdWRFeGVjdXRhYmxlOiBtb2NrQ2xvdWRFeGVjdXRhYmxlLFxuICAgICAgY29uZmlndXJhdGlvbjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLFxuICAgICAgc2RrUHJvdmlkZXI6IG1vY2tDbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICBjbG91ZEZvcm1hdGlvbjogbmV3IENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMoeyBzZGtQcm92aWRlcjogbW9ja0Nsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlciB9KSxcbiAgICB9KTtcblxuICAgIC8vIFdIRU5cbiAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnXSB9LFxuICAgIH0pO1xuXG4gICAgLy8gVEhFTlxuICAgIGV4cGVjdChmbGF0dGVuKHN0ZGVyck1vY2subW9jay5jYWxscykpLm5vdC50b0VxdWFsKGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1xuICAgICAgZXhwZWN0LnN0cmluZ01hdGNoaW5nKC9Db3VsZCBub3QgYXNzdW1lLyksXG4gICAgICBleHBlY3Quc3RyaW5nTWF0Y2hpbmcoL3BsZWFzZSB1cGdyYWRlIHRvIGJvb3RzdHJhcCB2ZXJzaW9uLyksXG4gICAgXSkpO1xuICAgIGV4cGVjdChtb2NrQ2xvdWRFeGVjdXRhYmxlLnNka1Byb3ZpZGVyLnNkay5zc20pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KG1vY2tGb3JFbnZpcm9ubWVudC5tb2NrLmNhbGxzLmxlbmd0aCkudG9FcXVhbCgyKTtcbiAgICBleHBlY3QobW9ja0ZvckVudmlyb25tZW50Lm1vY2suY2FsbHNbMF1bMl0pLnRvRXF1YWwoe1xuICAgICAgYXNzdW1lUm9sZUFybjogdW5kZWZpbmVkLFxuICAgICAgYXNzdW1lUm9sZUV4dGVybmFsSWQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ2RlcGxveScsICgpID0+IHtcbiAgdGVzdCgnZmFpbHMgd2hlbiBubyB2YWxpZCBzdGFjayBuYW1lcyBhcmUgZ2l2ZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgLy8gV0hFTlxuICAgIGF3YWl0IGV4cGVjdCgoKSA9PiB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stRCddIH0gfSkpLnJlamVjdHMudG9UaHJvdygnTm8gc3RhY2tzIG1hdGNoIHRoZSBuYW1lKHMpIFRlc3QtU3RhY2stRCcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnd2l0aCBob3Rzd2FwIGRlcGxveW1lbnQnLCAoKSA9PiB7XG4gICAgdGVzdChcInBhc3NlcyB0aHJvdWdoIHRoZSAnaG90c3dhcCcgb3B0aW9uIHRvIENsb3VkRm9ybWF0aW9uRGVwbG95bWVudHMuZGVwbG95U3RhY2soKVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgbW9ja0NmbkRlcGxveW1lbnRzID0gaW5zdGFuY2VNb2NrRnJvbShDbG91ZEZvcm1hdGlvbkRlcGxveW1lbnRzKTtcbiAgICAgIG1vY2tDZm5EZXBsb3ltZW50cy5kZXBsb3lTdGFjay5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgbm9PcDogZmFsc2UsXG4gICAgICAgIG91dHB1dHM6IHt9LFxuICAgICAgICBzdGFja0FybjogJ3N0YWNrQXJuJyxcbiAgICAgICAgc3RhY2tBcnRpZmFjdDogaW5zdGFuY2VNb2NrRnJvbShjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpLFxuICAgICAgfSkpO1xuICAgICAgY29uc3QgY2RrVG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgY2xvdWRGb3JtYXRpb246IG1vY2tDZm5EZXBsb3ltZW50cyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBjZGtUb29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnXSB9LFxuICAgICAgICByZXF1aXJlQXBwcm92YWw6IFJlcXVpcmVBcHByb3ZhbC5OZXZlcixcbiAgICAgICAgaG90c3dhcDogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QobW9ja0NmbkRlcGxveW1lbnRzLmRlcGxveVN0YWNrKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIGhvdHN3YXA6IHRydWUsXG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtYWtlcyBjb3JyZWN0IENsb3VkRm9ybWF0aW9uIGNhbGxzJywgKCkgPT4ge1xuICAgIHRlc3QoJ3dpdGhvdXQgb3B0aW9ucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQScsICdUZXN0LVN0YWNrLUInXSB9IH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnd2l0aCBzdGFja3MgYWxsIHN0YWNrcyBzcGVjaWZpZWQgYXMgZG91YmxlIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKionXSB9IH0pO1xuICAgIH0pO1xuXG5cbiAgICB0ZXN0KCd3aXRoIG9uZSBzdGFjayBzcGVjaWZpZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5kZXBsb3koeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJ10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3dpdGggc3RhY2tzIGFsbCBzdGFja3Mgc3BlY2lmaWVkIGFzIHdpbGRjYXJkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuZGVwbG95KHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFsnKiddIH0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd3aXRoIHNucyBub3RpZmljYXRpb24gYXJucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gW1xuICAgICAgICAnYXJuOmF3czpzbnM6dXMtZWFzdC0yOjQ0NDQ1NTU1NjY2NjpNeVRvcGljJyxcbiAgICAgICAgJ2Fybjphd3M6c25zOmV1LXdlc3QtMToxMTExNTU1NTY2NjY6bXktZ3JlYXQtdG9waWMnLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHRvb2xraXQgPSBuZXcgQ2RrVG9vbGtpdCh7XG4gICAgICAgIGNsb3VkRXhlY3V0YWJsZSxcbiAgICAgICAgY29uZmlndXJhdGlvbjogY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24sXG4gICAgICAgIHNka1Byb3ZpZGVyOiBjbG91ZEV4ZWN1dGFibGUuc2RrUHJvdmlkZXIsXG4gICAgICAgIGNsb3VkRm9ybWF0aW9uOiBuZXcgRmFrZUNsb3VkRm9ybWF0aW9uKHtcbiAgICAgICAgICAnVGVzdC1TdGFjay1BJzogeyBGb286ICdCYXInIH0sXG4gICAgICAgICAgJ1Rlc3QtU3RhY2stQic6IHsgQmF6OiAnWmluZ2EhJyB9LFxuICAgICAgICB9LCBub3RpZmljYXRpb25Bcm5zKSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCB0b29sa2l0LmRlcGxveSh7XG4gICAgICAgIHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbJ1Rlc3QtU3RhY2stQScsICdUZXN0LVN0YWNrLUInXSB9LFxuICAgICAgICBub3RpZmljYXRpb25Bcm5zLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdmYWlsIHdpdGggaW5jb3JyZWN0IHNucyBub3RpZmljYXRpb24gYXJucycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBjb25zdCBub3RpZmljYXRpb25Bcm5zID0gWydhcm46OjpjZm4tbXktY29vbC10b3BpYyddO1xuICAgICAgY29uc3QgdG9vbGtpdCA9IG5ldyBDZGtUb29sa2l0KHtcbiAgICAgICAgY2xvdWRFeGVjdXRhYmxlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbixcbiAgICAgICAgc2RrUHJvdmlkZXI6IGNsb3VkRXhlY3V0YWJsZS5zZGtQcm92aWRlcixcbiAgICAgICAgY2xvdWRGb3JtYXRpb246IG5ldyBGYWtlQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgICAgICdUZXN0LVN0YWNrLUEnOiB7IEZvbzogJ0JhcicgfSxcbiAgICAgICAgfSwgbm90aWZpY2F0aW9uQXJucyksXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgZXhwZWN0KCgpID0+XG4gICAgICAgIHRvb2xraXQuZGVwbG95KHtcbiAgICAgICAgICBzZWxlY3RvcjogeyBwYXR0ZXJuczogWydUZXN0LVN0YWNrLUEnXSB9LFxuICAgICAgICAgIG5vdGlmaWNhdGlvbkFybnMsXG4gICAgICAgIH0pLFxuICAgICAgKS5yZWplY3RzLnRvVGhyb3coJ05vdGlmaWNhdGlvbiBhcm4gYXJuOjo6Y2ZuLW15LWNvb2wtdG9waWMgaXMgbm90IGEgdmFsaWQgYXJuIGZvciBhbiBTTlMgdG9waWMnKTtcblxuICAgIH0pO1xuXG4gICAgdGVzdCgnZ2xvYmxlc3MgYm9vdHN0cmFwIHVzZXMgZW52aXJvbm1lbnQgd2l0aG91dCBxdWVzdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly81Njc4OS9zb3V0aC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICc1Njc4OScsXG4gICAgICAgIHJlZ2lvbjogJ3NvdXRoLXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vNTY3ODkvc291dGgtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZ2xvYmJ5IGJvb3RzdHJhcCB1c2VzIHdoYXRzIGluIHRoZSBzdGFja3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ2FwcCddLCAnc29tZXRoaW5nJyk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHRvb2xraXQuYm9vdHN0cmFwKFsnYXdzOi8vKi9iZXJtdWRhLXRyaWFuZ2xlLTEnXSwgYm9vdHN0cmFwcGVyLCB7fSk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChib290c3RyYXBwZXIuYm9vdHN0cmFwRW52aXJvbm1lbnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgYWNjb3VudDogJzEyMzQ1Njc4OTAxMicsXG4gICAgICAgIHJlZ2lvbjogJ2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgICAgIG5hbWU6ICdhd3M6Ly8xMjM0NTY3ODkwMTIvYmVybXVkYS10cmlhbmdsZS0xJyxcbiAgICAgIH0sIGV4cGVjdC5hbnl0aGluZygpLCBleHBlY3QuYW55dGhpbmcoKSk7XG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdib290c3RyYXAgY2FuIGJlIGludm9rZWQgd2l0aG91dCB0aGUgLS1hcHAgYXJndW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG1vY2tTeW50aGVzaXplID0gamVzdC5mbigpO1xuICAgICAgY2xvdWRFeGVjdXRhYmxlLnN5bnRoZXNpemUgPSBtb2NrU3ludGhlc2l6ZTtcblxuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgYXdhaXQgdG9vbGtpdC5ib290c3RyYXAoWydhd3M6Ly8xMjM0NTY3ODkwMTIvd2VzdC1wb2xlJ10sIGJvb3RzdHJhcHBlciwge30pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoYm9vdHN0cmFwcGVyLmJvb3RzdHJhcEVudmlyb25tZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIGFjY291bnQ6ICcxMjM0NTY3ODkwMTInLFxuICAgICAgICByZWdpb246ICd3ZXN0LXBvbGUnLFxuICAgICAgICBuYW1lOiAnYXdzOi8vMTIzNDU2Nzg5MDEyL3dlc3QtcG9sZScsXG4gICAgICB9LCBleHBlY3QuYW55dGhpbmcoKSwgZXhwZWN0LmFueXRoaW5nKCkpO1xuICAgICAgZXhwZWN0KGJvb3RzdHJhcHBlci5ib290c3RyYXBFbnZpcm9ubWVudCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuXG4gICAgICBleHBlY3QoY2xvdWRFeGVjdXRhYmxlLmhhc0FwcCkudG9FcXVhbChmYWxzZSk7XG4gICAgICBleHBlY3QobW9ja1N5bnRoZXNpemUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCd3YXRjaCcsICgpID0+IHtcbiAgdGVzdChcImZhaWxzIHdoZW4gbm8gJ3dhdGNoJyBzZXR0aW5ncyBhcmUgZm91bmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KS5yZWplY3RzLnRvVGhyb3coXCJDYW5ub3QgdXNlIHRoZSAnd2F0Y2gnIGNvbW1hbmQgd2l0aG91dCBzcGVjaWZ5aW5nIGF0IGxlYXN0IG9uZSBkaXJlY3RvcnkgdG8gbW9uaXRvci4gXCIgK1xuICAgICAgJ01ha2Ugc3VyZSB0byBhZGQgYSBcIndhdGNoXCIga2V5IHRvIHlvdXIgY2RrLmpzb24nKTtcbiAgfSk7XG5cbiAgdGVzdCgnb2JzZXJ2ZXMgb25seSB0aGUgcm9vdCBkaXJlY3RvcnkgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGluY2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guaW5jbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGluY2x1ZGVBcmdzLmxlbmd0aCkudG9CZSgxKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5pbmNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgaW5jbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGV4cGVjdChmYWtlQ2hva2lkYXJXYXRjaC5pbmNsdWRlQXJncykudG9TdHJpY3RFcXVhbChbJ215LWRpciddKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYW4gYXJyYXkgb2Ygc3RyaW5ncyBpbiAnd2F0Y2guaW5jbHVkZSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ3dhdGNoJ10sIHtcbiAgICAgIGluY2x1ZGU6IFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgZXhwZWN0KGZha2VDaG9raWRhcldhdGNoLmluY2x1ZGVBcmdzKS50b1N0cmljdEVxdWFsKFsnbXktZGlyMScsICcqKi9teS1kaXIyLyonXSk7XG4gIH0pO1xuXG4gIHRlc3QoJ2lnbm9yZXMgdGhlIG91dHB1dCBkaXIsIGRvdCBmaWxlcywgZG90IGRpcmVjdG9yaWVzLCBhbmQgbm9kZV9tb2R1bGVzIGJ5IGRlZmF1bHQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNsb3VkRXhlY3V0YWJsZS5jb25maWd1cmF0aW9uLnNldHRpbmdzLnNldChbJ291dHB1dCddLCAnY2RrLm91dCcpO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0gfSk7XG5cbiAgICBleHBlY3QoZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3MpLnRvU3RyaWN0RXF1YWwoW1xuICAgICAgJ2Nkay5vdXQvKionLFxuICAgICAgJyoqLy4qJyxcbiAgICAgICcqKi8uKi8qKicsXG4gICAgICAnKiovbm9kZV9tb2R1bGVzLyoqJyxcbiAgICBdKTtcbiAgfSk7XG5cbiAgdGVzdChcImFsbG93cyBwcm92aWRpbmcgYSBzaW5nbGUgc3RyaW5nIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogJ215LWRpcicsXG4gICAgfSk7XG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcblxuICAgIGNvbnN0IGV4Y2x1ZGVBcmdzID0gZmFrZUNob2tpZGFyV2F0Y2guZXhjbHVkZUFyZ3M7XG4gICAgZXhwZWN0KGV4Y2x1ZGVBcmdzLmxlbmd0aCkudG9CZSg1KTtcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3NbMF0pLnRvQmUoJ215LWRpcicpO1xuICB9KTtcblxuICB0ZXN0KFwiYWxsb3dzIHByb3ZpZGluZyBhbiBhcnJheSBvZiBzdHJpbmdzIGluICd3YXRjaC5leGNsdWRlJ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge1xuICAgICAgZXhjbHVkZTogWydteS1kaXIxJywgJyoqL215LWRpcjInXSxcbiAgICB9KTtcbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC53YXRjaCh7IHNlbGVjdG9yOiB7IHBhdHRlcm5zOiBbXSB9IH0pO1xuXG4gICAgY29uc3QgZXhjbHVkZUFyZ3MgPSBmYWtlQ2hva2lkYXJXYXRjaC5leGNsdWRlQXJncztcbiAgICBleHBlY3QoZXhjbHVkZUFyZ3MubGVuZ3RoKS50b0JlKDYpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1swXSkudG9CZSgnbXktZGlyMScpO1xuICAgIGV4cGVjdChleGNsdWRlQXJnc1sxXSkudG9CZSgnKiovbXktZGlyMicpO1xuICB9KTtcblxuICB0ZXN0KCdhbGxvd3Mgd2F0Y2hpbmcgd2l0aCBkZXBsb3kgY29uY3VycmVuY3knLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3Muc2V0KFsnd2F0Y2gnXSwge30pO1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgY29uc3QgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICB0b29sa2l0LmRlcGxveSA9IGNka0RlcGxveU1vY2s7XG5cbiAgICBhd2FpdCB0b29sa2l0LndhdGNoKHsgc2VsZWN0b3I6IHsgcGF0dGVybnM6IFtdIH0sIGNvbmN1cnJlbmN5OiAzIH0pO1xuICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5yZWFkeUNhbGxiYWNrKCk7XG5cbiAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9CZUNhbGxlZFdpdGgoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyBjb25jdXJyZW5jeTogMyB9KSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd3aXRoIGZpbGUgY2hhbmdlIGV2ZW50cycsICgpID0+IHtcbiAgICBsZXQgdG9vbGtpdDogQ2RrVG9vbGtpdDtcbiAgICBsZXQgY2RrRGVwbG95TW9jazogamVzdC5Nb2NrO1xuXG4gICAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5zZXQoWyd3YXRjaCddLCB7fSk7XG4gICAgICB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuICAgICAgY2RrRGVwbG95TW9jayA9IGplc3QuZm4oKTtcbiAgICAgIHRvb2xraXQuZGVwbG95ID0gY2RrRGVwbG95TW9jaztcbiAgICAgIGF3YWl0IHRvb2xraXQud2F0Y2goeyBzZWxlY3RvcjogeyBwYXR0ZXJuczogW10gfSB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoXCJkb2VzIG5vdCB0cmlnZ2VyIGEgJ2RlcGxveScgYmVmb3JlIHRoZSAncmVhZHknIGV2ZW50IGhhcyBmaXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2FkZCcsICdteS1maWxlJyk7XG5cbiAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoXCJ3aGVuIHRoZSAncmVhZHknIGV2ZW50IGhhcyBhbHJlYWR5IGZpcmVkXCIsICgpID0+IHtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICAvLyBUaGUgcmVhZHkgY2FsbGJhY2sgdHJpZ2dlcnMgYSBkZXBsb3ltZW50IHNvIGVhY2ggdGVzdFxuICAgICAgICAvLyB0aGF0IHVzZXMgdGhpcyBmdW5jdGlvbiB3aWxsIHNlZSAnY2RrRGVwbG95TW9jaycgY2FsbGVkXG4gICAgICAgIC8vIGFuIGFkZGl0aW9uYWwgdGltZS5cbiAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLnJlYWR5Q2FsbGJhY2soKTtcbiAgICAgIH0pO1xuXG4gICAgICB0ZXN0KFwiYW4gaW5pdGlhbCAnZGVwbG95JyBpcyB0cmlnZ2VyZWQsIHdpdGhvdXQgYW55IGZpbGUgY2hhbmdlc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcImRvZXMgdHJpZ2dlciBhICdkZXBsb3knIGZvciBhIGZpbGUgY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZScpO1xuXG4gICAgICAgIGV4cGVjdChjZGtEZXBsb3lNb2NrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgICB9KTtcblxuICAgICAgdGVzdChcInRyaWdnZXJzIGEgJ2RlcGxveScgdHdpY2UgZm9yIHR3byBmaWxlIGNoYW5nZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICBdKTtcblxuICAgICAgICBleHBlY3QoY2RrRGVwbG95TW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgICAgfSk7XG5cbiAgICAgIHRlc3QoXCJiYXRjaGVzIGZpbGUgY2hhbmdlcyB0aGF0IGhhcHBlbiBkdXJpbmcgJ2RlcGxveSdcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTEnKSxcbiAgICAgICAgICBmYWtlQ2hva2lkYXJXYXRjaGVyT24uZmlsZUV2ZW50Q2FsbGJhY2soJ2NoYW5nZScsICdteS1maWxlMicpLFxuICAgICAgICAgIGZha2VDaG9raWRhcldhdGNoZXJPbi5maWxlRXZlbnRDYWxsYmFjaygndW5saW5rJywgJ215LWZpbGUzJyksXG4gICAgICAgICAgZmFrZUNob2tpZGFyV2F0Y2hlck9uLmZpbGVFdmVudENhbGxiYWNrKCdhZGQnLCAnbXktZmlsZTQnKSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgZXhwZWN0KGNka0RlcGxveU1vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc3ludGgnLCAoKSA9PiB7XG4gIHRlc3QoJ3N1Y2Nlc3NmdWwgc3ludGggb3V0cHV0cyBoaWVyYXJjaGljYWwgc3RhY2sgaWRzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIGZhbHNlKTtcblxuICAgIC8vIFNlcGFyYXRlIHRlc3RzIGFzIGNvbG9yaXppbmcgaGFtcGVycyBkZXRlY3Rpb25cbiAgICBleHBlY3Qoc3RkZXJyTW9jay5tb2NrLmNhbGxzWzFdWzBdKS50b01hdGNoKCdUZXN0LVN0YWNrLUEtRGlzcGxheS1OYW1lJyk7XG4gICAgZXhwZWN0KHN0ZGVyck1vY2subW9jay5jYWxsc1sxXVswXSkudG9NYXRjaCgnVGVzdC1TdGFjay1CJyk7XG4gIH0pO1xuXG4gIHRlc3QoJ3dpdGggbm8gc3Rkb3V0IG9wdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCB0b29sa2l0LnN5bnRoKFsnVGVzdC1TdGFjay1BLURpc3BsYXktTmFtZSddLCBmYWxzZSwgdHJ1ZSk7XG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDApO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LlNUQUNLU19UT19WQUxJREFURSA9IHVuZGVmaW5lZDtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3N0YWNrIHdpdGggZXJyb3IgYW5kIGZsYWdnZWQgZm9yIHZhbGlkYXRpb24nLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICAgIHN0YWNrczogW1xuICAgICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgICAgXSxcbiAgICAgICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICAgIHsgcHJvcGVydGllczogeyB2YWxpZGF0ZU9uU3ludGg6IHRydWUgfSwgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYXVzZXMgc3ludGggdG8gZmFpbCBpZiBhdXRvVmFsaWRhdGU9dHJ1ZScsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNvbnN0IGF1dG9WYWxpZGF0ZSA9IHRydWU7XG4gICAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSkpLnJlamVjdHMudG9CZURlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhdXNlcyBzeW50aCB0byBzdWNjZWVkIGlmIGF1dG9WYWxpZGF0ZT1mYWxzZScsIGFzeW5jKCkgPT4ge1xuICAgICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcbiAgICAgIGNvbnN0IGF1dG9WYWxpZGF0ZSA9IGZhbHNlO1xuICAgICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUsIGF1dG9WYWxpZGF0ZSk7XG4gICAgICBleHBlY3QobW9ja0RhdGEubW9jay5jYWxscy5sZW5ndGgpLnRvRXF1YWwoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHRlc3QoJ3N0YWNrIGhhcyBlcnJvciBhbmQgd2FzIGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYygpID0+IHtcbiAgICBjbG91ZEV4ZWN1dGFibGUgPSBuZXcgTW9ja0Nsb3VkRXhlY3V0YWJsZSh7XG4gICAgICBzdGFja3M6IFtcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQSxcbiAgICAgICAgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQixcbiAgICAgIF0sXG4gICAgICBuZXN0ZWRBc3NlbWJsaWVzOiBbe1xuICAgICAgICBzdGFja3M6IFtcbiAgICAgICAgICB7IHByb3BlcnRpZXM6IHsgdmFsaWRhdGVPblN5bnRoOiBmYWxzZSB9LCAuLi5Nb2NrU3RhY2suTU9DS19TVEFDS19XSVRIX0VSUk9SIH0sXG4gICAgICAgIF0sXG4gICAgICB9XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHRvb2xraXQgPSBkZWZhdWx0VG9vbGtpdFNldHVwKCk7XG5cbiAgICBhd2FpdCBleHBlY3QodG9vbGtpdC5zeW50aChbJ1Rlc3QtU3RhY2stQS93aXRoZXJyb3JzJ10sIGZhbHNlLCB0cnVlKSkucmVqZWN0cy50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZXJyb3IsIGlzIG5vdCBmbGFnZ2VkIGZvciB2YWxpZGF0aW9uIGFuZCB3YXMgbm90IGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0EsXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0IsXG4gICAgICBdLFxuICAgICAgbmVzdGVkQXNzZW1ibGllczogW3tcbiAgICAgICAgc3RhY2tzOiBbXG4gICAgICAgICAgeyBwcm9wZXJ0aWVzOiB7IHZhbGlkYXRlT25TeW50aDogZmFsc2UgfSwgLi4uTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfV0lUSF9FUlJPUiB9LFxuICAgICAgICBdLFxuICAgICAgfV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCB0b29sa2l0ID0gZGVmYXVsdFRvb2xraXRTZXR1cCgpO1xuXG4gICAgYXdhaXQgdG9vbGtpdC5zeW50aChbXSwgZmFsc2UsIHRydWUpO1xuICB9KTtcblxuICB0ZXN0KCdzdGFjayBoYXMgZGVwZW5kZW5jeSBhbmQgd2FzIGV4cGxpY2l0bHkgc2VsZWN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY2xvdWRFeGVjdXRhYmxlID0gbmV3IE1vY2tDbG91ZEV4ZWN1dGFibGUoe1xuICAgICAgc3RhY2tzOiBbXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0MsXG4gICAgICAgIE1vY2tTdGFjay5NT0NLX1NUQUNLX0QsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdG9vbGtpdCA9IGRlZmF1bHRUb29sa2l0U2V0dXAoKTtcblxuICAgIGF3YWl0IHRvb2xraXQuc3ludGgoW01vY2tTdGFjay5NT0NLX1NUQUNLX0Quc3RhY2tOYW1lXSwgdHJ1ZSwgZmFsc2UpO1xuXG4gICAgZXhwZWN0KG1vY2tEYXRhLm1vY2suY2FsbHMubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChtb2NrRGF0YS5tb2NrLmNhbGxzWzBdWzBdKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5jbGFzcyBNb2NrU3RhY2sge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQTogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1BJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1BJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1BJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnRm9vJywgdmFsdWU6ICdCYXInIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBkaXNwbGF5TmFtZTogJ1Rlc3QtU3RhY2stQS1EaXNwbGF5LU5hbWUnLFxuICB9O1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfQjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnVGVzdC1TdGFjay1CJyxcbiAgICB0ZW1wbGF0ZTogeyBSZXNvdXJjZXM6IHsgVGVtcGxhdGVOYW1lOiAnVGVzdC1TdGFjay1CJyB9IH0sXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgbWV0YWRhdGE6IHtcbiAgICAgICcvVGVzdC1TdGFjay1CJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5TVEFDS19UQUdTLFxuICAgICAgICAgIGRhdGE6IFtcbiAgICAgICAgICAgIHsga2V5OiAnQmF6JywgdmFsdWU6ICdaaW5nYSEnIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0M6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stQycsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stQycgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stQyc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvVGVzdC1TdGFjay1DJyxcbiAgfTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNT0NLX1NUQUNLX0Q6IFRlc3RTdGFja0FydGlmYWN0ID0ge1xuICAgIHN0YWNrTmFtZTogJ1Rlc3QtU3RhY2stRCcsXG4gICAgdGVtcGxhdGU6IHsgUmVzb3VyY2VzOiB7IFRlbXBsYXRlTmFtZTogJ1Rlc3QtU3RhY2stRCcgfSB9LFxuICAgIGVudjogJ2F3czovLzEyMzQ1Njc4OTAxMi9iZXJtdWRhLXRyaWFuZ2xlLTEnLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL1Rlc3QtU3RhY2stRCc6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuU1RBQ0tfVEFHUyxcbiAgICAgICAgICBkYXRhOiBbXG4gICAgICAgICAgICB7IGtleTogJ0JheicsIHZhbHVlOiAnWmluZ2EhJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGVwZW5kczogW01vY2tTdGFjay5NT0NLX1NUQUNLX0Muc3RhY2tOYW1lXSxcbiAgfVxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1PQ0tfU1RBQ0tfV0lUSF9FUlJPUjogVGVzdFN0YWNrQXJ0aWZhY3QgPSB7XG4gICAgc3RhY2tOYW1lOiAnd2l0aGVycm9ycycsXG4gICAgZW52OiAnYXdzOi8vMTIzNDU2Nzg5MDEyL2Jlcm11ZGEtdHJpYW5nbGUtMScsXG4gICAgdGVtcGxhdGU6IHsgcmVzb3VyY2U6ICdlcnJvcnJlc291cmNlJyB9LFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICAnL3Jlc291cmNlJzogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5FUlJPUixcbiAgICAgICAgICBkYXRhOiAndGhpcyBpcyBhbiBlcnJvcicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAgZGlzcGxheU5hbWU6ICdUZXN0LVN0YWNrLUEvd2l0aGVycm9ycycsXG4gIH1cbn1cblxuY2xhc3MgRmFrZUNsb3VkRm9ybWF0aW9uIGV4dGVuZHMgQ2xvdWRGb3JtYXRpb25EZXBsb3ltZW50cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwZWN0ZWRUYWdzOiB7IFtzdGFja05hbWU6IHN0cmluZ106IFRhZ1tdIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBleHBlY3RlZE5vdGlmaWNhdGlvbkFybnM/OiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBleHBlY3RlZFRhZ3M6IHsgW3N0YWNrTmFtZTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9ID0ge30sXG4gICAgZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zPzogc3RyaW5nW10sXG4gICkge1xuICAgIHN1cGVyKHsgc2RrUHJvdmlkZXI6IHVuZGVmaW5lZCBhcyBhbnkgfSk7XG5cbiAgICBmb3IgKGNvbnN0IFtzdGFja05hbWUsIHRhZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGVkVGFncykpIHtcbiAgICAgIHRoaXMuZXhwZWN0ZWRUYWdzW3N0YWNrTmFtZV0gPVxuICAgICAgICBPYmplY3QuZW50cmllcyh0YWdzKS5tYXAoKFtLZXksIFZhbHVlXSkgPT4gKHsgS2V5LCBWYWx1ZSB9KSlcbiAgICAgICAgICAuc29ydCgobCwgcikgPT4gbC5LZXkubG9jYWxlQ29tcGFyZShyLktleSkpO1xuICAgIH1cbiAgICBpZiAoZXhwZWN0ZWROb3RpZmljYXRpb25Bcm5zKSB7XG4gICAgICB0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyA9IGV4cGVjdGVkTm90aWZpY2F0aW9uQXJucztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZGVwbG95U3RhY2sob3B0aW9uczogRGVwbG95U3RhY2tPcHRpb25zKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdD4ge1xuICAgIGV4cGVjdChbTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQS5zdGFja05hbWUsIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Iuc3RhY2tOYW1lLCBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZV0pXG4gICAgICAudG9Db250YWluKG9wdGlvbnMuc3RhY2suc3RhY2tOYW1lKTtcbiAgICBleHBlY3Qob3B0aW9ucy50YWdzKS50b0VxdWFsKHRoaXMuZXhwZWN0ZWRUYWdzW29wdGlvbnMuc3RhY2suc3RhY2tOYW1lXSk7XG4gICAgZXhwZWN0KG9wdGlvbnMubm90aWZpY2F0aW9uQXJucykudG9FcXVhbCh0aGlzLmV4cGVjdGVkTm90aWZpY2F0aW9uQXJucyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICBzdGFja0FybjogYGFybjphd3M6Y2xvdWRmb3JtYXRpb246OjpzdGFjay8ke29wdGlvbnMuc3RhY2suc3RhY2tOYW1lfS9Nb2NrZWRPdXRgLFxuICAgICAgbm9PcDogZmFsc2UsXG4gICAgICBvdXRwdXRzOiB7IFN0YWNrTmFtZTogb3B0aW9ucy5zdGFjay5zdGFja05hbWUgfSxcbiAgICAgIHN0YWNrQXJ0aWZhY3Q6IG9wdGlvbnMuc3RhY2ssXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZEN1cnJlbnRUZW1wbGF0ZShzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KTogUHJvbWlzZTxUZW1wbGF0ZT4ge1xuICAgIHN3aXRjaCAoc3RhY2suc3RhY2tOYW1lKSB7XG4gICAgICBjYXNlIE1vY2tTdGFjay5NT0NLX1NUQUNLX0Euc3RhY2tOYW1lOlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGNhc2UgTW9ja1N0YWNrLk1PQ0tfU1RBQ0tfQi5zdGFja05hbWU6XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgY2FzZSBNb2NrU3RhY2suTU9DS19TVEFDS19DLnN0YWNrTmFtZTpcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYE5vdCBhbiBleHBlY3RlZCBtb2NrIHN0YWNrOiAke3N0YWNrLnN0YWNrTmFtZX1gKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==