projen-modules 5.1.1 → 5.2.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.
package/.jsii CHANGED
@@ -11843,6 +11843,6 @@
11843
11843
  "symbolId": "src/components/readme/elements/section:SectionOptions"
11844
11844
  }
11845
11845
  },
11846
- "version": "5.1.1",
11847
- "fingerprint": "vhNGrU0XfBemseg7RvVOxSPRyP6nATkEXBGdu4maqVk="
11846
+ "version": "5.2.0",
11847
+ "fingerprint": "PWwVscjFnc6qYiNcRGPu5aonUHqf0j0bZamaqxiHzFg="
11848
11848
  }
@@ -18,6 +18,20 @@ exports.AWS_ACTIONS_CONFIGURE_AWS_CREDENTIALS = 'aws-actions/configure-aws-crede
18
18
  const DEFAULT_ROLE_SECRET = 'AWS_DEPLOYMENT_ROLE_ARN';
19
19
  const RELEASE_JOB_ID = 'release';
20
20
  const capitalise = (value) => value.charAt(0).toUpperCase() + value.slice(1);
21
+ const SECRET_REFERENCE = /\$\{\{\s*secrets\.([A-Za-z_][A-Za-z0-9_]*)\s*\}\}/g;
22
+ /**
23
+ * The secrets a deployment needs: its role ARN secret, then those its env
24
+ * values reference, in order of appearance and without duplicates
25
+ */
26
+ function deploymentSecrets(deployment) {
27
+ const secrets = new Set([deployment.roleSecret ?? DEFAULT_ROLE_SECRET]);
28
+ for (const value of Object.values(deployment.env ?? {})) {
29
+ for (const [, name] of value.matchAll(SECRET_REFERENCE)) {
30
+ secrets.add(name);
31
+ }
32
+ }
33
+ return [...secrets];
34
+ }
21
35
  /**
22
36
  * Adds a job per deployment environment to the default branch's release
23
37
  * workflow, each one deploying after the release job and the previous
@@ -103,11 +117,13 @@ function addDeployments(project, options) {
103
117
  readme_1.Readme.of(project)?.addSection('Deployment', [
104
118
  'After each release, the release workflow deploys to these GitHub environments in order, each after the previous one succeeds:',
105
119
  '',
106
- '| Environment | Region | Role ARN secret |',
107
- '| ----------- | ------ | --------------- |',
108
- ...deployments.map((d) => `| ${d.environment} | ${d.region} | \`${d.roleSecret ?? DEFAULT_ROLE_SECRET}\` |`),
120
+ '| Environment | Region | Secrets |',
121
+ '| ----------- | ------ | ------- |',
122
+ ...deployments.map((d) => `| ${d.environment} | ${d.region} | ${deploymentSecrets(d)
123
+ .map((name) => `\`${name}\``)
124
+ .join(', ')} |`),
109
125
  '',
110
- 'Each environment needs its role ARN secret, for a role that trusts GitHub\'s OIDC provider.',
126
+ 'Each environment needs these secrets set, the first being the ARN of a role that trusts GitHub\'s OIDC provider.',
111
127
  ].join('\n'), { order: readme_1.ReadmeOrder.USAGE });
112
128
  }
113
129
  /**
@@ -167,4 +183,4 @@ function deployCommand(pm) {
167
183
  return 'bun run deploy';
168
184
  }
169
185
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9naXRodWIvZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkNBLHdDQTZHQztBQTFKRCxtQ0FBZ0M7QUFDaEMsMkRBQWtFO0FBQ2xFLHVFQUEyRTtBQUMzRSxzREFBd0U7QUFDeEUscURBQXdFO0FBRXhFLHNDQUFnRDtBQUVoRCxpRkFBaUY7QUFDakYsaUZBQWlGO0FBQ2pGLHVGQUF1RjtBQUN2RixtQ0FBbUM7QUFDdEIsUUFBQSxrQkFBa0IsR0FDN0IsNkRBQTZELENBQUM7QUFDaEUsc0RBQXNEO0FBQ3pDLFFBQUEscUNBQXFDLEdBQ2hELGdGQUFnRixDQUFDO0FBRW5GLE1BQU0sbUJBQW1CLEdBQUcseUJBQXlCLENBQUM7QUFDdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDO0FBa0JqQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ25DLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixPQUFvQixFQUNwQixPQUEyQjtJQUUzQixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxTQUFTLENBQUM7SUFDOUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLHVCQUF1QixZQUFZLDBGQUEwRixDQUM5SCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsS0FBSyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkJBQTJCLFdBQVcsZ0dBQWdHLENBQ3ZJLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsV0FBVyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQXlCLENBQUM7SUFDM0UsTUFBTSxVQUFVLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRSwyQ0FBMkM7SUFDM0MsTUFBTSxlQUFlLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUN0RCxjQUFjLEVBQ2QsR0FBRyxDQUNKLENBQUM7SUFFRixJQUFJLGFBQWlDLENBQUM7SUFDdEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxVQUFVLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLG1CQUFtQixDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksRUFDRixVQUFVLENBQUMsSUFBSSxJQUFJLGFBQWEsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN0RSxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsbUVBQW1FO1lBQ25FLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUN6RSxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLFdBQVcsRUFBRTtnQkFDWCxPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQzdCO1lBQ0QsRUFBRSxFQUFFLFNBQVMsY0FBYywrQkFBK0I7WUFDMUQsMEVBQTBFO1lBQzFFLHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsd0RBQXdEO1lBQ3hELEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLGVBQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2lCQUN6QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxJQUFJLEVBQUUsZUFBTSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUI7b0JBQ2pELElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsK0JBQW1CO3dCQUN6QixJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0I7cUJBQ3pDO2lCQUNGO2dCQUNELEdBQUcsVUFBVTtnQkFDYjtvQkFDRSxJQUFJLEVBQUUsMkJBQTJCO29CQUNqQyxJQUFJLEVBQUUsNkNBQXFDO29CQUMzQyxJQUFJLEVBQUU7d0JBQ0osZ0JBQWdCLEVBQUUsZ0JBQWdCLFVBQVUsS0FBSzt3QkFDakQsbUJBQW1CLEVBQUUsZUFBZTt3QkFDcEMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxNQUFNO3FCQUNoQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsdUJBQXVCLFVBQVUsQ0FBQyxlQUFlLElBQUksT0FBTyxFQUFFO29CQUNuSCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQzVDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxlQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FDNUIsWUFBWSxFQUNaO1FBQ0UsK0hBQStIO1FBQy9ILEVBQUU7UUFDRiw0Q0FBNEM7UUFDNUMsNENBQTRDO1FBQzVDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FDaEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLEtBQUssQ0FBQyxDQUFDLFdBQVcsTUFBTSxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQyxVQUFVLElBQUksbUJBQW1CLE1BQU0sQ0FDcEY7UUFDRCxFQUFFO1FBQ0YsNkZBQTZGO0tBQzlGLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUNaLEVBQUUsS0FBSyxFQUFFLG9CQUFXLENBQUMsS0FBSyxFQUFFLENBQzdCLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyx3QkFBd0IsQ0FDL0IsT0FBb0IsRUFDcEIsV0FBb0I7SUFFcEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQVcsQ0FBQztJQUNuQyxJQUFJLEVBQUUsS0FBSywrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQ1QsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLGVBQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCO1lBQ3pDLElBQUksRUFBRSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksSUFBQSxrQkFBVyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDcEIsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7YUFBTSxJQUFJLEVBQUUsS0FBSywrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxQyxLQUFLLENBQUMsSUFBSSxDQUFDO2dCQUNULElBQUksRUFBRSxZQUFZO2dCQUNsQixJQUFJLEVBQUUsZUFBTSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUI7Z0JBQ3pDLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTthQUMvQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxlQUFlO1lBQ3JCLElBQUksRUFBRSwwQkFBa0I7WUFDeEIsSUFBSSxFQUFFO2dCQUNKLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUM7Z0JBQ25ELEtBQUssRUFBRSxJQUFBLG9CQUFhLEVBQUMsRUFBRSxDQUFDLElBQUksSUFBQSxrQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7YUFDMUQ7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQztRQUNULElBQUksRUFBRSxzQkFBc0I7UUFDNUIsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYztLQUNwQyxDQUFDLENBQUM7SUFDSCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsYUFBYSxDQUFDLEVBQXNCO0lBQzNDLElBQUksSUFBQSxvQkFBYSxFQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUEsa0JBQVcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxRQUFRLEVBQUUsRUFBRSxDQUFDO1FBQ1gsS0FBSywrQkFBa0IsQ0FBQyxHQUFHO1lBQ3pCLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxJQUFJO1lBQzFCLGtEQUFrRDtZQUNsRCxPQUFPLGlCQUFpQixDQUFDO1FBQzNCO1lBQ0UsT0FBTyxnQkFBZ0IsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBCVUlMRF9BUlRJRkFDVF9OQU1FIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvY29uc3RhbnRzJztcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWwnO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VNYW5hZ2VyLCBOb2RlUHJvamVjdCB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBpc1lhcm5CZXJyeSwgaXNZYXJuQ2xhc3NpYyB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdC91dGlsJztcbmltcG9ydCB7IERlcGxveW1lbnRFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL3Byb2plY3RzL2Nkay10cy9kZXBsb3ltZW50LWVudmlyb25tZW50JztcbmltcG9ydCB7IFJlYWRtZSwgUmVhZG1lT3JkZXIgfSBmcm9tICcuLi9yZWFkbWUnO1xuXG4vLyBwcm9qZW4gb25seSBwaW5zIHRoZXNlIGJ5IHRhZywgc28gdGhleSBhcmUgcGlubmVkIGJ5IFNIQSBoZXJlLiBTdGVwcyByZWZlcmVuY2Vcbi8vIHRoZW0gYnkgYG5hbWVAc2hhYCwgd2hpY2ggcHJvamVjdC5naXRodWIuYWN0aW9ucyByZXNvbHZlcyB3aGVuIHRoZSB3b3JrZmxvdyBpc1xuLy8gcmVuZGVyZWQsIHNvIGBwcm9qZWN0LmdpdGh1Yi5hY3Rpb25zLnNldCgnYWN0aW9ucy9zZXR1cC1ub2RlJywgLi4uKWAgb3ZlcnJpZGVzIHRoZW0uXG4vKiogYWN0aW9ucy9zZXR1cC1ub2RlIGF0IHY3LjAuMCAqL1xuZXhwb3J0IGNvbnN0IEFDVElPTlNfU0VUVVBfTk9ERSA9XG4gICdhY3Rpb25zL3NldHVwLW5vZGVAODIwNzYyNzg2MDI2NzQwYzc2ZjM2MDg1YjBlZmM0N2EzMWZlNTAyMCc7XG4vKiogYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFscyBhdCB2Ni4zLjAgKi9cbmV4cG9ydCBjb25zdCBBV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTID1cbiAgJ2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAZTEyNTM4MjRlNWMxMGZmOWRmNDY4NzRmODFlZDNlYzkyOWUxOWNmZCc7XG5cbmNvbnN0IERFRkFVTFRfUk9MRV9TRUNSRVQgPSAnQVdTX0RFUExPWU1FTlRfUk9MRV9BUk4nO1xuY29uc3QgUkVMRUFTRV9KT0JfSUQgPSAncmVsZWFzZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudHNPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVwbG95bWVudHM6IEFycmF5PERlcGxveW1lbnRFbnZpcm9ubWVudD47XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWxlYXNlIHdvcmtmbG93IGZvciB0aGUgZGVmYXVsdCBicmFuY2hcbiAgICpcbiAgICogQGRlZmF1bHQgJ3JlbGVhc2UnXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlV29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTm9kZS5qcyB2ZXJzaW9uIHRoYXQgdGhlIHJlbGVhc2Ugd29ya2Zsb3cgc2V0cyB1cFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBydW5uZXIncyB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuY29uc3QgY2FwaXRhbGlzZSA9ICh2YWx1ZTogc3RyaW5nKSA9PlxuICB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuXG4vKipcbiAqIEFkZHMgYSBqb2IgcGVyIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgdG8gdGhlIGRlZmF1bHQgYnJhbmNoJ3MgcmVsZWFzZVxuICogd29ya2Zsb3csIGVhY2ggb25lIGRlcGxveWluZyBhZnRlciB0aGUgcmVsZWFzZSBqb2IgYW5kIHRoZSBwcmV2aW91c1xuICogZW52aXJvbm1lbnQncyBqb2JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlcGxveW1lbnRzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgb3B0aW9uczogRGVwbG95bWVudHNPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgZGVwbG95bWVudHMgfSA9IG9wdGlvbnM7XG4gIGlmIChkZXBsb3ltZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLnJlbGVhc2VXb3JrZmxvd05hbWUgPz8gJ3JlbGVhc2UnO1xuICBjb25zdCB3b3JrZmxvdyA9IHByb2plY3QuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgaWYgKCFwcm9qZWN0LnJlbGVhc2UgfHwgIXdvcmtmbG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGRlcGxveW1lbnRzIG5lZWQgYSBcIiR7d29ya2Zsb3dOYW1lfVwiIEdpdEh1YiB3b3JrZmxvdywgc28gdGhlIHByb2plY3QgbXVzdCBoYXZlIHJlbGVhc2UgZW5hYmxlZCBhbmQgR2l0SHViIHdvcmtmbG93cyBlbmFibGVkYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHsgZW52aXJvbm1lbnQgfSBvZiBkZXBsb3ltZW50cykge1xuICAgIGlmICghL15bQS1aYS16MC05Xy1dKyQvLnRlc3QoZW52aXJvbm1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBtdXN0IGJlIG5vbi1lbXB0eSBhbmQgb25seSBjb250YWluIGxldHRlcnMsIGRpZ2l0cywgXCJfXCIgYW5kIFwiLVwiLCBhcyBpdCBpcyB1c2VkIGluIHRoZSBqb2IgaWRgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKGVudmlyb25tZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIHNlZW4uYWRkKGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8vIGRlcGxveSBqb2JzIHJ1biBvbiB0aGUgc2FtZSBydW5uZXJzIGFzIHRoZSByZWxlYXNlIGpvYlxuICBjb25zdCByZWxlYXNlSm9iID0gd29ya2Zsb3cuZ2V0Sm9iKFJFTEVBU0VfSk9CX0lEKSBhcyBnaXRodWIud29ya2Zsb3dzLkpvYjtcbiAgY29uc3Qgc2V0dXBTdGVwcyA9IHBhY2thZ2VNYW5hZ2VyU2V0dXBTdGVwcyhwcm9qZWN0LCBvcHRpb25zLm5vZGVWZXJzaW9uKTtcbiAgLy8gcm9sZSBzZXNzaW9uIG5hbWVzIG9ubHkgYWxsb3cgW1xcdys9LC5ALV1cbiAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gYCR7cHJvamVjdC5uYW1lfS1kZXBsb3lgLnJlcGxhY2UoXG4gICAgL1teXFx3Kz0sLkAtXS9nLFxuICAgICctJyxcbiAgKTtcblxuICBsZXQgcHJldmlvdXNKb2JJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGRlcGxveW1lbnQgb2YgZGVwbG95bWVudHMpIHtcbiAgICBjb25zdCBqb2JJZCA9IGBkZXBsb3lfJHtkZXBsb3ltZW50LmVudmlyb25tZW50fWA7XG4gICAgY29uc3Qgcm9sZVNlY3JldCA9IGRlcGxveW1lbnQucm9sZVNlY3JldCA/PyBERUZBVUxUX1JPTEVfU0VDUkVUO1xuICAgIGNvbnN0IGVudiA9IGRlcGxveW1lbnQuZW52ID8/IHt9O1xuICAgIHdvcmtmbG93LmFkZEpvYihqb2JJZCwge1xuICAgICAgbmFtZTpcbiAgICAgICAgZGVwbG95bWVudC5uYW1lID8/IGBEZXBsb3kgdG8gJHtjYXBpdGFsaXNlKGRlcGxveW1lbnQuZW52aXJvbm1lbnQpfWAsXG4gICAgICBlbnZpcm9ubWVudDogZGVwbG95bWVudC5lbnZpcm9ubWVudCxcbiAgICAgIC8vIHJlbGVhc2UgaXMgbGlzdGVkIGV4cGxpY2l0bHksIGFzIHRoZSBjb25kaXRpb24gcmVhZHMgaXRzIG91dHB1dHNcbiAgICAgIG5lZWRzOiBwcmV2aW91c0pvYklkID8gW1JFTEVBU0VfSk9CX0lELCBwcmV2aW91c0pvYklkXSA6IFtSRUxFQVNFX0pPQl9JRF0sXG4gICAgICBydW5zT246IHJlbGVhc2VKb2IucnVuc09uLFxuICAgICAgcnVuc09uR3JvdXA6IHJlbGVhc2VKb2IucnVuc09uR3JvdXAsXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIGlmOiBgbmVlZHMuJHtSRUxFQVNFX0pPQl9JRH0ub3V0cHV0cy50YWdfZXhpc3RzICE9ICd0cnVlJ2AsXG4gICAgICAvLyBUaGUgY29tbWl0IGlzIG5vdCByZWJ1aWx0OiB0aGUgcmVsZWFzZSBqb2IgYWxyZWFkeSBidWlsdCBhbmQgdGVzdGVkIGl0LFxuICAgICAgLy8gYW5kIGNkayBkZXBsb3kgYnVuZGxlcyB0aGUgTGFtYmRhcyBpdHNlbGYgdGhyb3VnaCB0aGUgYnVpbGQgaG9vayBpblxuICAgICAgLy8gY2RrLmpzb24uIFRoZSByZWxlYXNlJ3MgYXJ0aWZhY3QgKHdpdGggcmVsZWFzZXRhZy50eHQpIGlzIHN0aWxsXG4gICAgICAvLyBkb3dubG9hZGVkLCBzbyB0aGUgYXBwIGNhbiByZWFkIHRoZSByZWxlYXNlZCB2ZXJzaW9uLlxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuQUNUSU9OU19DSEVDS09VVCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBidWlsZCBhcnRpZmFjdHMnLFxuICAgICAgICAgIHVzZXM6IGdpdGh1Yi5BY3Rpb25SZWZzLkFDVElPTlNfRE9XTkxPQURfQVJUSUZBQ1QsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgbmFtZTogQlVJTERfQVJUSUZBQ1RfTkFNRSxcbiAgICAgICAgICAgIHBhdGg6IHByb2plY3QucmVsZWFzZS5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2V0dXBTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb25maWd1cmUgYXdzIGNyZWRlbnRpYWxzJyxcbiAgICAgICAgICB1c2VzOiBBV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IGBcXCR7eyBzZWNyZXRzLiR7cm9sZVNlY3JldH0gfX1gLFxuICAgICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogcm9sZVNlc3Npb25OYW1lLFxuICAgICAgICAgICAgJ2F3cy1yZWdpb24nOiBkZXBsb3ltZW50LnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlcGxveScsXG4gICAgICAgICAgcnVuOiBgJHtkZXBsb3lDb21tYW5kKHByb2plY3QucGFja2FnZS5wYWNrYWdlTWFuYWdlcil9IC0tcmVxdWlyZS1hcHByb3ZhbCAke2RlcGxveW1lbnQucmVxdWlyZUFwcHJvdmFsID8/ICduZXZlcid9YCxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZW52KS5sZW5ndGggPiAwICYmIHsgZW52IH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBwcmV2aW91c0pvYklkID0gam9iSWQ7XG4gIH1cblxuICBSZWFkbWUub2YocHJvamVjdCk/LmFkZFNlY3Rpb24oXG4gICAgJ0RlcGxveW1lbnQnLFxuICAgIFtcbiAgICAgICdBZnRlciBlYWNoIHJlbGVhc2UsIHRoZSByZWxlYXNlIHdvcmtmbG93IGRlcGxveXMgdG8gdGhlc2UgR2l0SHViIGVudmlyb25tZW50cyBpbiBvcmRlciwgZWFjaCBhZnRlciB0aGUgcHJldmlvdXMgb25lIHN1Y2NlZWRzOicsXG4gICAgICAnJyxcbiAgICAgICd8IEVudmlyb25tZW50IHwgUmVnaW9uIHwgUm9sZSBBUk4gc2VjcmV0IHwnLFxuICAgICAgJ3wgLS0tLS0tLS0tLS0gfCAtLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfCcsXG4gICAgICAuLi5kZXBsb3ltZW50cy5tYXAoXG4gICAgICAgIChkKSA9PlxuICAgICAgICAgIGB8ICR7ZC5lbnZpcm9ubWVudH0gfCAke2QucmVnaW9ufSB8IFxcYCR7ZC5yb2xlU2VjcmV0ID8/IERFRkFVTFRfUk9MRV9TRUNSRVR9XFxgIHxgLFxuICAgICAgKSxcbiAgICAgICcnLFxuICAgICAgJ0VhY2ggZW52aXJvbm1lbnQgbmVlZHMgaXRzIHJvbGUgQVJOIHNlY3JldCwgZm9yIGEgcm9sZSB0aGF0IHRydXN0cyBHaXRIdWJcXCdzIE9JREMgcHJvdmlkZXIuJyxcbiAgICBdLmpvaW4oJ1xcbicpLFxuICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLlVTQUdFIH0sXG4gICk7XG59XG5cbi8qKlxuICogU3RlcHMgdGhhdCBpbnN0YWxsIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLCBtaXJyb3JpbmcgcHJvamVuJ3Mgb3duXG4gKiB3b3JrZmxvdyBzZXR1cCBidXQgd2l0aCBzZXR1cC1ub2RlIHBpbm5lZCBieSBTSEFcbiAqL1xuZnVuY3Rpb24gcGFja2FnZU1hbmFnZXJTZXR1cFN0ZXBzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgbm9kZVZlcnNpb24/OiBzdHJpbmcsXG4pOiBBcnJheTxKb2JTdGVwPiB7XG4gIGNvbnN0IHBtID0gcHJvamVjdC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTxKb2JTdGVwPigpO1xuICBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBidW4nLFxuICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuT1ZFTl9TSF9TRVRVUF9CVU4sXG4gICAgICB3aXRoOiB7ICdidW4tdmVyc2lvbic6IHByb2plY3QucGFja2FnZS5idW5WZXJzaW9uIH0sXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzWWFybkJlcnJ5KHBtKSkge1xuICAgICAgc3RlcHMucHVzaCh7IG5hbWU6ICdFbmFibGUgY29yZXBhY2snLCBydW46ICdjb3JlcGFjayBlbmFibGUnIH0pO1xuICAgIH0gZWxzZSBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ1NldHVwIHBucG0nLFxuICAgICAgICB1c2VzOiBnaXRodWIuQWN0aW9uUmVmcy5QTlBNX0FDVElPTl9TRVRVUCxcbiAgICAgICAgd2l0aDogeyB2ZXJzaW9uOiBwcm9qZWN0LnBhY2thZ2UucG5wbVZlcnNpb24gfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgIHVzZXM6IEFDVElPTlNfU0VUVVBfTk9ERSxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uKG5vZGVWZXJzaW9uICYmIHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uIH0pLFxuICAgICAgICBjYWNoZTogaXNZYXJuQ2xhc3NpYyhwbSkgfHwgaXNZYXJuQmVycnkocG0pID8gJ3lhcm4nIDogcG0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHN0ZXBzLnB1c2goe1xuICAgIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgcnVuOiBwcm9qZWN0LnBhY2thZ2UuaW5zdGFsbENvbW1hbmQsXG4gIH0pO1xuICByZXR1cm4gc3RlcHM7XG59XG5cbi8qKlxuICogUnVucyB0aGUgcHJvamVjdCdzIGRlcGxveSB0YXNrLCBwYXNzaW5nIG9uIHRoZSBhcmd1bWVudHMgdGhhdCBmb2xsb3dcbiAqL1xuZnVuY3Rpb24gZGVwbG95Q29tbWFuZChwbTogTm9kZVBhY2thZ2VNYW5hZ2VyKSB7XG4gIGlmIChpc1lhcm5DbGFzc2ljKHBtKSB8fCBpc1lhcm5CZXJyeShwbSkpIHtcbiAgICByZXR1cm4gJ3lhcm4gZGVwbG95JztcbiAgfVxuICBzd2l0Y2ggKHBtKSB7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgcmV0dXJuICducG0gcnVuIGRlcGxveSAtLSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgIC8vIGBwbnBtIGRlcGxveWAgaXMgYSBwbnBtIGNvbW1hbmQsIG5vdCB0aGUgc2NyaXB0XG4gICAgICByZXR1cm4gJ3BucG0gcnVuIGRlcGxveSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnYnVuIHJ1biBkZXBsb3knO1xuICB9XG59XG4iXX0=
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9naXRodWIvZGVwbG95bWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkRBLHdDQStHQztBQTVLRCxtQ0FBZ0M7QUFDaEMsMkRBQWtFO0FBQ2xFLHVFQUEyRTtBQUMzRSxzREFBd0U7QUFDeEUscURBQXdFO0FBRXhFLHNDQUFnRDtBQUVoRCxpRkFBaUY7QUFDakYsaUZBQWlGO0FBQ2pGLHVGQUF1RjtBQUN2RixtQ0FBbUM7QUFDdEIsUUFBQSxrQkFBa0IsR0FDN0IsNkRBQTZELENBQUM7QUFDaEUsc0RBQXNEO0FBQ3pDLFFBQUEscUNBQXFDLEdBQ2hELGdGQUFnRixDQUFDO0FBRW5GLE1BQU0sbUJBQW1CLEdBQUcseUJBQXlCLENBQUM7QUFDdEQsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDO0FBa0JqQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQ25DLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRCxNQUFNLGdCQUFnQixHQUFHLG9EQUFvRCxDQUFDO0FBRTlFOzs7R0FHRztBQUNILFNBQVMsaUJBQWlCLENBQUMsVUFBaUM7SUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUN4RSxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hELEtBQUssTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7WUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ3RCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUM1QixPQUFvQixFQUNwQixPQUEyQjtJQUUzQixNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ2hDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxTQUFTLENBQUM7SUFDOUQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxNQUFNLElBQUksS0FBSyxDQUNiLHVCQUF1QixZQUFZLDBGQUEwRixDQUM5SCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDL0IsS0FBSyxNQUFNLEVBQUUsV0FBVyxFQUFFLElBQUksV0FBVyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkJBQTJCLFdBQVcsZ0dBQWdHLENBQ3ZJLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsV0FBVyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQXlCLENBQUM7SUFDM0UsTUFBTSxVQUFVLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxRSwyQ0FBMkM7SUFDM0MsTUFBTSxlQUFlLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUN0RCxjQUFjLEVBQ2QsR0FBRyxDQUNKLENBQUM7SUFFRixJQUFJLGFBQWlDLENBQUM7SUFDdEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNyQyxNQUFNLEtBQUssR0FBRyxVQUFVLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLG1CQUFtQixDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksRUFDRixVQUFVLENBQUMsSUFBSSxJQUFJLGFBQWEsVUFBVSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN0RSxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsbUVBQW1FO1lBQ25FLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUN6RSxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLFdBQVcsRUFBRTtnQkFDWCxPQUFPLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQzdCO1lBQ0QsRUFBRSxFQUFFLFNBQVMsY0FBYywrQkFBK0I7WUFDMUQsMEVBQTBFO1lBQzFFLHNFQUFzRTtZQUN0RSxrRUFBa0U7WUFDbEUsd0RBQXdEO1lBQ3hELEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLGVBQU0sQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2lCQUN6QztnQkFDRDtvQkFDRSxJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxJQUFJLEVBQUUsZUFBTSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUI7b0JBQ2pELElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsK0JBQW1CO3dCQUN6QixJQUFJLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0I7cUJBQ3pDO2lCQUNGO2dCQUNELEdBQUcsVUFBVTtnQkFDYjtvQkFDRSxJQUFJLEVBQUUsMkJBQTJCO29CQUNqQyxJQUFJLEVBQUUsNkNBQXFDO29CQUMzQyxJQUFJLEVBQUU7d0JBQ0osZ0JBQWdCLEVBQUUsZ0JBQWdCLFVBQVUsS0FBSzt3QkFDakQsbUJBQW1CLEVBQUUsZUFBZTt3QkFDcEMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxNQUFNO3FCQUNoQztpQkFDRjtnQkFDRDtvQkFDRSxJQUFJLEVBQUUsUUFBUTtvQkFDZCxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsdUJBQXVCLFVBQVUsQ0FBQyxlQUFlLElBQUksT0FBTyxFQUFFO29CQUNuSCxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7aUJBQzVDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxlQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFVBQVUsQ0FDNUIsWUFBWSxFQUNaO1FBQ0UsK0hBQStIO1FBQy9ILEVBQUU7UUFDRixvQ0FBb0M7UUFDcEMsb0NBQW9DO1FBQ3BDLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FDaEIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLEtBQUssQ0FBQyxDQUFDLFdBQVcsTUFBTSxDQUFDLENBQUMsTUFBTSxNQUFNLGlCQUFpQixDQUFDLENBQUMsQ0FBQzthQUN2RCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7YUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ3BCO1FBQ0QsRUFBRTtRQUNGLGtIQUFrSDtLQUNuSCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDWixFQUFFLEtBQUssRUFBRSxvQkFBVyxDQUFDLEtBQUssRUFBRSxDQUM3QixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsd0JBQXdCLENBQy9CLE9BQW9CLEVBQ3BCLFdBQW9CO0lBRXBCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFXLENBQUM7SUFDbkMsSUFBSSxFQUFFLEtBQUssK0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbEMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksRUFBRSxXQUFXO1lBQ2pCLElBQUksRUFBRSxlQUFNLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtZQUN6QyxJQUFJLEVBQUUsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7U0FDcEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLElBQUEsa0JBQVcsRUFBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BCLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUNsRSxDQUFDO2FBQU0sSUFBSSxFQUFFLEtBQUssK0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsS0FBSyxDQUFDLElBQUksQ0FBQztnQkFDVCxJQUFJLEVBQUUsWUFBWTtnQkFDbEIsSUFBSSxFQUFFLGVBQU0sQ0FBQyxVQUFVLENBQUMsaUJBQWlCO2dCQUN6QyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7YUFDL0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDVCxJQUFJLEVBQUUsZUFBZTtZQUNyQixJQUFJLEVBQUUsMEJBQWtCO1lBQ3hCLElBQUksRUFBRTtnQkFDSixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLEVBQUUsSUFBQSxvQkFBYSxFQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUEsa0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQzFEO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELEtBQUssQ0FBQyxJQUFJLENBQUM7UUFDVCxJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWM7S0FDcEMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxFQUFzQjtJQUMzQyxJQUFJLElBQUEsb0JBQWEsRUFBQyxFQUFFLENBQUMsSUFBSSxJQUFBLGtCQUFXLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGFBQWEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUNYLEtBQUssK0JBQWtCLENBQUMsR0FBRztZQUN6QixPQUFPLG1CQUFtQixDQUFDO1FBQzdCLEtBQUssK0JBQWtCLENBQUMsSUFBSTtZQUMxQixrREFBa0Q7WUFDbEQsT0FBTyxpQkFBaUIsQ0FBQztRQUMzQjtZQUNFLE9BQU8sZ0JBQWdCLENBQUM7SUFDNUIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnaXRodWIgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQlVJTERfQVJUSUZBQ1RfTkFNRSB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uLCBKb2JTdGVwIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciwgTm9kZVByb2plY3QgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQnO1xuaW1wb3J0IHsgaXNZYXJuQmVycnksIGlzWWFybkNsYXNzaWMgfSBmcm9tICdwcm9qZW4vbGliL2phdmFzY3JpcHQvdXRpbCc7XG5pbXBvcnQgeyBEZXBsb3ltZW50RW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi9wcm9qZWN0cy9jZGstdHMvZGVwbG95bWVudC1lbnZpcm9ubWVudCc7XG5pbXBvcnQgeyBSZWFkbWUsIFJlYWRtZU9yZGVyIH0gZnJvbSAnLi4vcmVhZG1lJztcblxuLy8gcHJvamVuIG9ubHkgcGlucyB0aGVzZSBieSB0YWcsIHNvIHRoZXkgYXJlIHBpbm5lZCBieSBTSEEgaGVyZS4gU3RlcHMgcmVmZXJlbmNlXG4vLyB0aGVtIGJ5IGBuYW1lQHNoYWAsIHdoaWNoIHByb2plY3QuZ2l0aHViLmFjdGlvbnMgcmVzb2x2ZXMgd2hlbiB0aGUgd29ya2Zsb3cgaXNcbi8vIHJlbmRlcmVkLCBzbyBgcHJvamVjdC5naXRodWIuYWN0aW9ucy5zZXQoJ2FjdGlvbnMvc2V0dXAtbm9kZScsIC4uLilgIG92ZXJyaWRlcyB0aGVtLlxuLyoqIGFjdGlvbnMvc2V0dXAtbm9kZSBhdCB2Ny4wLjAgKi9cbmV4cG9ydCBjb25zdCBBQ1RJT05TX1NFVFVQX05PREUgPVxuICAnYWN0aW9ucy9zZXR1cC1ub2RlQDgyMDc2Mjc4NjAyNjc0MGM3NmYzNjA4NWIwZWZjNDdhMzFmZTUwMjAnO1xuLyoqIGF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHMgYXQgdjYuMy4wICovXG5leHBvcnQgY29uc3QgQVdTX0FDVElPTlNfQ09ORklHVVJFX0FXU19DUkVERU5USUFMUyA9XG4gICdhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQGUxMjUzODI0ZTVjMTBmZjlkZjQ2ODc0ZjgxZWQzZWM5MjllMTljZmQnO1xuXG5jb25zdCBERUZBVUxUX1JPTEVfU0VDUkVUID0gJ0FXU19ERVBMT1lNRU5UX1JPTEVfQVJOJztcbmNvbnN0IFJFTEVBU0VfSk9CX0lEID0gJ3JlbGVhc2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveW1lbnRzT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGRlcGxveW1lbnRzOiBBcnJheTxEZXBsb3ltZW50RW52aXJvbm1lbnQ+O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcmVsZWFzZSB3b3JrZmxvdyBmb3IgdGhlIGRlZmF1bHQgYnJhbmNoXG4gICAqXG4gICAqIEBkZWZhdWx0ICdyZWxlYXNlJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZVdvcmtmbG93TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE5vZGUuanMgdmVyc2lvbiB0aGF0IHRoZSByZWxlYXNlIHdvcmtmbG93IHNldHMgdXBcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgcnVubmVyJ3MgdmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZVZlcnNpb24/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGNhcGl0YWxpc2UgPSAodmFsdWU6IHN0cmluZykgPT5cbiAgdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcblxuY29uc3QgU0VDUkVUX1JFRkVSRU5DRSA9IC9cXCRcXHtcXHtcXHMqc2VjcmV0c1xcLihbQS1aYS16X11bQS1aYS16MC05X10qKVxccypcXH1cXH0vZztcblxuLyoqXG4gKiBUaGUgc2VjcmV0cyBhIGRlcGxveW1lbnQgbmVlZHM6IGl0cyByb2xlIEFSTiBzZWNyZXQsIHRoZW4gdGhvc2UgaXRzIGVudlxuICogdmFsdWVzIHJlZmVyZW5jZSwgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBhbmQgd2l0aG91dCBkdXBsaWNhdGVzXG4gKi9cbmZ1bmN0aW9uIGRlcGxveW1lbnRTZWNyZXRzKGRlcGxveW1lbnQ6IERlcGxveW1lbnRFbnZpcm9ubWVudCk6IEFycmF5PHN0cmluZz4ge1xuICBjb25zdCBzZWNyZXRzID0gbmV3IFNldChbZGVwbG95bWVudC5yb2xlU2VjcmV0ID8/IERFRkFVTFRfUk9MRV9TRUNSRVRdKTtcbiAgZm9yIChjb25zdCB2YWx1ZSBvZiBPYmplY3QudmFsdWVzKGRlcGxveW1lbnQuZW52ID8/IHt9KSkge1xuICAgIGZvciAoY29uc3QgWywgbmFtZV0gb2YgdmFsdWUubWF0Y2hBbGwoU0VDUkVUX1JFRkVSRU5DRSkpIHtcbiAgICAgIHNlY3JldHMuYWRkKG5hbWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gWy4uLnNlY3JldHNdO1xufVxuXG4vKipcbiAqIEFkZHMgYSBqb2IgcGVyIGRlcGxveW1lbnQgZW52aXJvbm1lbnQgdG8gdGhlIGRlZmF1bHQgYnJhbmNoJ3MgcmVsZWFzZVxuICogd29ya2Zsb3csIGVhY2ggb25lIGRlcGxveWluZyBhZnRlciB0aGUgcmVsZWFzZSBqb2IgYW5kIHRoZSBwcmV2aW91c1xuICogZW52aXJvbm1lbnQncyBqb2JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZERlcGxveW1lbnRzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgb3B0aW9uczogRGVwbG95bWVudHNPcHRpb25zLFxuKSB7XG4gIGNvbnN0IHsgZGVwbG95bWVudHMgfSA9IG9wdGlvbnM7XG4gIGlmIChkZXBsb3ltZW50cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCB3b3JrZmxvd05hbWUgPSBvcHRpb25zLnJlbGVhc2VXb3JrZmxvd05hbWUgPz8gJ3JlbGVhc2UnO1xuICBjb25zdCB3b3JrZmxvdyA9IHByb2plY3QuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgaWYgKCFwcm9qZWN0LnJlbGVhc2UgfHwgIXdvcmtmbG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYGRlcGxveW1lbnRzIG5lZWQgYSBcIiR7d29ya2Zsb3dOYW1lfVwiIEdpdEh1YiB3b3JrZmxvdywgc28gdGhlIHByb2plY3QgbXVzdCBoYXZlIHJlbGVhc2UgZW5hYmxlZCBhbmQgR2l0SHViIHdvcmtmbG93cyBlbmFibGVkYCxcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBmb3IgKGNvbnN0IHsgZW52aXJvbm1lbnQgfSBvZiBkZXBsb3ltZW50cykge1xuICAgIGlmICghL15bQS1aYS16MC05Xy1dKyQvLnRlc3QoZW52aXJvbm1lbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBtdXN0IGJlIG5vbi1lbXB0eSBhbmQgb25seSBjb250YWluIGxldHRlcnMsIGRpZ2l0cywgXCJfXCIgYW5kIFwiLVwiLCBhcyBpdCBpcyB1c2VkIGluIHRoZSBqb2IgaWRgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHNlZW4uaGFzKGVudmlyb25tZW50KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZXBsb3ltZW50IGVudmlyb25tZW50IFwiJHtlbnZpcm9ubWVudH1cIiBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIHNlZW4uYWRkKGVudmlyb25tZW50KTtcbiAgfVxuXG4gIC8vIGRlcGxveSBqb2JzIHJ1biBvbiB0aGUgc2FtZSBydW5uZXJzIGFzIHRoZSByZWxlYXNlIGpvYlxuICBjb25zdCByZWxlYXNlSm9iID0gd29ya2Zsb3cuZ2V0Sm9iKFJFTEVBU0VfSk9CX0lEKSBhcyBnaXRodWIud29ya2Zsb3dzLkpvYjtcbiAgY29uc3Qgc2V0dXBTdGVwcyA9IHBhY2thZ2VNYW5hZ2VyU2V0dXBTdGVwcyhwcm9qZWN0LCBvcHRpb25zLm5vZGVWZXJzaW9uKTtcbiAgLy8gcm9sZSBzZXNzaW9uIG5hbWVzIG9ubHkgYWxsb3cgW1xcdys9LC5ALV1cbiAgY29uc3Qgcm9sZVNlc3Npb25OYW1lID0gYCR7cHJvamVjdC5uYW1lfS1kZXBsb3lgLnJlcGxhY2UoXG4gICAgL1teXFx3Kz0sLkAtXS9nLFxuICAgICctJyxcbiAgKTtcblxuICBsZXQgcHJldmlvdXNKb2JJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGRlcGxveW1lbnQgb2YgZGVwbG95bWVudHMpIHtcbiAgICBjb25zdCBqb2JJZCA9IGBkZXBsb3lfJHtkZXBsb3ltZW50LmVudmlyb25tZW50fWA7XG4gICAgY29uc3Qgcm9sZVNlY3JldCA9IGRlcGxveW1lbnQucm9sZVNlY3JldCA/PyBERUZBVUxUX1JPTEVfU0VDUkVUO1xuICAgIGNvbnN0IGVudiA9IGRlcGxveW1lbnQuZW52ID8/IHt9O1xuICAgIHdvcmtmbG93LmFkZEpvYihqb2JJZCwge1xuICAgICAgbmFtZTpcbiAgICAgICAgZGVwbG95bWVudC5uYW1lID8/IGBEZXBsb3kgdG8gJHtjYXBpdGFsaXNlKGRlcGxveW1lbnQuZW52aXJvbm1lbnQpfWAsXG4gICAgICBlbnZpcm9ubWVudDogZGVwbG95bWVudC5lbnZpcm9ubWVudCxcbiAgICAgIC8vIHJlbGVhc2UgaXMgbGlzdGVkIGV4cGxpY2l0bHksIGFzIHRoZSBjb25kaXRpb24gcmVhZHMgaXRzIG91dHB1dHNcbiAgICAgIG5lZWRzOiBwcmV2aW91c0pvYklkID8gW1JFTEVBU0VfSk9CX0lELCBwcmV2aW91c0pvYklkXSA6IFtSRUxFQVNFX0pPQl9JRF0sXG4gICAgICBydW5zT246IHJlbGVhc2VKb2IucnVuc09uLFxuICAgICAgcnVuc09uR3JvdXA6IHJlbGVhc2VKb2IucnVuc09uR3JvdXAsXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIGlmOiBgbmVlZHMuJHtSRUxFQVNFX0pPQl9JRH0ub3V0cHV0cy50YWdfZXhpc3RzICE9ICd0cnVlJ2AsXG4gICAgICAvLyBUaGUgY29tbWl0IGlzIG5vdCByZWJ1aWx0OiB0aGUgcmVsZWFzZSBqb2IgYWxyZWFkeSBidWlsdCBhbmQgdGVzdGVkIGl0LFxuICAgICAgLy8gYW5kIGNkayBkZXBsb3kgYnVuZGxlcyB0aGUgTGFtYmRhcyBpdHNlbGYgdGhyb3VnaCB0aGUgYnVpbGQgaG9vayBpblxuICAgICAgLy8gY2RrLmpzb24uIFRoZSByZWxlYXNlJ3MgYXJ0aWZhY3QgKHdpdGggcmVsZWFzZXRhZy50eHQpIGlzIHN0aWxsXG4gICAgICAvLyBkb3dubG9hZGVkLCBzbyB0aGUgYXBwIGNhbiByZWFkIHRoZSByZWxlYXNlZCB2ZXJzaW9uLlxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuQUNUSU9OU19DSEVDS09VVCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdEb3dubG9hZCBidWlsZCBhcnRpZmFjdHMnLFxuICAgICAgICAgIHVzZXM6IGdpdGh1Yi5BY3Rpb25SZWZzLkFDVElPTlNfRE9XTkxPQURfQVJUSUZBQ1QsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgbmFtZTogQlVJTERfQVJUSUZBQ1RfTkFNRSxcbiAgICAgICAgICAgIHBhdGg6IHByb2plY3QucmVsZWFzZS5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2V0dXBTdGVwcyxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdjb25maWd1cmUgYXdzIGNyZWRlbnRpYWxzJyxcbiAgICAgICAgICB1c2VzOiBBV1NfQUNUSU9OU19DT05GSUdVUkVfQVdTX0NSRURFTlRJQUxTLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IGBcXCR7eyBzZWNyZXRzLiR7cm9sZVNlY3JldH0gfX1gLFxuICAgICAgICAgICAgJ3JvbGUtc2Vzc2lvbi1uYW1lJzogcm9sZVNlc3Npb25OYW1lLFxuICAgICAgICAgICAgJ2F3cy1yZWdpb24nOiBkZXBsb3ltZW50LnJlZ2lvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2RlcGxveScsXG4gICAgICAgICAgcnVuOiBgJHtkZXBsb3lDb21tYW5kKHByb2plY3QucGFja2FnZS5wYWNrYWdlTWFuYWdlcil9IC0tcmVxdWlyZS1hcHByb3ZhbCAke2RlcGxveW1lbnQucmVxdWlyZUFwcHJvdmFsID8/ICduZXZlcid9YCxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZW52KS5sZW5ndGggPiAwICYmIHsgZW52IH0pLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICBwcmV2aW91c0pvYklkID0gam9iSWQ7XG4gIH1cblxuICBSZWFkbWUub2YocHJvamVjdCk/LmFkZFNlY3Rpb24oXG4gICAgJ0RlcGxveW1lbnQnLFxuICAgIFtcbiAgICAgICdBZnRlciBlYWNoIHJlbGVhc2UsIHRoZSByZWxlYXNlIHdvcmtmbG93IGRlcGxveXMgdG8gdGhlc2UgR2l0SHViIGVudmlyb25tZW50cyBpbiBvcmRlciwgZWFjaCBhZnRlciB0aGUgcHJldmlvdXMgb25lIHN1Y2NlZWRzOicsXG4gICAgICAnJyxcbiAgICAgICd8IEVudmlyb25tZW50IHwgUmVnaW9uIHwgU2VjcmV0cyB8JyxcbiAgICAgICd8IC0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLSB8JyxcbiAgICAgIC4uLmRlcGxveW1lbnRzLm1hcChcbiAgICAgICAgKGQpID0+XG4gICAgICAgICAgYHwgJHtkLmVudmlyb25tZW50fSB8ICR7ZC5yZWdpb259IHwgJHtkZXBsb3ltZW50U2VjcmV0cyhkKVxuICAgICAgICAgICAgLm1hcCgobmFtZSkgPT4gYFxcYCR7bmFtZX1cXGBgKVxuICAgICAgICAgICAgLmpvaW4oJywgJyl9IHxgLFxuICAgICAgKSxcbiAgICAgICcnLFxuICAgICAgJ0VhY2ggZW52aXJvbm1lbnQgbmVlZHMgdGhlc2Ugc2VjcmV0cyBzZXQsIHRoZSBmaXJzdCBiZWluZyB0aGUgQVJOIG9mIGEgcm9sZSB0aGF0IHRydXN0cyBHaXRIdWJcXCdzIE9JREMgcHJvdmlkZXIuJyxcbiAgICBdLmpvaW4oJ1xcbicpLFxuICAgIHsgb3JkZXI6IFJlYWRtZU9yZGVyLlVTQUdFIH0sXG4gICk7XG59XG5cbi8qKlxuICogU3RlcHMgdGhhdCBpbnN0YWxsIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzLCBtaXJyb3JpbmcgcHJvamVuJ3Mgb3duXG4gKiB3b3JrZmxvdyBzZXR1cCBidXQgd2l0aCBzZXR1cC1ub2RlIHBpbm5lZCBieSBTSEFcbiAqL1xuZnVuY3Rpb24gcGFja2FnZU1hbmFnZXJTZXR1cFN0ZXBzKFxuICBwcm9qZWN0OiBOb2RlUHJvamVjdCxcbiAgbm9kZVZlcnNpb24/OiBzdHJpbmcsXG4pOiBBcnJheTxKb2JTdGVwPiB7XG4gIGNvbnN0IHBtID0gcHJvamVjdC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTxKb2JTdGVwPigpO1xuICBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBidW4nLFxuICAgICAgdXNlczogZ2l0aHViLkFjdGlvblJlZnMuT1ZFTl9TSF9TRVRVUF9CVU4sXG4gICAgICB3aXRoOiB7ICdidW4tdmVyc2lvbic6IHByb2plY3QucGFja2FnZS5idW5WZXJzaW9uIH0sXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzWWFybkJlcnJ5KHBtKSkge1xuICAgICAgc3RlcHMucHVzaCh7IG5hbWU6ICdFbmFibGUgY29yZXBhY2snLCBydW46ICdjb3JlcGFjayBlbmFibGUnIH0pO1xuICAgIH0gZWxzZSBpZiAocG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ1NldHVwIHBucG0nLFxuICAgICAgICB1c2VzOiBnaXRodWIuQWN0aW9uUmVmcy5QTlBNX0FDVElPTl9TRVRVUCxcbiAgICAgICAgd2l0aDogeyB2ZXJzaW9uOiBwcm9qZWN0LnBhY2thZ2UucG5wbVZlcnNpb24gfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZXR1cCBOb2RlLmpzJyxcbiAgICAgIHVzZXM6IEFDVElPTlNfU0VUVVBfTk9ERSxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgLi4uKG5vZGVWZXJzaW9uICYmIHsgJ25vZGUtdmVyc2lvbic6IG5vZGVWZXJzaW9uIH0pLFxuICAgICAgICBjYWNoZTogaXNZYXJuQ2xhc3NpYyhwbSkgfHwgaXNZYXJuQmVycnkocG0pID8gJ3lhcm4nIDogcG0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIHN0ZXBzLnB1c2goe1xuICAgIG5hbWU6ICdJbnN0YWxsIGRlcGVuZGVuY2llcycsXG4gICAgcnVuOiBwcm9qZWN0LnBhY2thZ2UuaW5zdGFsbENvbW1hbmQsXG4gIH0pO1xuICByZXR1cm4gc3RlcHM7XG59XG5cbi8qKlxuICogUnVucyB0aGUgcHJvamVjdCdzIGRlcGxveSB0YXNrLCBwYXNzaW5nIG9uIHRoZSBhcmd1bWVudHMgdGhhdCBmb2xsb3dcbiAqL1xuZnVuY3Rpb24gZGVwbG95Q29tbWFuZChwbTogTm9kZVBhY2thZ2VNYW5hZ2VyKSB7XG4gIGlmIChpc1lhcm5DbGFzc2ljKHBtKSB8fCBpc1lhcm5CZXJyeShwbSkpIHtcbiAgICByZXR1cm4gJ3lhcm4gZGVwbG95JztcbiAgfVxuICBzd2l0Y2ggKHBtKSB7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgcmV0dXJuICducG0gcnVuIGRlcGxveSAtLSc7XG4gICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgIC8vIGBwbnBtIGRlcGxveWAgaXMgYSBwbnBtIGNvbW1hbmQsIG5vdCB0aGUgc2NyaXB0XG4gICAgICByZXR1cm4gJ3BucG0gcnVuIGRlcGxveSc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnYnVuIHJ1biBkZXBsb3knO1xuICB9XG59XG4iXX0=
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Section = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  class Section {
6
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "5.1.1" };
6
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Section", version: "5.2.0" };
7
7
  options;
8
8
  constructor(options) {
9
9
  this.options = options;
@@ -9,7 +9,7 @@ const section_1 = require("./elements/section");
9
9
  * in between
10
10
  */
11
11
  class ReadmeOrder {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.ReadmeOrder", version: "5.1.1" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.ReadmeOrder", version: "5.2.0" };
13
13
  /**
14
14
  * Sections a reader needs first, such as getting started
15
15
  */
@@ -30,7 +30,7 @@ class ReadmeOrder {
30
30
  }
31
31
  exports.ReadmeOrder = ReadmeOrder;
32
32
  class Readme extends projen_1.FileBase {
33
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "5.1.1" };
33
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.Readme", version: "5.2.0" };
34
34
  /**
35
35
  * The README of a project, if it has one
36
36
  */
@@ -61,7 +61,7 @@ function getOptions(options) {
61
61
  * @pjid cdk-typescript-app
62
62
  */
63
63
  class CdkTypeScriptApp extends awscdk_1.AwsCdkTypeScriptApp {
64
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.CdkTypeScriptApp", version: "5.1.1" };
64
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.CdkTypeScriptApp", version: "5.2.0" };
65
65
  readme;
66
66
  constructor(options) {
67
67
  const mergedOptions = getOptions(options);
@@ -48,7 +48,7 @@ function getOptions(options) {
48
48
  * @pjid jsii-project
49
49
  */
50
50
  class JsiiProject extends projen_1.cdk.JsiiProject {
51
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.JsiiProject", version: "5.1.1" };
51
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.JsiiProject", version: "5.2.0" };
52
52
  readme;
53
53
  constructor(options) {
54
54
  const mergedOptions = getOptions(options);
@@ -47,7 +47,7 @@ function getOptions(options) {
47
47
  * @pjid npm-package
48
48
  */
49
49
  class NpmPackage extends projen_1.typescript.TypeScriptProject {
50
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.NpmPackage", version: "5.1.1" };
50
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.NpmPackage", version: "5.2.0" };
51
51
  readme;
52
52
  constructor(options) {
53
53
  const mergedOptions = getOptions(options);
@@ -43,7 +43,7 @@ function getOptions(options) {
43
43
  * @pjid python-package
44
44
  */
45
45
  class PythonPackage extends python_1.PythonProject {
46
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.PythonPackage", version: "5.1.1" };
46
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-modules.PythonPackage", version: "5.2.0" };
47
47
  autoMerge;
48
48
  readme;
49
49
  constructor(options) {
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "publishConfig": {
84
84
  "access": "public"
85
85
  },
86
- "version": "5.1.1",
86
+ "version": "5.2.0",
87
87
  "jest": {
88
88
  "coverageProvider": "v8",
89
89
  "testMatch": [