deployable-awscdk-app-ts 0.1.847 → 0.1.848

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
@@ -136,7 +136,7 @@
136
136
  "kind": "interface",
137
137
  "locationInModule": {
138
138
  "filename": "src/types.ts",
139
- "line": 131
139
+ "line": 146
140
140
  },
141
141
  "name": "AWSCredentials",
142
142
  "properties": [
@@ -150,7 +150,7 @@
150
150
  "immutable": true,
151
151
  "locationInModule": {
152
152
  "filename": "src/types.ts",
153
- "line": 159
153
+ "line": 174
154
154
  },
155
155
  "name": "region",
156
156
  "type": {
@@ -167,7 +167,7 @@
167
167
  "immutable": true,
168
168
  "locationInModule": {
169
169
  "filename": "src/types.ts",
170
- "line": 136
170
+ "line": 151
171
171
  },
172
172
  "name": "accessKeyIdSecretName",
173
173
  "optional": true,
@@ -185,7 +185,7 @@
185
185
  "immutable": true,
186
186
  "locationInModule": {
187
187
  "filename": "src/types.ts",
188
- "line": 153
188
+ "line": 168
189
189
  },
190
190
  "name": "assumeRoleDurationSeconds",
191
191
  "optional": true,
@@ -202,7 +202,7 @@
202
202
  "immutable": true,
203
203
  "locationInModule": {
204
204
  "filename": "src/types.ts",
205
- "line": 147
205
+ "line": 162
206
206
  },
207
207
  "name": "roleToAssume",
208
208
  "optional": true,
@@ -220,7 +220,7 @@
220
220
  "immutable": true,
221
221
  "locationInModule": {
222
222
  "filename": "src/types.ts",
223
- "line": 142
223
+ "line": 157
224
224
  },
225
225
  "name": "secretAccessKeySecretName",
226
226
  "optional": true,
@@ -914,7 +914,7 @@
914
914
  },
915
915
  "locationInModule": {
916
916
  "filename": "src/steps.ts",
917
- "line": 720
917
+ "line": 725
918
918
  },
919
919
  "name": "getAnnotateDiffJob",
920
920
  "parameters": [
@@ -1102,7 +1102,7 @@
1102
1102
  },
1103
1103
  "locationInModule": {
1104
1104
  "filename": "src/steps.ts",
1105
- "line": 788
1105
+ "line": 795
1106
1106
  },
1107
1107
  "name": "getDiffAnnotationJobForEnvironment",
1108
1108
  "parameters": [
@@ -1124,6 +1124,26 @@
1124
1124
  "type": {
1125
1125
  "primitive": "string"
1126
1126
  }
1127
+ },
1128
+ {
1129
+ "docs": {
1130
+ "summary": "The type of runner to use for the deployment job, if any."
1131
+ },
1132
+ "name": "runsOn",
1133
+ "optional": true,
1134
+ "type": {
1135
+ "primitive": "string"
1136
+ }
1137
+ },
1138
+ {
1139
+ "docs": {
1140
+ "summary": "The group of runners to use for the deployment job, if any."
1141
+ },
1142
+ "name": "runsOnGroup",
1143
+ "optional": true,
1144
+ "type": {
1145
+ "fqn": "projen.GroupRunnerOptions"
1146
+ }
1127
1147
  }
1128
1148
  ],
1129
1149
  "returns": {
@@ -1140,7 +1160,7 @@
1140
1160
  },
1141
1161
  "locationInModule": {
1142
1162
  "filename": "src/steps.ts",
1143
- "line": 755
1163
+ "line": 760
1144
1164
  },
1145
1165
  "name": "getFormattedDiffAnnotationCommentStepForEnvironment",
1146
1166
  "parameters": [
@@ -1591,7 +1611,7 @@
1591
1611
  "immutable": true,
1592
1612
  "locationInModule": {
1593
1613
  "filename": "src/steps.ts",
1594
- "line": 844
1614
+ "line": 858
1595
1615
  },
1596
1616
  "name": "diffAnnotationJobs",
1597
1617
  "type": {
@@ -1612,7 +1632,7 @@
1612
1632
  "immutable": true,
1613
1633
  "locationInModule": {
1614
1634
  "filename": "src/steps.ts",
1615
- "line": 707
1635
+ "line": 712
1616
1636
  },
1617
1637
  "name": "generateDiffStep",
1618
1638
  "type": {
@@ -1983,11 +2003,50 @@
1983
2003
  "type": {
1984
2004
  "primitive": "string"
1985
2005
  }
2006
+ },
2007
+ {
2008
+ "abstract": true,
2009
+ "docs": {
2010
+ "default": "\"ubuntu-latest\"",
2011
+ "stability": "stable",
2012
+ "summary": "The type of runner to use for the deployment jobs in the workflow This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix."
2013
+ },
2014
+ "immutable": true,
2015
+ "locationInModule": {
2016
+ "filename": "src/types.ts",
2017
+ "line": 135
2018
+ },
2019
+ "name": "runsOn",
2020
+ "optional": true,
2021
+ "type": {
2022
+ "primitive": "string"
2023
+ }
2024
+ },
2025
+ {
2026
+ "abstract": true,
2027
+ "docs": {
2028
+ "custom": {
2029
+ "description": "Defines a target Runner Group by name and/or labels",
2030
+ "throws": "{Error} if both `runsOn` and `runsOnGroup` are specified"
2031
+ },
2032
+ "stability": "stable",
2033
+ "summary": "Github Runner Group selection options This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix."
2034
+ },
2035
+ "immutable": true,
2036
+ "locationInModule": {
2037
+ "filename": "src/types.ts",
2038
+ "line": 143
2039
+ },
2040
+ "name": "runsOnGroup",
2041
+ "optional": true,
2042
+ "type": {
2043
+ "fqn": "projen.GroupRunnerOptions"
2044
+ }
1986
2045
  }
1987
2046
  ],
1988
2047
  "symbolId": "src/types:EnvironmentOptions"
1989
2048
  }
1990
2049
  },
1991
- "version": "0.1.847",
1992
- "fingerprint": "Zq/Wpq3YI6jDLsCPCpsJpKS5/5jWLVsj4zeqF8jBVvU="
2050
+ "version": "0.1.848",
2051
+ "fingerprint": "gxtDILQ206ozHG+fWj9dM/bDWq4VDqrYxW6N5z//QmE="
1993
2052
  }
package/API.md CHANGED
@@ -5046,6 +5046,8 @@ const environmentOptions: EnvironmentOptions = { ... }
5046
5046
  | <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.name">name</a></code> | <code>string</code> | Environment name to deploy to. |
5047
5047
  | <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.postDeployWorkflowScript">postDeployWorkflowScript</a></code> | <code>string</code> | The script/task to run after deployment of the environment in the workflow If not present, the workflow will not execute that. |
5048
5048
  | <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.preDeployWorkflowScript">preDeployWorkflowScript</a></code> | <code>string</code> | The script/task to run before deployment of the environment in the workflow If not present, the workflow will not execute that. |
5049
+ | <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.runsOn">runsOn</a></code> | <code>string</code> | The type of runner to use for the deployment jobs in the workflow This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix. |
5050
+ | <code><a href="#deployable-awscdk-app-ts.EnvironmentOptions.property.runsOnGroup">runsOnGroup</a></code> | <code>projen.GroupRunnerOptions</code> | Github Runner Group selection options This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix. |
5049
5051
 
5050
5052
  ---
5051
5053
 
@@ -5111,6 +5113,31 @@ The script/task to run before deployment of the environment in the workflow If n
5111
5113
  ```
5112
5114
 
5113
5115
 
5116
+ ##### `runsOn`<sup>Optional</sup> <a name="runsOn" id="deployable-awscdk-app-ts.EnvironmentOptions.property.runsOn"></a>
5117
+
5118
+ ```typescript
5119
+ public readonly runsOn: string;
5120
+ ```
5121
+
5122
+ - *Type:* string
5123
+ - *Default:* "ubuntu-latest"
5124
+
5125
+ The type of runner to use for the deployment jobs in the workflow This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix.
5126
+
5127
+ ---
5128
+
5129
+ ##### `runsOnGroup`<sup>Optional</sup> <a name="runsOnGroup" id="deployable-awscdk-app-ts.EnvironmentOptions.property.runsOnGroup"></a>
5130
+
5131
+ ```typescript
5132
+ public readonly runsOnGroup: GroupRunnerOptions;
5133
+ ```
5134
+
5135
+ - *Type:* projen.GroupRunnerOptions
5136
+
5137
+ Github Runner Group selection options This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix.
5138
+
5139
+ ---
5140
+
5114
5141
  ## Classes <a name="Classes" id="Classes"></a>
5115
5142
 
5116
5143
  ### DeployableAwsCdkTypeScriptAppStepsFactory <a name="DeployableAwsCdkTypeScriptAppStepsFactory" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory"></a>
@@ -5275,7 +5302,7 @@ The name of the environment.
5275
5302
  ##### `getDiffAnnotationJobForEnvironment` <a name="getDiffAnnotationJobForEnvironment" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDiffAnnotationJobForEnvironment"></a>
5276
5303
 
5277
5304
  ```typescript
5278
- public getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName?: string): Job
5305
+ public getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName?: string, runsOn?: string, runsOnGroup?: GroupRunnerOptions): Job
5279
5306
  ```
5280
5307
 
5281
5308
  Get the deployment method argument for the deploy command.
@@ -5296,6 +5323,22 @@ The name of the environment variable to set with the environment name, if any.
5296
5323
 
5297
5324
  ---
5298
5325
 
5326
+ ###### `runsOn`<sup>Optional</sup> <a name="runsOn" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDiffAnnotationJobForEnvironment.parameter.runsOn"></a>
5327
+
5328
+ - *Type:* string
5329
+
5330
+ The type of runner to use for the deployment job, if any.
5331
+
5332
+ ---
5333
+
5334
+ ###### `runsOnGroup`<sup>Optional</sup> <a name="runsOnGroup" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getDiffAnnotationJobForEnvironment.parameter.runsOnGroup"></a>
5335
+
5336
+ - *Type:* projen.GroupRunnerOptions
5337
+
5338
+ The group of runners to use for the deployment job, if any.
5339
+
5340
+ ---
5341
+
5299
5342
  ##### `getFormattedDiffAnnotationCommentStepForEnvironment` <a name="getFormattedDiffAnnotationCommentStepForEnvironment" id="deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory.getFormattedDiffAnnotationCommentStepForEnvironment"></a>
5300
5343
 
5301
5344
  ```typescript
package/lib/index.js CHANGED
@@ -222,5 +222,5 @@ class DeployableAwsCdkTypeScriptApp extends projen_1.awscdk.AwsCdkTypeScriptApp
222
222
  }
223
223
  exports.DeployableAwsCdkTypeScriptApp = DeployableAwsCdkTypeScriptApp;
224
224
  _a = JSII_RTTI_SYMBOL_1;
225
- DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.847" };
225
+ DeployableAwsCdkTypeScriptApp[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptApp", version: "0.1.848" };
226
226
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QjtBQUM3QixtQ0FBNEQ7QUFFNUQsbUNBQW9FO0FBQ3BFLG1DQUF3TTtBQUN4TSxtQ0FBOEM7QUFFOUMsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUNqQywwQ0FBd0I7QUFFeEIsTUFBYSw2QkFBOEIsU0FBUSxlQUFNLENBQUMsbUJBQW1CO0lBRTNFOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFtQztRQUNuRSxPQUFPLENBQUMsVUFBVSxDQUNoQixzQkFBc0IsRUFDdEIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUVyRSxNQUFNLFVBQVUsR0FBRyxJQUFJLG1CQUFVLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3JELFVBQVUsQ0FBQyxJQUFJLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUN4RCxVQUFVLENBQUMsSUFBSSxDQUFDLGlFQUFpRSxDQUFDLENBQUM7UUFDbkYsVUFBVSxDQUFDLElBQUksQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQzdFLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQ2hELFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEIsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsMkRBQTJELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWEs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QUcsV0FBVztnQkFDZCx1QkFBdUIsRUFBRSxNQUFNO2FBQ2hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU8sYUFBYTtRQUVuQixNQUFNLFdBQVcsR0FBRyxJQUFJLGlEQUF5QyxDQUFDLElBQUksRUFBRTtZQUN0RSxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFlBQVk7WUFDcEQscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQjtZQUNqRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDakMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUI7WUFDMUQsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0I7WUFDN0QsV0FBVyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDbkMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtTQUN0RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHVDQUF1QyxDQUFDLHVCQUEwRDtRQUN2RyxpREFBeUMsQ0FBQyx5Q0FBeUMsQ0FDakYsSUFBSSxDQUFDLGFBQWEsRUFDbEIsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7SUFDekQsQ0FBQzs7QUF2T0gsc0VBd09DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGF3c2NkaywgU291cmNlQ29kZSwgVGFzaywgVGV4dEZpbGUgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ29kZUFydGlmYWN0T3B0aW9ucyB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSB9IGZyb20gJy4vc3RlcHMnO1xuaW1wb3J0IHsgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBEaWZmT3V0cHV0T3B0aW9ucywgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zLCBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldE1ham9yTm9kZVZlcnNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgKiBhcyB1dGlscyBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RlcHMnO1xuXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHAgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCB7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBkaWZmIG91dHB1dCBpcyBlbmFibGVkLCBhZGRzIGEgc2NyaXB0IGFuZCBhIGpvYiBzdGVwIHRvIGdlbmVyYXRlIHRoZSBDREsgZGlmZiBvdXRwdXQgdG8gYSBmaWxlIGluIGNkay5vdXRcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhZGREaWZmT3V0cHV0U2NyaXB0KHByb2plY3Q6IGF3c2Nkay5Bd3NDZGtUeXBlU2NyaXB0QXBwKSB7XG4gICAgcHJvamVjdC5hZGREZXZEZXBzKFxuICAgICAgJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJyxcbiAgICAgICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJyxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oJ3NjcmlwdHMnLCAnZ2VuZXJhdGVEaWZmT3V0cHV0LnRzJyk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gbmV3IFNvdXJjZUNvZGUocHJvamVjdCwgZmlsZVBhdGgpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImltcG9ydCB7Y3JlYXRlV3JpdGVTdHJlYW19IGZyb20gJ2ZzJ1wiKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoXCJpbXBvcnQge2Zvcm1hdERpZmZlcmVuY2VzfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcIik7XG4gICAgc291cmNlQ29kZS5saW5lKFwiaW1wb3J0IHtEaWZmTWV0aG9kLCBUb29sa2l0fSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XCIpO1xuICAgIHNvdXJjZUNvZGUubGluZSgnJyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdjb25zdCBjZGsgPSBuZXcgVG9vbGtpdCh7fSk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCcnKTtcbiAgICBzb3VyY2VDb2RlLm9wZW4oJ2FzeW5jIGZ1bmN0aW9uIG1haW4oKSB7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKGBjb25zdCBjeCA9IGF3YWl0IGNkay5mcm9tQ2RrQXBwKCd0cy1ub2RlLXRyYW5zcGlsZS1vbmx5ICR7cGF0aC5wb3NpeC5qb2luKHByb2plY3Quc3JjZGlyLCBwcm9qZWN0LmFwcEVudHJ5cG9pbnQpfScpO2ApO1xuICAgIHNvdXJjZUNvZGUubGluZSgnY29uc3QgZGlmZnMgPSBhd2FpdCBjZGsuZGlmZihjeCwge21ldGhvZDogRGlmZk1ldGhvZC5UZW1wbGF0ZU9ubHkoKX0pOycpO1xuICAgIHNvdXJjZUNvZGUubGluZShcImNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKCcuL2Nkay5vdXQvZGlmZi5sb2cnKTtcIik7XG4gICAgc291cmNlQ29kZS5vcGVuKCdPYmplY3QuZW50cmllcyhkaWZmcykuZm9yRWFjaCgoW3N0YWNrTmFtZSwgZGlmZl0pID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3N0cmVhbS53cml0ZShgRGlmZmVyZW5jZSBmb3Igc3RhY2sgJHtzdGFja05hbWV9OlxcXFxuYCk7Jyk7XG4gICAgc291cmNlQ29kZS5saW5lKCdmb3JtYXREaWZmZXJlbmNlcyhzdHJlYW0sIGRpZmYpOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30pOycpO1xuICAgIHNvdXJjZUNvZGUuY2xvc2UoJ30nKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJycpO1xuICAgIHNvdXJjZUNvZGUub3BlbignbWFpbigpLmNhdGNoKChlcnIpID0+IHsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ2NvbnNvbGUuZXJyb3IoZXJyKTsnKTtcbiAgICBzb3VyY2VDb2RlLmxpbmUoJ3Byb2Nlc3MuZXhpdCgxKTsnKTtcbiAgICBzb3VyY2VDb2RlLmNsb3NlKCd9KTsnKTtcblxuICAgIHByb2plY3QuYWRkVGFzaygnZGlmZjpvdXRwdXQnLCB7XG4gICAgICBleGVjOiBgdHMtbm9kZSAtLXRyYW5zcGlsZS1vbmx5ICR7ZmlsZVBhdGh9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYXNrIHRvIGRlcGxveSB5b3VyIGFwcC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXBsb3lXb3JrZmxvd1Rhc2s6IFRhc2s7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXBsb3lhYmxlOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGdlbmVyYXRlTnZtcmM6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hlY2tBY3RpdmVEZXBsb3ltZW50OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93Tm9kZVZlcnNpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZUFydGlmYWN0T3B0aW9ucz86IENvZGVBcnRpZmFjdE9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVwbG95Sm9iU3RyYXRlZ3k6IERlcGxveUpvYlN0cmF0ZWd5O1xuICBwcml2YXRlIHJlYWRvbmx5IGRpZmZPdXRwdXRPcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcERpZmZPdXRwdXRPcHRpb25zO1xuXG4gIHByb3RlY3RlZCBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuICBwcm90ZWN0ZWQgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMpIHtcbiAgICBjb25zdCBkZXBsb3lhYmxlID0gb3B0aW9ucy5yZWxlYXNlID8/IHRydWU7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHJlbGVhc2U6IGRlcGxveWFibGUsXG4gICAgfSk7XG4gICAgdGhpcy5kZXBsb3lhYmxlID0gZGVwbG95YWJsZTtcbiAgICB0aGlzLmdlbmVyYXRlTnZtcmMgPSBvcHRpb25zLmdlbmVyYXRlTnZtcmMgPz8gdHJ1ZTtcbiAgICB0aGlzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA9IG9wdGlvbnMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8/IGZhbHNlO1xuICAgIHRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbjtcbiAgICB0aGlzLmRlcGxveU9wdGlvbnMgPSBvcHRpb25zLmRlcGxveU9wdGlvbnMgPz8geyBlbnZpcm9ubWVudHM6IFtdIH07XG4gICAgdGhpcy5jb2RlQXJ0aWZhY3RPcHRpb25zID0gb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zO1xuICAgIHRoaXMuZGVwbG95Sm9iU3RyYXRlZ3kgPSB0aGlzLmRlcGxveU9wdGlvbnMuam9iU3RyYXRlZ3kgPz8gRGVwbG95Sm9iU3RyYXRlZ3kuTUFUUklYO1xuICAgIHRoaXMuZGlmZk91dHB1dE9wdGlvbnMgPSB7XG4gICAgICBlbmFibGU6IG9wdGlvbnMuZGlmZk91dHB1dD8uZW5hYmxlID8/IGZhbHNlLFxuICAgICAgYW5ub3RhdGVPbkJ1aWxkOiAob3B0aW9ucy5kaWZmT3V0cHV0Py5hbm5vdGF0ZU9uQnVpbGQgPz8gb3B0aW9ucy5kaWZmT3V0cHV0Py5lbmFibGUgPz8gZmFsc2UpLFxuICAgIH07XG5cbiAgICB0aGlzLmFkZERldkRlcHMoJ2RlcGxveWFibGUtYXdzY2RrLWFwcC10cycpO1xuICAgIHRoaXMuYWRkRGlmZk91dHB1dFNjcmlwdCgpO1xuXG4gICAgaWYgKCFkZXBsb3lhYmxlKSB7dGhpcy5sb2dnZXIud2FybignVGhlIHByb2plY3QgaXMgZXhwbGljaXRseSBzZXQgdG8gbm90IHJlbGVhc2UsIG1ha2Ugc3VyZSB0aGlzIGlzIGRlc2lyZWQgc2V0dGluZycpO31cblxuICAgIGlmICh0aGlzLmdlbmVyYXRlTnZtcmMgJiYgIXRoaXMud29ya2Zsb3dOb2RlVmVyc2lvbikge3RoaXMud29ya2Zsb3dOb2RlVmVyc2lvbiA9ICcxNC4xOC4xJzt9XG5cbiAgICBpZiAodGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ICYmIHRoaXMubWFqb3JOb2RlVmVyc2lvbiA+PSAxOCkge3Rocm93IG5ldyBFcnJvcihgbnBtQ29uZmlnRW52aXJvbm1lbnQgaXMgbm90IHN1cHBvcnRlZCBmb3Igbm9kZSB2ZXJzaW9ucyBhYm92ZSB2ZXJzaW9uIDE4LiBDdXJyZW50IHZlcnNpb24gaXMgJHt0aGlzLm5vZGVWZXJzaW9ufWApO31cblxuICAgIGNvbnN0IGRlcGxveUFyZ3VtZW50ID0gdGhpcy5kZXBsb3lPcHRpb25zLnN0YWNrUGF0dGVybiA/IGAgJHt0aGlzLmRlcGxveU9wdGlvbnMuc3RhY2tQYXR0ZXJufWA6ICcnO1xuICAgIGNvbnN0IGRlcGxveUNvbW1hbmQgPSBgY2RrIGRlcGxveSR7ZGVwbG95QXJndW1lbnR9ICR7dGhpcy5nZXRNZXRob2RBcmd1bWVudCgpfSAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXJgO1xuICAgIGNvbnN0IHJlcXVpcmVkRW52ID0gdGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50ID8gW2BucG1fY29uZmlnXyR7dGhpcy5kZXBsb3lPcHRpb25zLm5wbUNvbmZpZ0Vudmlyb25tZW50fWBdIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVwbG95V29ya2Zsb3dUYXNrID0gdGhpcy5hZGRUYXNrKCdkZXBsb3k6d29ya2Zsb3cnLCB7XG4gICAgICByZXF1aXJlZEVudixcbiAgICAgIGV4ZWM6IGRlcGxveUNvbW1hbmQsXG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYXNrKCdkZXBsb3k6aG90c3dhcCcsIHtcbiAgICAgIHJlcXVpcmVkRW52LFxuICAgICAgZXhlYzogYCR7ZGVwbG95Q29tbWFuZH0gLS1ob3Rzd2FwYCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm4gdGhlIG1ham9yIG5vZGUgdmVyc2lvbiBzZXQgZm9yIHRoZSBwcm9qZWN0XG4gICAqIEBkZWZhdWx0IDE2XG4gICAqL1xuICBnZXQgbWFqb3JOb2RlVmVyc2lvbigpOiBudW1iZXIge1xuICAgIHJldHVybiBnZXRNYWpvck5vZGVWZXJzaW9uKHRoaXMubm9kZVZlcnNpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNZXRob2RBcmd1bWVudCgpIHtcbiAgICByZXR1cm4gYC0tbWV0aG9kICR7dGhpcy5kZXBsb3lPcHRpb25zLm1ldGhvZCA/PyAnY2hhbmdlLXNldCd9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgZGlmZiBvdXRwdXQgaXMgZW5hYmxlZCwgYWRkcyBhIHNjcmlwdCBhbmQgYSBqb2Igc3RlcCB0byBnZW5lcmF0ZSB0aGUgQ0RLIGRpZmYgb3V0cHV0IHRvIGEgZmlsZSBpbiBjZGsub3V0XG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHByaXZhdGUgYWRkRGlmZk91dHB1dFNjcmlwdCgpIHtcbiAgICBpZiAoIXRoaXMuZGlmZk91dHB1dE9wdGlvbnMuZW5hYmxlKSB7cmV0dXJuO31cblxuICAgIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwLmFkZERpZmZPdXRwdXRTY3JpcHQodGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGRpZmYgb3V0cHV0IGlzIGVuYWJsZWQgd2l0aCBhbm5vdGF0aW9uLCBhZGRzIHRoZSBkaWZmIG91dHB1dCBnZW5lcmF0aW9uIHN0ZXAgYW5kIHRoZSBhbm5vdGF0aW9uIHN0ZXBzIHRvIHRoZSBidWlsZCBqb2JzXG4gICAqIFRoZSBhbm5vdGF0aW9uIHN0ZXBzIHdpbGwgYWRkIGEgY29tbWVudCB0byB0aGUgR2l0SHViIFBSIHdpdGggdGhlIGRpZmYgb3V0cHV0LCBhbmQgYWxzbyBhZGQgYW4gYW5ub3RhdGlvbiB0byB0aGUgbGluZXMgb2YgY29kZSB0aGF0IGFyZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGUgZGVwbG95ZWQgc3RhY2sgYW5kIHRoZSBjaGFuZ2VzIG1hZGUgb24gUFJcbiAgICogQHJldHVybnMgdm9pZFxuICAgKi9cbiAgcHJpdmF0ZSBhZGREaWZmQW5ub3RhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlmZk91dHB1dE9wdGlvbnMuYW5ub3RhdGVPbkJ1aWxkKSB7cmV0dXJuO31cblxuICAgIGNvbnN0IHN0ZXBGYWN0b3J5ID0gbmV3IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5KHRoaXMsIHtcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgICBhdXRoUHJvdmlkZXI6IHRoaXMuY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyLFxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmVudHJpZXMoc3RlcEZhY3RvcnkuZGlmZkFubm90YXRpb25Kb2JzKS5mb3JFYWNoKChbbmFtZSwgam9iXSkgPT4ge1xuICAgICAgdGhpcy5idWlsZFdvcmtmbG93Py5hZGRQb3N0QnVpbGRKb2IobmFtZSwgam9iKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN5bnRoKCkge1xuICAgIGlmICh0aGlzLmRlcGxveWFibGUpIHt0aGlzLmFkZERlcGxveUpvYnMoKTt9XG5cbiAgICBpZiAodGhpcy5nZW5lcmF0ZU52bXJjKSB7XG4gICAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5udm1yYycsIHtcbiAgICAgICAgbGluZXM6IFt0aGlzLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gJyddLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREaWZmQW5ub3RhdGlvbigpO1xuXG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IGVudmlyb25tZW50cyB0byB0aGUgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIGl0ZW1zIGxpc3Qgb2YgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKi9cbiAgYWRkRW52aXJvbm1lbnRzKC4uLml0ZW1zOiBFbnZpcm9ubWVudE9wdGlvbnNbXSkge1xuICAgIHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMucHVzaCguLi5pdGVtcyk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdKSB7XG4gICAgdGhpcy5kZXBsb3lPcHRpb25zID0ge1xuICAgICAgLi4udGhpcy5kZXBsb3lPcHRpb25zLFxuICAgICAgZW52aXJvbm1lbnRzOiBuZXdFbnZpcm9ubWVudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgZm9yIGVudmlyb25tZW50c1xuICAgKiBAcGFyYW0gc2NyaXB0IHRoZSBzY3JpcHQgdG8gYmUgYWRkZWQsIGZvciBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lRmlsdGVyIHRoZSBuYW1lIG9mIGVudmlyb25tZW50cyB0byBhZGQgdGhlIHNjcmlwdHMgdG8sIGlmIG5vdCBwcm92aWRlZCBvciBlbXB0eSB3aWxsIHVwZGF0ZSBhbGxcbiAgICovXG4gIHVwZGF0ZVBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQ6IHNjcmlwdCxcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVFbnZpcm9ubWVudHMobmV3RW52aXJvbm1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCBmb3IgZW52aXJvbm1lbnRzXG4gICAqIEBwYXJhbSBzY3JpcHQgdGhlIHNjcmlwdCB0byBiZSBhZGRlZCwgZm9yIGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICogQHBhcmFtIGVudmlyb25tZW50TmFtZUZpbHRlciB0aGUgbmFtZSBvZiBlbnZpcm9ubWVudHMgdG8gYWRkIHRoZSBzY3JpcHRzIHRvLCBpZiBub3QgcHJvdmlkZWQgb3IgZW1wdHkgd2lsbCB1cGRhdGUgYWxsXG4gICAqL1xuICB1cGRhdGVQcmVEZXBsb3lXb3JrZmxvd1NjcmlwdFRvRW52aXJvbm1lbnRzKHNjcmlwdDogc3RyaW5nLCBlbnZpcm9ubWVudE5hbWVGaWx0ZXI/OiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IG5ld0Vudmlyb25tZW50cyA9IHRoaXMuZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMubWFwKGVudmlyb25tZW50ID0+IHtcbiAgICAgIGlmIChlbnZpcm9ubWVudE5hbWVGaWx0ZXIgJiYgZW52aXJvbm1lbnROYW1lRmlsdGVyLmxlbmd0aCA+IDAgJiYgIWVudmlyb25tZW50TmFtZUZpbHRlci5pbmNsdWRlcyhlbnZpcm9ubWVudC5uYW1lKSkge3JldHVybiBlbnZpcm9ubWVudDt9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmVudmlyb25tZW50LFxuICAgICAgICBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdDogc2NyaXB0LFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUVudmlyb25tZW50cyhuZXdFbnZpcm9ubWVudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGREZXBsb3lKb2JzKCkge1xuXG4gICAgY29uc3Qgc3RlcEZhY3RvcnkgPSBuZXcgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkodGhpcywge1xuICAgICAgYXV0aFByb3ZpZGVyOiB0aGlzLmNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICAgIGNoZWNrQWN0aXZlRGVwbG95bWVudDogdGhpcy5jaGVja0FjdGl2ZURlcGxveW1lbnQsXG4gICAgICBkZXBsb3lPcHRpb25zOiB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBwcmVJbnN0YWxsVGFza05hbWU6IHRoaXMuZGVwbG95T3B0aW9ucy50YXNrVG9SdW5QcmVJbnN0YWxsLFxuICAgICAgbnBtQ29uZmlnRW52aXJvbm1lbnQ6IHRoaXMuZGVwbG95T3B0aW9ucy5ucG1Db25maWdFbnZpcm9ubWVudCxcbiAgICAgIGpvYlN0cmF0ZWd5OiB0aGlzLmRlcGxveUpvYlN0cmF0ZWd5LFxuICAgICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IHRoaXMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2U/LmFkZEpvYnMoc3RlcEZhY3RvcnkuZGVwbG95bWVudEpvYnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgYW4gb2JqZWN0IGRlZmluaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVudmlyb25tZW50c1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZUVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyhlbnZpcm9ubWVudERlcGVuZGVuY2llczogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKSB7XG4gICAgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkudmFsaWRhdGVFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMoXG4gICAgICB0aGlzLmRlcGxveU9wdGlvbnMsXG4gICAgICBlbnZpcm9ubWVudERlcGVuZGVuY2llcyxcbiAgICApO1xuXG4gICAgdGhpcy5lbnZpcm9ubWVudERlcGVuZGVuY2llcyA9IGVudmlyb25tZW50RGVwZW5kZW5jaWVzO1xuICB9XG59Il19
package/lib/steps.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { javascript } from 'projen';
1
+ import { javascript, GroupRunnerOptions } from 'projen';
2
2
  import { JobStep, Job } from 'projen/lib/github/workflows-model';
3
3
  import { CodeArtifactAuthProvider } from 'projen/lib/javascript';
4
4
  import { DeployJobStrategy, DeployOptions, EnvironmentDeploymentDependencies, EnvironmentOptions } from './types';
@@ -216,9 +216,11 @@ export declare class DeployableAwsCdkTypeScriptAppStepsFactory {
216
216
  * Get the deployment method argument for the deploy command
217
217
  * @param environmentOptions The environment options
218
218
  * @param environmentVariableName The name of the environment variable to set with the environment name, if any
219
+ * @param runsOn The type of runner to use for the deployment job, if any
220
+ * @param runsOnGroup The group of runners to use for the deployment job, if any
219
221
  * @returns The diff annotation job for the environment
220
222
  */
221
- getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName: string | undefined): Job;
223
+ getDiffAnnotationJobForEnvironment(environmentOptions: EnvironmentOptions, environmentVariableName: string | undefined, runsOn?: string, runsOnGroup?: GroupRunnerOptions): Job;
222
224
  /**
223
225
  * Get diff annotation jobs for all environments
224
226
  * @returns Record of jobs
package/lib/steps.js CHANGED
@@ -465,12 +465,16 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
465
465
  * @returns The job definition for the environment
466
466
  */
467
467
  getJobForEnvironment(environmentOptions, environmentVariableName) {
468
- const { name } = environmentOptions;
468
+ const { name, runsOn, runsOnGroup } = environmentOptions;
469
469
  const deployJobEnv = environmentVariableName ? {
470
470
  [environmentVariableName]: name,
471
471
  } : undefined;
472
+ if (runsOn && runsOnGroup) {
473
+ throw new Error('Both `runsOn` and `runsOnGroup` cannot be specified simultaneously.');
474
+ }
472
475
  const jobDefinition = {
473
- runsOn: ['ubuntu-latest'],
476
+ runsOn: runsOnGroup ? undefined : [runsOn ?? 'ubuntu-latest'],
477
+ runsOnGroup: runsOnGroup,
474
478
  concurrency: {
475
479
  'group': `${name}-deploy`,
476
480
  'cancel-in-progress': false,
@@ -589,15 +593,21 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
589
593
  * Get the deployment method argument for the deploy command
590
594
  * @param environmentOptions The environment options
591
595
  * @param environmentVariableName The name of the environment variable to set with the environment name, if any
596
+ * @param runsOn The type of runner to use for the deployment job, if any
597
+ * @param runsOnGroup The group of runners to use for the deployment job, if any
592
598
  * @returns The diff annotation job for the environment
593
599
  */
594
- getDiffAnnotationJobForEnvironment(environmentOptions, environmentVariableName) {
600
+ getDiffAnnotationJobForEnvironment(environmentOptions, environmentVariableName, runsOn, runsOnGroup) {
595
601
  const { name } = environmentOptions;
596
602
  const deployJobEnv = environmentVariableName ? {
597
603
  [environmentVariableName]: name,
598
604
  } : undefined;
605
+ if (runsOn && runsOnGroup) {
606
+ throw new Error('Both `runsOn` and `runsOnGroup` cannot be specified simultaneously.');
607
+ }
599
608
  const jobDefinition = {
600
- runsOn: ['ubuntu-latest'],
609
+ runsOn: runsOnGroup ? undefined : [runsOn ?? 'ubuntu-latest'],
610
+ runsOnGroup: runsOnGroup,
601
611
  needs: ['build'],
602
612
  permissions: {
603
613
  contents: workflows_model_1.JobPermission.READ,
@@ -646,7 +656,7 @@ class DeployableAwsCdkTypeScriptAppStepsFactory {
646
656
  }
647
657
  exports.DeployableAwsCdkTypeScriptAppStepsFactory = DeployableAwsCdkTypeScriptAppStepsFactory;
648
658
  _a = JSII_RTTI_SYMBOL_1;
649
- DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.847" };
659
+ DeployableAwsCdkTypeScriptAppStepsFactory[_a] = { fqn: "deployable-awscdk-app-ts.DeployableAwsCdkTypeScriptAppStepsFactory", version: "0.1.848" };
650
660
  /**
651
661
  * Get the deploy job ID for a specific environment
652
662
  * @param environmentName The name of the environment
@@ -663,4 +673,4 @@ function getDeployJobId(environmentName) {
663
673
  function getDiffAnnotationJobId(environmentName) {
664
674
  return `Diff-Annotation-${environmentName}`;
665
675
  }
666
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTQxQkEsd0NBRUM7QUFPRCx3REFFQzs7QUF2MkJELG1DQUE0QztBQUM1Qyw4Q0FBa0Q7QUFDbEQsdUVBQWdGO0FBQ2hGLHNEQUFpRTtBQUNqRSxtQ0FBa0g7QUFFbEgsTUFBTSwyQkFBMkIsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RCxNQUFNLHNDQUFzQyxHQUFFLFNBQVMsMkJBQTJCLDBDQUEwQyxDQUFDO0FBQzdILE1BQU0sb0NBQW9DLEdBQUcsbUNBQW1DLENBQUM7QUF3Q2pGOzs7R0FHRztBQUNILE1BQWEseUNBQXlDO0lBRXBEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMseUNBQXlDLENBQ3JELGFBQTRCLEVBQzVCLHVCQUEwRDtRQUcxRCxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUsseUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLHdFQUF3RSxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUMvRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztvQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsR0FBRyxzQkFBc0IsR0FBRyxnREFBZ0QsQ0FBQyxDQUFDO2dCQUMzSCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFDbUIsT0FBK0IsRUFDL0IsS0FBcUQ7UUFEckQsWUFBTyxHQUFQLE9BQU8sQ0FBd0I7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBZ0Q7SUFDckUsQ0FBQztJQUVKOzs7T0FHRztJQUNILElBQVcsc0NBQXNDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxzQ0FBc0MsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNwSCxDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sc0JBQWEsQ0FBQyxRQUFRLENBQUM7WUFDNUIsSUFBSSxFQUFFO2dCQUNKLFVBQVUsRUFBRSxDQUFDO2dCQUNiLEdBQUcsRUFBRSxtQkFBbUI7YUFDekI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVywwQkFBMEI7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUNuQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDLHNDQUFzQztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0I7WUFDbkMsR0FBRyxFQUFFLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRTtTQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsa0NBQWtDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLDBDQUEwQyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDdEYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSwwQ0FBMEMsQ0FBQyxXQUFtQjtRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPO1lBQ0wsRUFBRSxFQUFFLDJCQUEyQjtZQUMvQixJQUFJLEVBQUUsNkNBQTZDO1lBQ25ELElBQUksRUFBRTtnQkFDSixXQUFXLEVBQUUsV0FBVzthQUN6QjtZQUNELEdBQUcsRUFBRTtnQkFDSCxZQUFZLEVBQUUsNkJBQTZCO2FBQzVDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLGlDQUFpQztRQUMxQyxPQUFPO1lBQ0wsSUFBSSxDQUFDLHlDQUF5QztZQUM5QyxJQUFJLENBQUMsMEJBQTBCO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLHlDQUF5QyxDQUFDLGtCQUFzQztRQUNyRixNQUFNLEtBQUssR0FBYyxFQUFFLENBQUM7UUFFNUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsaURBQWlELENBQ2hGLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUM3RCxrQkFBa0IsQ0FBQyxjQUFjLENBQUMscUJBQXFCLElBQUksbUJBQW1CLEVBQzlFLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsSUFBSSx1QkFBdUIsRUFDdEYsa0JBQWtCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FDekMsQ0FBQztRQUVGLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FDNUQsa0JBQWtCLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQzdELGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxxQkFBcUIsSUFBSSxtQkFBbUIsRUFDOUUsa0JBQWtCLENBQUMsY0FBYyxDQUFDLHlCQUF5QixJQUFJLHVCQUF1QixFQUN0RixrQkFBa0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUN4QyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFDcEQsa0JBQWtCLENBQUMsY0FBYyxDQUFDLHlCQUF5QixJQUFJLEdBQUcsQ0FDbkUsQ0FBQztRQUVGLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyx5Q0FBeUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsaURBQWlELENBQzNELG1CQUFtQixFQUNuQiw4QkFBOEIsRUFDOUIsa0NBQWtDLEVBQ2xDLHNCQUFzQixDQUN0QixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLGlEQUFpRCxDQUN0RCxjQUFnQyxFQUNoQyxxQkFBNkIsRUFDN0IseUJBQWlDLEVBQ2pDLE1BQWM7UUFHZCxTQUFTLFlBQVksQ0FBQyxPQUFrRDtZQUN0RSxJQUFJLE9BQU8sY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLGNBQWMsRUFBRSxDQUFDO29CQUNuQixPQUFPLFNBQVMsQ0FBQztnQkFDbkIsQ0FBQztnQkFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEcsQ0FBQztZQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUMxQyxRQUFRLGNBQWMsa0JBQWtCLHNDQUFzQyxLQUFLLENBQUMsQ0FBQztnQkFDckYsUUFBUSxjQUFjLGdCQUFnQixDQUFDO1FBQzNDLENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRztZQUNmLHNEQUFzRDtZQUN0RCw4REFBOEQ7WUFDOUQsMENBQTBDO1NBQzNDLENBQUM7UUFFRixJQUFJLE9BQU8sY0FBYyxLQUFLLFNBQVMsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUMxRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLE9BQU87WUFDTCxFQUFFLEVBQUUsU0FBUztZQUNiLElBQUksRUFBRSwyQkFBMkI7WUFDakMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUM3QixHQUFHLEVBQUU7Z0JBQ0gsV0FBVyxFQUFFLGdCQUFnQixxQkFBcUIsTUFBTTtnQkFDeEQsZUFBZSxFQUFFLGdCQUFnQix5QkFBeUIsTUFBTTtnQkFDaEUsTUFBTTthQUNQO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLDBCQUEwQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxrQ0FBa0MsQ0FDNUMsbUJBQW1CLEVBQ25CLDhCQUE4QixFQUM5QixrQ0FBa0MsRUFDbEMsc0JBQXNCLEVBQ3RCLDRCQUE0QixFQUM1Qix5Q0FBeUMsQ0FDekMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksa0NBQWtDLENBQ3ZDLGNBQWdDLEVBQ2hDLHFCQUE2QixFQUM3Qix5QkFBaUMsRUFDakMsTUFBYyxFQUNkLFlBQW9CLEVBQ3BCLHlCQUEyQztRQUUzQyxTQUFTLFlBQVksQ0FBQyxPQUFrRDtZQUN0RSxJQUFJLE9BQU8sY0FBYyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO2dCQUNELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsc0NBQXNDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRyxDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQzFDLFFBQVEsY0FBYyxpQkFBaUIsc0NBQXNDLEtBQUssQ0FBQyxDQUFDO2dCQUNwRixRQUFRLGNBQWMsZUFBZSxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLE9BQU8sY0FBYyxLQUFLLFNBQVMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckMsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLHFDQUF3QixDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDL0U7Z0JBQ0UsbUJBQW1CLEVBQUUsZ0JBQWdCLHFCQUFxQixNQUFNO2dCQUNoRSx1QkFBdUIsRUFBRSxnQkFBZ0IseUJBQXlCLE1BQU07YUFDekUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU87WUFDTCxFQUFFLEVBQUUsU0FBUztZQUNiLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsSUFBSSxFQUFFLDBDQUEwQztZQUNoRCxJQUFJLEVBQUU7Z0JBQ0osR0FBRyxhQUFhO2dCQUNoQixnQkFBZ0IsRUFBRSxZQUFZO2dCQUM5QixZQUFZLEVBQUUsTUFBTTtnQkFDcEIsdUJBQXVCLEVBQUUseUJBQXlCO2FBQ25EO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLHVCQUF1QjtRQUNoQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTSwrQkFBK0IsQ0FBQyxXQUFtQjtRQUN4RCxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzVDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFFRCxNQUFNLHVCQUF1QixHQUFHLGNBQWMsQ0FBQztRQUMvQyxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUMsc0NBQXNDO1lBQzlDLElBQUksRUFBRSxvQkFBb0I7WUFDMUIsR0FBRyxFQUFFO2dCQUNILENBQUMsdUJBQXVCLENBQUMsRUFBRSxXQUFXO2FBQ3ZDO1lBQ0QsR0FBRyxFQUFFLGtCQUFrQixvQkFBb0IsS0FBSyx1QkFBdUIsRUFBRTtTQUMxRSxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksZ0JBQWdCLENBQ3JCLFVBQWtCLEVBQ2xCLFFBQWdCLEVBQ2hCLGFBQStCO1FBRS9CLFNBQVMsWUFBWSxDQUFDLE9BQWtEO1lBQ3RFLElBQUksT0FBTyxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxTQUFTLENBQUM7Z0JBQ25CLENBQUM7Z0JBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xHLENBQUM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztnQkFDMUMsUUFBUSxhQUFhLGlCQUFpQixzQ0FBc0MsS0FBSyxDQUFDLENBQUM7Z0JBQ25GLFFBQVEsYUFBYSxlQUFlLENBQUM7UUFDekMsQ0FBQztRQUNELElBQUksT0FBTyxhQUFhLEtBQUssU0FBUyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekQsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQyxPQUFPO1lBQ0wsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsT0FBTyxRQUFRLEVBQUU7WUFDdkIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxVQUFVLEVBQUU7U0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLGNBQWM7UUFDdkIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQzFCLGlCQUFpQixFQUNqQixZQUFZLEVBQ1osSUFBSSxDQUNKLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVywwQkFBMEI7UUFDbkMsT0FBTyxJQUFJLENBQUMsa0NBQWtDLENBQzVDLHlCQUF5QixFQUN6QixtQ0FBbUMsQ0FDbkMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksa0NBQWtDLENBQ3ZDLG9CQUFzQyxFQUN0QyxtQkFBMkI7UUFHM0IsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQzFCLG1CQUFtQixFQUNuQixnQkFBZ0IsRUFDaEIsb0JBQW9CLENBQ3JCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVywyQkFBMkI7UUFDcEMsT0FBTyxJQUFJLENBQUMsbUNBQW1DLENBQzdDLDBCQUEwQixFQUMxQixvQ0FBb0MsQ0FDcEMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksbUNBQW1DLENBQ3hDLHFCQUF1QyxFQUN2QyxvQkFBNEI7UUFHNUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQzFCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIscUJBQXFCLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxjQUFjO1FBRXZCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0ZBQWtGLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsS0FBSyx5QkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0lBQzdILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLHVCQUF1QjtRQUVoQyxNQUFNLEVBQUUsWUFBWSxFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFFM0UsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ3BELE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztZQUU5QyxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUVsRSxNQUFNLGtCQUFrQixHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN2RCxZQUFZLEVBQUUsY0FBYyxDQUFDLFlBQVk7Z0JBQ3pDLHlCQUF5QixFQUFFLGNBQWMsQ0FBQyx5QkFBeUIsSUFBSSxHQUFHO2FBQzNFLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUViLE1BQU0scUJBQXFCLEdBQUcsY0FBYyxDQUFDLHFCQUFxQixJQUFJLG1CQUFtQixDQUFDO1lBQzFGLE1BQU0seUJBQXlCLEdBQUcsY0FBYyxDQUFDLHlCQUF5QixJQUFJLHVCQUF1QixDQUFDO1lBRXRHLE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3pGLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBRXZGLE9BQU87Z0JBQ0wsV0FBVyxFQUFFLGtCQUFrQixDQUFDLElBQUk7Z0JBQ3BDLHFCQUFxQjtnQkFDckIseUJBQXlCO2dCQUN6QixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07Z0JBQzdCLFVBQVU7Z0JBQ1YsaUJBQWlCO2dCQUNqQixvQkFBb0IsRUFBRSxrQkFBa0IsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFO2dCQUN2RSxnQkFBZ0I7Z0JBQ2hCLG1CQUFtQixFQUFFLGtCQUFrQixDQUFDLHVCQUF1QixJQUFJLEVBQUU7Z0JBQ3JFLEdBQUcsa0JBQWtCO2FBQ3RCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLENBQUMsQ0FBQztZQUM3QyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsMkJBQTJCO1NBQ3ZELENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sYUFBYSxHQUFRO1lBQ3pCLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixXQUFXLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLGtDQUFrQztnQkFDM0Msb0JBQW9CLEVBQUUsS0FBSzthQUM1QjtZQUNELEtBQUssRUFBRTtnQkFDTCxnQkFBZ0I7YUFDakI7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSTtnQkFDNUIsV0FBVyxFQUFFLCtCQUFhLENBQUMsS0FBSztnQkFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLHFDQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsK0JBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDNUc7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxFQUFFO29CQUNOLE1BQU0sRUFBRTt3QkFDTixXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7cUJBQzdDO29CQUNELE9BQU87aUJBQ1I7YUFDRjtZQUNELFdBQVcsRUFBRTtnQkFDWCxJQUFJLEVBQUUsMkJBQTJCO2FBQ2xDO1lBQ0QsR0FBRyxFQUFFLFlBQVk7WUFDakIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBRUYsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO1FBQ25FLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUMvQixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUVsRSxNQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQztRQUNuRixJQUFJLGtDQUFrQyxFQUFFLENBQUM7WUFDdkMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQztRQUVwRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztRQUN4RCxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDMUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzlDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRTNELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxrQ0FBa0MsQ0FBQyxlQUF1QjtRQUMvRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsQ0FBQztZQUNuRyxNQUFNLHVCQUF1QixHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN6RyxJQUFJLHVCQUF1QixFQUFFLENBQUM7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6RSxJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcseUJBQXlCO1FBQ2xDLE1BQU0sRUFBRSx1QkFBdUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEVBQWlCLEVBQUU7WUFDbEUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQzNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLG9CQUFvQixDQUN6QixrQkFBc0MsRUFDdEMsdUJBQTJDO1FBRTNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztRQUNwQyxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWQsTUFBTSxhQUFhLEdBQVE7WUFDekIsTUFBTSxFQUFFLENBQUMsZUFBZSxDQUFDO1lBQ3pCLFdBQVcsRUFBRTtnQkFDWCxPQUFPLEVBQUUsR0FBRyxJQUFJLFNBQVM7Z0JBQ3pCLG9CQUFvQixFQUFFLEtBQUs7YUFDNUI7WUFDRCxLQUFLLEVBQUUsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLElBQUksQ0FBQztZQUNwRCxXQUFXLEVBQUU7Z0JBQ1gsUUFBUSxFQUFFLCtCQUFhLENBQUMsSUFBSTtnQkFDNUIsV0FBVyxFQUFFLCtCQUFhLENBQUMsS0FBSztnQkFDaEMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLHFDQUF3QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsK0JBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7YUFDNUc7WUFDRCxXQUFXLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUk7YUFDWDtZQUNELEdBQUcsRUFBRSxZQUFZO1lBQ2pCLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQUVGLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1QyxNQUFNLDBCQUEwQixHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUNuRSxJQUFJLDBCQUEwQixFQUFFLENBQUM7WUFDL0IsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBRUQsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUM7UUFFbEUsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsMENBQTBDLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSx5QkFBeUIsRUFBRSxDQUFDO1lBQzlCLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUVoRyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0RSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQy9ELGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDekQsa0JBQWtCLENBQUMsdUJBQXVCLElBQUksRUFBRSxDQUNqRCxDQUFDO1FBQ0YsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3RCLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUU5QyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FDakUsa0JBQWtCLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUMxRCxrQkFBa0IsQ0FBQyx3QkFBd0IsSUFBSSxFQUFFLENBQ2xELENBQUM7UUFDRixJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUMxQixhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLElBQUksQ0FDSixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxrQkFBa0IsQ0FBQyxpQkFBMkI7UUFDbkQsT0FBTztZQUNMLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsK0JBQWEsQ0FBQyxJQUFJO2dCQUM1QixZQUFZLEVBQUUsK0JBQWEsQ0FBQyxLQUFLO2FBQ2xDO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLGVBQU0sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3BDLElBQUksRUFBRSw2QkFBNkI7b0JBQ25DLElBQUksRUFBRTt3QkFDSixPQUFPLEVBQUUsZUFBZTt3QkFDeEIsSUFBSSxFQUFFLGNBQWM7d0JBQ3BCLGFBQWEsRUFBRSxJQUFJO3FCQUNwQjtpQkFDRixDQUFDO2dCQUNGO29CQUNFLElBQUksRUFBRSw4QkFBOEI7b0JBQ3BDLElBQUksRUFBRSwwQkFBMEI7b0JBQ2hDLElBQUksRUFBRTt3QkFDSixZQUFZLEVBQUUsYUFBYTt3QkFDM0IsMEJBQTBCLEVBQUUsSUFBSTt3QkFDaEMsY0FBYyxFQUFFLG1CQUFtQjtxQkFDcEM7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1EQUFtRCxDQUFDLFdBQW1CO1FBQzVFLE9BQU87WUFDTCxJQUFJLEVBQUUsdUNBQXVDO1lBQzdDLEVBQUUsRUFBRSxvQ0FBb0M7WUFDeEMsR0FBRyxFQUFFO2dCQUNILHNCQUFzQjtnQkFDdEIscUNBQXFDLFdBQVcsd0JBQXdCLFdBQVcsS0FBSztnQkFDeEYsK0NBQStDO2dCQUMvQyx3REFBd0Q7Z0JBQ3hELDJFQUEyRTtnQkFDM0UsK0NBQStDO2dCQUMvQyxxREFBcUQ7Z0JBQ3JELG1FQUFtRTtnQkFDbkUsNEVBQTRFO2dCQUM1RSxxRkFBcUY7Z0JBQ3JGLGlEQUFpRDtnQkFDakQsTUFBTTtnQkFDTixxREFBcUQ7Z0JBQ3JELHlEQUF5RDtnQkFDekQsK0NBQStDO2FBQ2hELENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNaLEdBQUcsRUFBRTtnQkFDSCxXQUFXLEVBQUUsV0FBVzthQUN6QjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxrQ0FBa0MsQ0FDdkMsa0JBQXNDLEVBQ3RDLHVCQUEyQztRQUUzQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsa0JBQWtCLENBQUM7UUFDcEMsTUFBTSxZQUFZLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQzdDLENBQUMsdUJBQXVCLENBQUMsRUFBRSxJQUFJO1NBQ2hDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVkLE1BQU0sYUFBYSxHQUFRO1lBQ3pCLE1BQU0sRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN6QixLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSwrQkFBYSxDQUFDLElBQUk7Z0JBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksS0FBSyxxQ0FBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLCtCQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzVHO1lBQ0QsR0FBRyxFQUFFLFlBQVk7WUFDakIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRTVDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO1FBQ25FLElBQUksMEJBQTBCLEVBQUUsQ0FBQztZQUMvQixhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUNsRSxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyx5Q0FBeUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFFaEcsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3ZCLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtREFBbUQsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXpGLHdDQUF3QztRQUN4QyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDdEIsZUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUM7WUFDbEMsSUFBSSxFQUFFLG9CQUFvQjtZQUMxQixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLGVBQWUsSUFBSSxFQUFFO2dCQUMzQixJQUFJLEVBQUUsY0FBYztnQkFDcEIsYUFBYSxFQUFFLENBQUM7YUFDakI7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGtCQUFrQjtRQUNwQixNQUFNLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDM0UsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFpQixFQUFFO1lBQ3hFLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsa0NBQWtDLENBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ2pKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMseUJBQXlCLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7QUEveEJILDhGQWl5QkM7OztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixjQUFjLENBQUMsZUFBdUI7SUFDcEQsT0FBTyxVQUFVLGVBQWUsRUFBRSxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsZUFBdUI7SUFDNUQsT0FBTyxtQkFBbUIsZUFBZSxFQUFFLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGphdmFzY3JpcHQsIGdpdGh1YiB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBXb3JrZmxvd1N0ZXBzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCwgSm9iIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkID0gJ2RlcGxveW1lbnQtY2hlY2snO1xuY29uc3Qgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb249IGBzdGVwcy4ke2NoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZH0ub3V0cHV0cy5oYXNfYWN0aXZlX2RlcGxveW1lbnQgIT0gJ3RydWUnYDtcbmNvbnN0IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCA9ICdmb3JtYXR0ZWRfZGlmZl9hbm5vdGF0aW9uX2NvbW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhY3RpdmUgZGVwbG95bWVudHMgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFRhc2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZm9yIENvZGVBcnRpZmFjdCwgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBhdXRoUHJvdmlkZXI/OiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBucG0gY29uZmlnIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCB0aGF0IGlzIGJlaW5nIGRlcGxveWVkLCBpZiBhbnlcbiAgICogTm90ZTogVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIDE4XG4gICAqL1xuICByZWFkb25seSBucG1Db25maWdFbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBqb2Igc3RyYXRlZ3ksIHdoZXRoZXIgdG8gdXNlIGEgbWF0cml4IGpvYiBvciBtdWx0aXBsZSBqb2JzIGZvciBlYWNoIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50RGVwZW5kZW5jaWVzPzogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY3JlYXRlIHJldXNhYmxlIHN0ZXBzIGZvciB0aGUgZGVwbG95bWVudCB3b3JrZmxvd1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3Rvcnkge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBwcm92aWRlZCBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgdmFsaWRcbiAgICogQHBhcmFtIGRlcGxveU9wdGlvbnMgVGhlIGRlcGxveW1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgVGhlIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIHRvIHZhbGlkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKFxuICAgIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyxcbiAgKTogdm9pZCB7XG5cbiAgICBpZiAoZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSAhPT0gRGVwbG95Sm9iU3RyYXRlZ3kuTVVMVElfSk9CKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgTVVMVElfSk9CIHN0cmF0ZWd5Jyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpLmZvckVhY2goKFtlbnYsIGRlcHNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGVudik7XG4gICAgICBpZiAoIWhhc0Vudmlyb25tZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgXCIke2Vudn1cIiBkZWZpbmVkIGluIGRlcGVuZGVuY2llcyBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgfVxuICAgICAgZGVwcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0RlcEVudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZGVwKTtcbiAgICAgICAgaWYgKCFoYXNEZXBFbnZpcm9ubWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSBlbnZpcm9ubWVudCBcIiR7ZGVwfVwiIGZvciBlbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZhY3RvcnkgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMsXG4gICkge31cblxuICAvKipcbiAgICogQ29uZGl0aW9uIHRvIHNraXAgYSBzdGVwIGlmIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGlzIGFscmVhZHkgcHJlc2VudFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIGNvbmRpdGlvbiBvciB1bmRlZmluZWQgaWYgY2hlY2tBY3RpdmVEZXBsb3ltZW50IGlzIGZhbHNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHsgaWY6IGBcXCR7eyAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlY2tvdXRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiBXb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KHtcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZmV0Y2hEZXB0aDogMCxcbiAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgaWYgZXhpc3RzXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIHByZUluc3RhbGxUYXNrTmFtZSBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUsXG4gICAgICBydW46IGBucHggcHJvamVuICR7dGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gY2hlY2tcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCxcbiAgICAgIHVzZXM6ICdBbWluRmF6bE1vbmRvL2NoZWNrLWRlcGxveWVkLWVudmlyb25tZW50QHYxJyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGVudjoge1xuICAgICAgICBHSVRIVUJfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KCk6IEpvYlN0ZXBbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgsXG4gICAgICB0aGlzLmFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwcyB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtdO1xuXG4gICAgY29uc3QgZnJvbUVudlZhcmlhYmxlU3RlcCA9IHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgKTtcblxuICAgIGlmIChmcm9tRW52VmFyaWFibGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGZyb21FbnZWYXJpYWJsZVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtZVJvbGVTdGVwID0gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPz8gJycsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyA/PyA5MDAsXG4gICAgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChhc3N1bWVSb2xlU3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gQVdTIGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZCxcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuIGEgSm9iU3RlcCBvbmx5IGlmIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyB9fWA7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAnZWNobyBcIkFXU19BQ0NFU1NfS0VZX0lEPSRhY2Nlc3NLZXlJZFwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRzZWNyZXRBY2Nlc3NLZXlcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19SRUdJT049JHJlZ2lvblwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmIGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0NvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHMnLFxuICAgICAgcnVuOiBgJHtjb21tYW5kcy5qb2luKCdcXG4nKX1gLFxuICAgICAgZW52OiB7XG4gICAgICAgIGFjY2Vzc0tleUlkOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5yb2xlVG9Bc3N1bWUgfX0nLFxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcGFyYW0gcm9sZVRvQXNzdW1lIFRoZSByb2xlIHRvIGFzc3VtZVxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyBUaGUgZHVyYXRpb24gZm9yIGFzc3VtaW5nIHRoZSByb2xlXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJvbGVUb0Fzc3VtZTogc3RyaW5nLFxuICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBzdHJpbmcgfCBudW1iZXIsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIGNvbnN0IHNlY3JldHNQYXJhbXMgPVxuICAgICAgdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUiA/XG4gICAgICAgIHtcbiAgICAgICAgICAnYXdzLWFjY2Vzcy1rZXktaWQnOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgICAnYXdzLXNlY3JldC1hY2Nlc3Mta2V5JzogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0Fzc3VtZSBBV1MgUm9sZScsXG4gICAgICB1c2VzOiAnYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NCcsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIC4uLnNlY3JldHNQYXJhbXMsXG4gICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgJ2F3cy1yZWdpb24nOiByZWdpb24sXG4gICAgICAgICdyb2xlLWR1cmF0aW9uLXNlY29uZHMnOiBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgTlBNIGNvbmZpZyBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBucG1Db25maWcgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBOcG1Db25maWdGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgcHVibGljIGdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbnBtQ29uZmlnRW52aXJvbm1lbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFucG1Db25maWdFbnZpcm9ubWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9ICdDT05GSUdfVkFMVUUnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogJ1NldHRpbmcgTlBNIENvbmZpZycsXG4gICAgICBlbnY6IHtcbiAgICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgcnVuOiBgbnBtIGNvbmZpZyBzZXQgJHtucG1Db25maWdFbnZpcm9ubWVudH0gJCR7ZW52aXJvbm1lbnRWYXJpYWJsZU5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBydW4gYSBzcGVjaWZpYyBzY3JpcHRcbiAgICogQHBhcmFtIHNjcmlwdE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW5cbiAgICogQHBhcmFtIHN0ZXBOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGVwIGluIHRoZSB3b3JrZmxvd1xuICAgKiBAcGFyYW0gaGFzU2NyaXB0RmxhZyBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UnVuU2NyaXB0U3RlcChcbiAgICBzY3JpcHROYW1lOiBzdHJpbmcsXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBoYXNTY3JpcHRGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghaGFzU2NyaXB0RmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicgJiYgIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiBgUnVuICR7c3RlcE5hbWV9YCxcbiAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnJ1blNjcmlwdENvbW1hbmR9ICR7c2NyaXB0TmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBkZXBsb3kgdGhlIHdvcmtmbG93XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkZXBsb3k6d29ya2Zsb3cnLFxuICAgICAgJ0RlcGxveW1lbnQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1ByZURlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucHJlRGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmUtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQcmVEZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwcmUtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHByZURlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcHJlLWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHByZURlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUHJlIERlcGxveW1lbnQnLFxuICAgICAgaGFzUHJlRGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvc3REZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUG9zdERlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucG9zdERlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zdC1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwb3N0LWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwb3N0RGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwb3N0LWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUG9zdCBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGVwbG95bWVudCBqb2JzIHdoZXRoZXIgZm9yIG1hdHJpeCBzdHJhdGVneSBvciBub3RcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybignVGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhbnkgZW52aXJvbm1lbnQgc2V0LCBtYWtlIHN1cmUgdGhpcyBpcyBkZXNpcmVkIHNldHRpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuam9iU3RyYXRlZ3kgPT09IERlcGxveUpvYlN0cmF0ZWd5Lk1BVFJJWCA/IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNYXRyaXggOiB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTWF0cml4KCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgY29uc3QgeyBlbnZpcm9ubWVudHMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG5cbiAgICBjb25zdCBpbmNsdWRlID0gZW52aXJvbm1lbnRzLm1hcChlbnZpcm9ubWVudE9wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgeyBhd3NDcmVkZW50aWFscyB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZVNldHRpbmdzID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8ge1xuICAgICAgICByb2xlVG9Bc3N1bWU6IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kczogYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB8fCA5MDAsXG4gICAgICB9OiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFjY2Vzc0tleUlkU2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnO1xuICAgICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSc7XG5cbiAgICAgIGNvbnN0IGhhc1Bvc3REZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICBjb25zdCBoYXNQcmVEZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50T3B0aW9ucy5uYW1lLFxuICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWUsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgICBhc3N1bWVSb2xlLFxuICAgICAgICBoYXNQb3N0RGVwbG95VGFzayxcbiAgICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIGhhc1ByZURlcGxveVRhc2ssXG4gICAgICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgLi4uYXNzdW1lUm9sZVNldHRpbmdzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0tZGVwbG95JyxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbXG4gICAgICAgICdyZWxlYXNlX2dpdGh1YicsXG4gICAgICBdLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5maW5kSW5kZXgoZW52ID0+IGVudi5uYW1lID09PSBlbnZpcm9ubWVudE5hbWUpO1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlRW52aXJvbm1lbnQgPSBpbmRleCA+IDAgPyB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzW2luZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQubmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzW2Vudmlyb25tZW50TmFtZV07XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQoZGVwKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goJ3JlbGVhc2VfZ2l0aHViJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbXVsdGktam9iIHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2IoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE9wdGlvbnMubmFtZSksIHRoaXMuZ2V0Sm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoam9icyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldEpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogYCR7bmFtZX0tZGVwbG95YCxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiB0aGlzLmdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMobmFtZSksXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGdlbmVyYXRlIHRoZSBkaWZmIG91dHB1dFxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdlbmVyYXRlRGlmZlN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkaWZmOm91dHB1dCcsXG4gICAgICAnR2VuZXJhdGUgRGlmZiBPdXRwdXQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiB0byBhbm5vdGF0ZSB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXQgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIGRlcGVuZGVudEpvYk5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgam9icyB0aGF0IHRoZSBhbm5vdGF0aW9uIGpvYiBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYW5ub3RhdGluZyB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXRcbiAgICovXG4gIHB1YmxpYyBnZXRBbm5vdGF0ZURpZmZKb2IoZGVwZW5kZW50Sm9iTmFtZXM6IHN0cmluZ1tdKTogSm9iIHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBkZXBlbmRlbnRKb2JOYW1lcyxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICBnaXRodWIuV29ya2Zsb3dTdGVwcy5kb3dubG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGRpZmYgYXJ0aWZhY3RzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiAnZGlmZi1vdXRwdXQtKicsXG4gICAgICAgICAgICBwYXRoOiAnZGlmZi1vdXRwdXRzJyxcbiAgICAgICAgICAgIG1lcmdlTXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgICAgICAgdXNlczogJ21zaGljay9hZGQtcHItY29tbWVudEB2MycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ21lc3NhZ2UtaWQnOiAnZGlmZi1vdXRwdXQnLFxuICAgICAgICAgICAgJ3JlZnJlc2gtbWVzc2FnZS1wb3NpdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnbWVzc2FnZS1wYXRoJzogJ2RpZmYtb3V0cHV0cy8qLm1kJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBmb3JtYXQgdGhlIGRpZmYgb3V0cHV0IGludG8gYSBHaXRIdWIgYW5ub3RhdGlvbiBjb21tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gZm9ybWF0IHRoZSBkaWZmIGZvclxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0dldCBmb3JtYXR0ZWQgZGlmZiBhbm5vdGF0aW9uIGNvbW1lbnQnLFxuICAgICAgaWQ6IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCxcbiAgICAgIHJ1bjogW1xuICAgICAgICAnbWtkaXIgLXAgZGlmZi1vdXRwdXQnLFxuICAgICAgICBgZWNobyBcIiMjIyBDaGFuZ2VzIGZvciBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVwiID4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZGAsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPGRldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnZWNobyBcIlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICBcImVjaG8gJ1xcYFxcYFxcYCcgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiBkaWZmLW91dHB1dC9kaWZmLSR7ZW52aXJvbm1lbnR9Lm1kJyxcbiAgICAgICAgJyAgc2VkIFxcJ3MvXFxcXHgxQlxcXFxbWzAtOTtdKlttR0tIRl0vL2dcXCcgXCIkZmlsZVwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnICBlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWRcIixcbiAgICAgICAgJ2VjaG8gXCI8L2RldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgZW52OiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGFyZ3VtZW50IGZvciB0aGUgZGVwbG95IGNvbW1hbmRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldERpZmZBbm5vdGF0aW9uSm9iRm9yRW52aXJvbm1lbnQoXG4gICAgZW52aXJvbm1lbnRPcHRpb25zOiBFbnZpcm9ubWVudE9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBuZWVkczogWydidWlsZCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZW5lcmF0ZURpZmZTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSkpO1xuXG4gICAgLy8gVXBsb2FkIHRoZSBkaWZmIG91dHB1dCBhcyBhbiBhcnRpZmFjdFxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChcbiAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgbmFtZTogJ1VwbG9hZCBkaWZmIG91dHB1dCcsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBuYW1lOiBgZGlmZi1vdXRwdXQtJHtuYW1lfWAsXG4gICAgICAgICAgcGF0aDogJ2RpZmYtb3V0cHV0LycsXG4gICAgICAgICAgcmV0ZW50aW9uRGF5czogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9iRW50cmllcyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICBjb25zdCBqb2JzID0gT2JqZWN0LmZyb21FbnRyaWVzKGpvYkVudHJpZXMpO1xuICAgIGpvYnNbJ0RpZmYtQW5ub3RhdGlvbi1Db21tZW50J10gPSB0aGlzLmdldEFubm90YXRlRGlmZkpvYihPYmplY3Qua2V5cyhqb2JzKSk7XG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaWZmIGFubm90YXRpb24gam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERpZmYtQW5ub3RhdGlvbi0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuIl19
676
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RlcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQTAyQkEsd0NBRUM7QUFPRCx3REFFQzs7QUFyM0JELG1DQUFnRTtBQUNoRSw4Q0FBa0Q7QUFDbEQsdUVBQWdGO0FBQ2hGLHNEQUFpRTtBQUNqRSxtQ0FBa0g7QUFFbEgsTUFBTSwyQkFBMkIsR0FBRyxrQkFBa0IsQ0FBQztBQUN2RCxNQUFNLHNDQUFzQyxHQUFFLFNBQVMsMkJBQTJCLDBDQUEwQyxDQUFDO0FBQzdILE1BQU0sb0NBQW9DLEdBQUcsbUNBQW1DLENBQUM7QUF3Q2pGOzs7R0FHRztBQUNILE1BQWEseUNBQXlDO0lBRXBEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMseUNBQXlDLENBQ3JELGFBQTRCLEVBQzVCLHVCQUEwRDtRQUcxRCxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUsseUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRUFBK0UsQ0FBQyxDQUFDO1FBQ25HLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixHQUFHLHdFQUF3RSxDQUFDLENBQUM7WUFDL0csQ0FBQztZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0saUJBQWlCLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJ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QyxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztRQUNqSixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBN3lCSCw4RkEreUJDOzs7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLGVBQXVCO0lBQ3BELE9BQU8sVUFBVSxlQUFlLEVBQUUsQ0FBQztBQUNyQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLGVBQXVCO0lBQzVELE9BQU8sbUJBQW1CLGVBQWUsRUFBRSxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqYXZhc2NyaXB0LCBnaXRodWIsIEdyb3VwUnVubmVyT3B0aW9ucyB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBXb3JrZmxvd1N0ZXBzIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiwgSm9iU3RlcCwgSm9iIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBEZXBsb3lKb2JTdHJhdGVneSwgRGVwbG95T3B0aW9ucywgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzLCBFbnZpcm9ubWVudE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcElkID0gJ2RlcGxveW1lbnQtY2hlY2snO1xuY29uc3Qgc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb249IGBzdGVwcy4ke2NoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZH0ub3V0cHV0cy5oYXNfYWN0aXZlX2RlcGxveW1lbnQgIT0gJ3RydWUnYDtcbmNvbnN0IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCA9ICdmb3JtYXR0ZWRfZGlmZl9hbm5vdGF0aW9uX2NvbW1lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPcHRpb25zOiBEZXBsb3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIGZvciBhY3RpdmUgZGVwbG95bWVudHMgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMsIGlmIGFueVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFRhc2tOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aGVudGljYXRpb24gcHJvdmlkZXIgZm9yIENvZGVBcnRpZmFjdCwgaWYgYW55XG4gICAqL1xuICByZWFkb25seSBhdXRoUHJvdmlkZXI/OiBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBucG0gY29uZmlnIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCB0aGF0IGlzIGJlaW5nIGRlcGxveWVkLCBpZiBhbnlcbiAgICogTm90ZTogVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGZvciBub2RlIHZlcnNpb25zIGFib3ZlIDE4XG4gICAqL1xuICByZWFkb25seSBucG1Db25maWdFbnZpcm9ubWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogRGVwbG95bWVudCBqb2Igc3RyYXRlZ3ksIHdoZXRoZXIgdG8gdXNlIGEgbWF0cml4IGpvYiBvciBtdWx0aXBsZSBqb2JzIGZvciBlYWNoIGVudmlyb25tZW50XG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneTogRGVwbG95Sm9iU3RyYXRlZ3k7XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzLCBpZiBhbnlcbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50RGVwZW5kZW5jaWVzPzogRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzO1xufVxuXG4vKipcbiAqIEZhY3RvcnkgdG8gY3JlYXRlIHJldXNhYmxlIHN0ZXBzIGZvciB0aGUgZGVwbG95bWVudCB3b3JrZmxvd1xuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3Rvcnkge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBwcm92aWRlZCBlbnZpcm9ubWVudCBkZXBsb3ltZW50IGRlcGVuZGVuY2llcyBhcmUgdmFsaWRcbiAgICogQHBhcmFtIGRlcGxveU9wdGlvbnMgVGhlIGRlcGxveW1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnREZXBlbmRlbmNpZXMgVGhlIGVudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIHRvIHZhbGlkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZhbGlkYXRlRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzKFxuICAgIGRlcGxveU9wdGlvbnM6IERlcGxveU9wdGlvbnMsXG4gICAgZW52aXJvbm1lbnREZXBlbmRlbmNpZXM6IEVudmlyb25tZW50RGVwbG95bWVudERlcGVuZGVuY2llcyxcbiAgKTogdm9pZCB7XG5cbiAgICBpZiAoZGVwbG95T3B0aW9ucy5qb2JTdHJhdGVneSAhPT0gRGVwbG95Sm9iU3RyYXRlZ3kuTVVMVElfSk9CKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vudmlyb25tZW50IGRlcGxveW1lbnQgZGVwZW5kZW5jaWVzIGFyZSBvbmx5IHN1cHBvcnRlZCBmb3IgTVVMVElfSk9CIHN0cmF0ZWd5Jyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmVudHJpZXMoZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpLmZvckVhY2goKFtlbnYsIGRlcHNdKSA9PiB7XG4gICAgICBjb25zdCBoYXNFbnZpcm9ubWVudCA9IGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzLnNvbWUoZSA9PiBlLm5hbWUgPT09IGVudik7XG4gICAgICBpZiAoIWhhc0Vudmlyb25tZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRW52aXJvbm1lbnQgXCIke2Vudn1cIiBkZWZpbmVkIGluIGRlcGVuZGVuY2llcyBkb2VzIG5vdCBleGlzdCBpbiBkZXBsb3lPcHRpb25zLmVudmlyb25tZW50c2ApO1xuICAgICAgfVxuICAgICAgZGVwcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0RlcEVudmlyb25tZW50ID0gZGVwbG95T3B0aW9ucy5lbnZpcm9ubWVudHMuc29tZShlID0+IGUubmFtZSA9PT0gZGVwKTtcbiAgICAgICAgaWYgKCFoYXNEZXBFbnZpcm9ubWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGVwZW5kZW5jeSBlbnZpcm9ubWVudCBcIiR7ZGVwfVwiIGZvciBlbnZpcm9ubWVudCBcIiR7ZW52fVwiIGRvZXMgbm90IGV4aXN0IGluIGRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzYCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeVxuICAgKiBAcGFyYW0gcHJvamVjdCBUaGUgcHJvamVjdFxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIGZhY3RvcnkgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9qZWN0OiBqYXZhc2NyaXB0Lk5vZGVQcm9qZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwU3RlcHNGYWN0b3J5UHJvcHMsXG4gICkge31cblxuICAvKipcbiAgICogQ29uZGl0aW9uIHRvIHNraXAgYSBzdGVwIGlmIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGlzIGFscmVhZHkgcHJlc2VudFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIGNvbmRpdGlvbiBvciB1bmRlZmluZWQgaWYgY2hlY2tBY3RpdmVEZXBsb3ltZW50IGlzIGZhbHNlXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uKCk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHsgaWY6IGBcXCR7eyAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY2hlY2tvdXRTdGVwKCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiBXb3JrZmxvd1N0ZXBzLmNoZWNrb3V0KHtcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZmV0Y2hEZXB0aDogMCxcbiAgICAgICAgcmVmOiAnJHt7IGdpdGh1Yi5zaGEgfX0nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBiZWZvcmUgaW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgaWYgZXhpc3RzXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIG5vIHByZUluc3RhbGxUYXNrTmFtZSBpcyBwcm92aWRlZFxuICAgKi9cbiAgcHVibGljIGdldCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucHJlSW5zdGFsbFRhc2tOYW1lKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWUsXG4gICAgICBydW46IGBucHggcHJvamVuICR7dGhpcy5wcm9wcy5wcmVJbnN0YWxsVGFza05hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gY2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGRlcGxveW1lbnQgZm9yIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBkZXBsb3ltZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gY2hlY2tcbiAgICogQHJldHVybnMgSm9iU3RlcFxuICAgKi9cbiAgcHVibGljIGdldENoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBJZCxcbiAgICAgIHVzZXM6ICdBbWluRmF6bE1vbmRvL2NoZWNrLWRlcGxveWVkLWVudmlyb25tZW50QHYxJyxcbiAgICAgIHdpdGg6IHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGVudjoge1xuICAgICAgICBHSVRIVUJfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBBd3NDcmVkZW50aWFsc1N0ZXBzRm9yTWF0cml4KCk6IEpvYlN0ZXBbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMuc2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JNYXRyaXgsXG4gICAgICB0aGlzLmFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdGVwcyB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcmV0dXJucyBKb2JTdGVwW11cbiAgICovXG4gIHB1YmxpYyBnZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSA9IFtdO1xuXG4gICAgY29uc3QgZnJvbUVudlZhcmlhYmxlU3RlcCA9IHRoaXMuZ2V0U2V0dXBBd3NDcmVkZW50aWFsc0luRW52aXJvbm1lbnRGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPyB0cnVlIDogZmFsc2UsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYWNjZXNzS2V5SWRTZWNyZXROYW1lID8/ICdBV1NfQUNDRVNTX0tFWV9JRCcsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA/PyAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yZWdpb24sXG4gICAgKTtcblxuICAgIGlmIChmcm9tRW52VmFyaWFibGVTdGVwKSB7XG4gICAgICBzdGVwcy5wdXNoKGZyb21FbnZWYXJpYWJsZVN0ZXApO1xuICAgIH1cblxuICAgIGNvbnN0IGFzc3VtZVJvbGVTdGVwID0gdGhpcy5nZXRBc3N1bWVBd3NSb2xlU3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5hY2Nlc3NLZXlJZFNlY3JldE5hbWUgPz8gJ0FXU19BQ0NFU1NfS0VZX0lEJyxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lID8/ICdBV1NfU0VDUkVUX0FDQ0VTU19LRVknLFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLmF3c0NyZWRlbnRpYWxzLnJlZ2lvbixcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5hd3NDcmVkZW50aWFscy5yb2xlVG9Bc3N1bWUgPz8gJycsXG4gICAgICBlbnZpcm9ubWVudE9wdGlvbnMuYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyA/PyA5MDAsXG4gICAgKTtcblxuICAgIGlmIChhc3N1bWVSb2xlU3RlcCkge1xuICAgICAgc3RlcHMucHVzaChhc3N1bWVSb2xlU3RlcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgQVdTIGNyZWRlbnRpYWxzIGluIHRoZSBlbnZpcm9ubWVudCBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBzZXR1cCBBV1MgY3JlZGVudGlhbHMgaW4gdGhlIGVudmlyb25tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBhc3N1bWVSb2xlRmxhZyBXaGV0aGVyIHRvIGFzc3VtZSBhIHJvbGUsIGNhbiBiZSBhIGJvb2xlYW4gb3IgYSBzdHJpbmcgZm9yIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcGFyYW0gYWNjZXNzS2V5SWRTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBhY2Nlc3Mga2V5IElEXG4gICAqIEBwYXJhbSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lIFRoZSBHaXRIdWIgc2VjcmV0IG5hbWUgZm9yIHRoZSBzZWNyZXQgYWNjZXNzIGtleVxuICAgKiBAcGFyYW0gcmVnaW9uIFRoZSByZWdpb25cbiAgICogQHJldHVybnMgSm9iU3RlcCBvciB1bmRlZmluZWQgaWYgbm8gQVdTIGNyZWRlbnRpYWxzIGFyZSBwcm92aWRlZCxcbiAgICogaWYgYXNzdW1lUm9sZUZsYWcgaXMgYm9vbGVhbiB3aWxsIGJlIGV2YWx1YXRlZCBhbmQgcmV0dXJuIGEgSm9iU3RlcCBvbmx5IGlmIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldFNldHVwQXdzQ3JlZGVudGlhbHNJbkVudmlyb25tZW50Rm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcblxuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmIChhc3N1bWVSb2xlRmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ2ZhbHNlJyB9fWA7XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWFuZHMgPSBbXG4gICAgICAnZWNobyBcIkFXU19BQ0NFU1NfS0VZX0lEPSRhY2Nlc3NLZXlJZFwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICAgICdlY2hvIFwiQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSRzZWNyZXRBY2Nlc3NLZXlcIiA+PiAkR0lUSFVCX0VOVicsXG4gICAgICAnZWNobyBcIkFXU19SRUdJT049JHJlZ2lvblwiID4+ICRHSVRIVUJfRU5WJyxcbiAgICBdO1xuXG4gICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nICYmIGFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0NvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHMnLFxuICAgICAgcnVuOiBgJHtjb21tYW5kcy5qb2luKCdcXG4nKX1gLFxuICAgICAgZW52OiB7XG4gICAgICAgIGFjY2Vzc0tleUlkOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiBgXFwke3sgc2VjcmV0c1ske3NlY3JldEFjY2Vzc0tleVNlY3JldE5hbWV9XSB9fWAsXG4gICAgICAgIHJlZ2lvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGFzc3VtZSBhbiBBV1Mgcm9sZSBmb3IgdGhlIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGFzc3VtZUF3c1JvbGVTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4LmFzc3VtZVJvbGUnLFxuICAgICAgJ21hdHJpeC5hY2Nlc3NLZXlJZFNlY3JldE5hbWUnLFxuICAgICAgJ21hdHJpeC5zZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lJyxcbiAgICAgICcke3sgbWF0cml4LnJlZ2lvbiB9fScsXG4gICAgICAnJHt7IG1hdHJpeC5yb2xlVG9Bc3N1bWUgfX0nLFxuICAgICAgJyR7eyBtYXRyaXguYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBhc3N1bWUgYW4gQVdTIHJvbGUgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGFzc3VtZVJvbGVGbGFnIFdoZXRoZXIgdG8gYXNzdW1lIGEgcm9sZSwgY2FuIGJlIGEgYm9vbGVhbiBvciBhIHN0cmluZyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEBwYXJhbSBhY2Nlc3NLZXlJZFNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIGFjY2VzcyBrZXkgSURcbiAgICogQHBhcmFtIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgVGhlIEdpdEh1YiBzZWNyZXQgbmFtZSBmb3IgdGhlIHNlY3JldCBhY2Nlc3Mga2V5XG4gICAqIEBwYXJhbSByZWdpb24gVGhlIHJlZ2lvblxuICAgKiBAcGFyYW0gcm9sZVRvQXNzdW1lIFRoZSByb2xlIHRvIGFzc3VtZVxuICAgKiBAcGFyYW0gYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyBUaGUgZHVyYXRpb24gZm9yIGFzc3VtaW5nIHRoZSByb2xlXG4gICAqIEByZXR1cm5zIEpvYlN0ZXAgb3IgdW5kZWZpbmVkIGlmIGFzc3VtZVJvbGVGbGFnIGlzIGJvb2xlYW4gYW5kIGZhbHNlXG4gICAqIGlmIGFzc3VtZVJvbGVGbGFnIGlzIHN0cmluZyB3aWxsIGFsd2F5cyByZXR1cm4gYSBKb2JTdGVwIChmb3IgbWF0cml4IHN0cmF0ZWd5KVxuICAgKi9cbiAgcHVibGljIGdldEFzc3VtZUF3c1JvbGVTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgYXNzdW1lUm9sZUZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgYWNjZXNzS2V5SWRTZWNyZXROYW1lOiBzdHJpbmcsXG4gICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZTogc3RyaW5nLFxuICAgIHJlZ2lvbjogc3RyaW5nLFxuICAgIHJvbGVUb0Fzc3VtZTogc3RyaW5nLFxuICAgIGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBzdHJpbmcgfCBudW1iZXIsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGZ1bmN0aW9uIGdldENvbmRpdGlvbihmYWN0b3J5OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcFN0ZXBzRmFjdG9yeSkge1xuICAgICAgaWYgKHR5cGVvZiBhc3N1bWVSb2xlRmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghYXNzdW1lUm9sZUZsYWcpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWN0b3J5LnByb3BzLmNoZWNrQWN0aXZlRGVwbG95bWVudCA/IHNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID9cbiAgICAgICAgYFxcJHt7ICR7YXNzdW1lUm9sZUZsYWd9ID09ICd0cnVlJyAmJiAke3NraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9ufSB9fWAgOlxuICAgICAgICBgXFwke3sgJHthc3N1bWVSb2xlRmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFzc3VtZVJvbGVGbGFnID09PSAnYm9vbGVhbicgJiYgIWFzc3VtZVJvbGVGbGFnKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbiA9IGdldENvbmRpdGlvbih0aGlzKTtcblxuICAgIGNvbnN0IHNlY3JldHNQYXJhbXMgPVxuICAgICAgdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUiA/XG4gICAgICAgIHtcbiAgICAgICAgICAnYXdzLWFjY2Vzcy1rZXktaWQnOiBgXFwke3sgc2VjcmV0c1ske2FjY2Vzc0tleUlkU2VjcmV0TmFtZX1dIH19YCxcbiAgICAgICAgICAnYXdzLXNlY3JldC1hY2Nlc3Mta2V5JzogYFxcJHt7IHNlY3JldHNbJHtzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lfV0gfX1gLFxuICAgICAgICB9IDogdW5kZWZpbmVkO1xuICAgIHJldHVybiB7XG4gICAgICBpZjogY29uZGl0aW9uLFxuICAgICAgbmFtZTogJ0Fzc3VtZSBBV1MgUm9sZScsXG4gICAgICB1c2VzOiAnYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NCcsXG4gICAgICB3aXRoOiB7XG4gICAgICAgIC4uLnNlY3JldHNQYXJhbXMsXG4gICAgICAgICdyb2xlLXRvLWFzc3VtZSc6IHJvbGVUb0Fzc3VtZSxcbiAgICAgICAgJ2F3cy1yZWdpb24nOiByZWdpb24sXG4gICAgICAgICdyb2xlLWR1cmF0aW9uLXNlY29uZHMnOiBhc3N1bWVSb2xlRHVyYXRpb25TZWNvbmRzLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0ZXAgdG8gc2V0dXAgTlBNIGNvbmZpZyBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBKb2JTdGVwIG9yIHVuZGVmaW5lZCBpZiBubyBucG1Db25maWcgaXMgcHJvdmlkZWRcbiAgICovXG4gIHB1YmxpYyBnZXQgc2V0dXBOcG1Db25maWdGb3JNYXRyaXgoKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudCgnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScpO1xuICB9XG5cbiAgcHVibGljIGdldFNldHVwTnBtQ29uZmlnRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnQ6IHN0cmluZyk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbnBtQ29uZmlnRW52aXJvbm1lbnQgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFucG1Db25maWdFbnZpcm9ubWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA9ICdDT05GSUdfVkFMVUUnO1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnNraXBJZkFscmVhZHlBY3RpdmVEZXBsb3ltZW50Q29uZGl0aW9uLFxuICAgICAgbmFtZTogJ1NldHRpbmcgTlBNIENvbmZpZycsXG4gICAgICBlbnY6IHtcbiAgICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgcnVuOiBgbnBtIGNvbmZpZyBzZXQgJHtucG1Db25maWdFbnZpcm9ubWVudH0gJCR7ZW52aXJvbm1lbnRWYXJpYWJsZU5hbWV9YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBydW4gYSBzcGVjaWZpYyBzY3JpcHRcbiAgICogQHBhcmFtIHNjcmlwdE5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdCB0byBydW5cbiAgICogQHBhcmFtIHN0ZXBOYW1lIFRoZSBuYW1lIG9mIHRoZSBzdGVwIGluIHRoZSB3b3JrZmxvd1xuICAgKiBAcGFyYW0gaGFzU2NyaXB0RmxhZyBXaGV0aGVyIHRoZSBzY3JpcHQgc2hvdWxkIGJlIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBzY3JpcHQgb3IgdW5kZWZpbmVkIGlmIG5vdCBhcHBsaWNhYmxlXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1NjcmlwdEZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UnVuU2NyaXB0U3RlcChcbiAgICBzY3JpcHROYW1lOiBzdHJpbmcsXG4gICAgc3RlcE5hbWU6IHN0cmluZyxcbiAgICBoYXNTY3JpcHRGbGFnOiBib29sZWFuIHwgc3RyaW5nLFxuICApOiBKb2JTdGVwIHwgdW5kZWZpbmVkIHtcbiAgICBmdW5jdGlvbiBnZXRDb25kaXRpb24oZmFjdG9yeTogRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBTdGVwc0ZhY3RvcnkpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFzU2NyaXB0RmxhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICghaGFzU2NyaXB0RmxhZykge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhY3RvcnkucHJvcHMuY2hlY2tBY3RpdmVEZXBsb3ltZW50ID8gc2tpcElmQWxyZWFkeUFjdGl2ZURlcGxveW1lbnRDb25kaXRpb24gOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFjdG9yeS5wcm9wcy5jaGVja0FjdGl2ZURlcGxveW1lbnQgP1xuICAgICAgICBgXFwke3sgJHtoYXNTY3JpcHRGbGFnfSA9PSAndHJ1ZScgJiYgJHtza2lwSWZBbHJlYWR5QWN0aXZlRGVwbG95bWVudENvbmRpdGlvbn0gfX1gIDpcbiAgICAgICAgYFxcJHt7ICR7aGFzU2NyaXB0RmxhZ30gPT0gJ3RydWUnIH19YDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBoYXNTY3JpcHRGbGFnID09PSAnYm9vbGVhbicgJiYgIWhhc1NjcmlwdEZsYWcpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZGl0aW9uID0gZ2V0Q29uZGl0aW9uKHRoaXMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlmOiBjb25kaXRpb24sXG4gICAgICBuYW1lOiBgUnVuICR7c3RlcE5hbWV9YCxcbiAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnJ1blNjcmlwdENvbW1hbmR9ICR7c2NyaXB0TmFtZX1gLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3RlcCB0byBkZXBsb3kgdGhlIHdvcmtmbG93XG4gICAqIEByZXR1cm5zIEpvYlN0ZXBcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudFN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkZXBsb3k6d29ya2Zsb3cnLFxuICAgICAgJ0RlcGxveW1lbnQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KCk6IEpvYlN0ZXAge1xuICAgIHJldHVybiB0aGlzLmdldFByZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQoXG4gICAgICAnbWF0cml4Lmhhc1ByZURlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucHJlRGVwbG95bWVudFNjcmlwdCB9fScsXG4gICAgKSE7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwcmUtZGVwbG95bWVudCBzdGVwIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBoYXNQcmVEZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwcmUtZGVwbG95bWVudCB0YXNrIHNob3VsZCBiZSBydW5cbiAgICogQHBhcmFtIHByZURlcGxveW1lbnRTY3JpcHQgVGhlIHNjcmlwdCB0byBydW5cbiAgICogQHJldHVybnMgVGhlIGpvYiBzdGVwIHRvIHJ1biB0aGUgcHJlLWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQcmVEZXBsb3lUYXNrRmxhZyBpcyBib29sZWFuIGFuZCBmYWxzZSB3aWxsIHJldHVybiB1bmRlZmluZWRcbiAgICogSWYgaGFzUHJlRGVwbG95VGFza0ZsYWcgaXMgc3RyaW5nIHdpbGwgYWx3YXlzIHJldHVybiBhIEpvYlN0ZXAgKGZvciBtYXRyaXggc3RyYXRlZ3kpXG4gICAqL1xuICBwdWJsaWMgZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQcmVEZXBsb3lUYXNrRmxhZzogYm9vbGVhbiB8IHN0cmluZyxcbiAgICBwcmVEZXBsb3ltZW50U2NyaXB0OiBzdHJpbmcsXG4gICk6IEpvYlN0ZXAgfCB1bmRlZmluZWQge1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgIHByZURlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUHJlIERlcGxveW1lbnQnLFxuICAgICAgaGFzUHJlRGVwbG95VGFza0ZsYWcsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIHJ1biBwb3N0IGRlcGxveW1lbnQgc2NyaXB0IGluIG1hdHJpeCBzdHJhdGVneVxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBvc3REZXBsb3ltZW50U3RlcEZvck1hdHJpeCgpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4gdGhpcy5nZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgICdtYXRyaXguaGFzUG9zdERlcGxveVRhc2snLFxuICAgICAgJyR7eyBtYXRyaXgucG9zdERlcGxveW1lbnRTY3JpcHQgfX0nLFxuICAgICkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9zdC1kZXBsb3ltZW50IHN0ZXAgZm9yIGEgc3BlY2lmaWMgZW52aXJvbm1lbnRcbiAgICogQHBhcmFtIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBXaGV0aGVyIHRoZSBwb3N0LWRlcGxveW1lbnQgdGFzayBzaG91bGQgYmUgcnVuXG4gICAqIEBwYXJhbSBwb3N0RGVwbG95bWVudFNjcmlwdCBUaGUgc2NyaXB0IHRvIHJ1blxuICAgKiBAcmV0dXJucyBUaGUgam9iIHN0ZXAgdG8gcnVuIHRoZSBwb3N0LWRlcGxveW1lbnQgc2NyaXB0IG9yIHVuZGVmaW5lZCBpZiBub3QgYXBwbGljYWJsZVxuICAgKiBJZiBoYXNQb3N0RGVwbG95VGFza0ZsYWcgaXMgYm9vbGVhbiBhbmQgZmFsc2Ugd2lsbCByZXR1cm4gdW5kZWZpbmVkXG4gICAqIElmIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyBpcyBzdHJpbmcgd2lsbCBhbHdheXMgcmV0dXJuIGEgSm9iU3RlcCAoZm9yIG1hdHJpeCBzdHJhdGVneSlcbiAgICovXG4gIHB1YmxpYyBnZXRQb3N0RGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICBoYXNQb3N0RGVwbG95VGFza0ZsYWc6IGJvb2xlYW4gfCBzdHJpbmcsXG4gICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IHN0cmluZyxcbiAgKTogSm9iU3RlcCB8IHVuZGVmaW5lZCB7XG5cbiAgICByZXR1cm4gdGhpcy5nZXRSdW5TY3JpcHRTdGVwKFxuICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQsXG4gICAgICAnUG9zdCBEZXBsb3ltZW50JyxcbiAgICAgIGhhc1Bvc3REZXBsb3lUYXNrRmxhZyxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwgZGVwbG95bWVudCBqb2JzIHdoZXRoZXIgZm9yIG1hdHJpeCBzdHJhdGVneSBvciBub3RcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZGVwbG95bWVudEpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybignVGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhbnkgZW52aXJvbm1lbnQgc2V0LCBtYWtlIHN1cmUgdGhpcyBpcyBkZXNpcmVkIHNldHRpbmcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuam9iU3RyYXRlZ3kgPT09IERlcGxveUpvYlN0cmF0ZWd5Lk1BVFJJWCA/IHRoaXMuZGVwbG95bWVudEpvYnNGb3JNYXRyaXggOiB0aGlzLmRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2I7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbWF0cml4IHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTWF0cml4KCk6IFJlY29yZDxzdHJpbmcsIEpvYj4ge1xuXG4gICAgY29uc3QgeyBlbnZpcm9ubWVudHMsIGVudmlyb25tZW50VmFyaWFibGVOYW1lIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG5cbiAgICBjb25zdCBpbmNsdWRlID0gZW52aXJvbm1lbnRzLm1hcChlbnZpcm9ubWVudE9wdGlvbnMgPT4ge1xuICAgICAgY29uc3QgeyBhd3NDcmVkZW50aWFscyB9ID0gZW52aXJvbm1lbnRPcHRpb25zO1xuXG4gICAgICBjb25zdCBhc3N1bWVSb2xlID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgY29uc3QgYXNzdW1lUm9sZVNldHRpbmdzID0gYXdzQ3JlZGVudGlhbHMucm9sZVRvQXNzdW1lID8ge1xuICAgICAgICByb2xlVG9Bc3N1bWU6IGF3c0NyZWRlbnRpYWxzLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kczogYXdzQ3JlZGVudGlhbHMuYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcyB8fCA5MDAsXG4gICAgICB9OiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IGFjY2Vzc0tleUlkU2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLmFjY2Vzc0tleUlkU2VjcmV0TmFtZSA/PyAnQVdTX0FDQ0VTU19LRVlfSUQnO1xuICAgICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZSA9IGF3c0NyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUgPz8gJ0FXU19TRUNSRVRfQUNDRVNTX0tFWSc7XG5cbiAgICAgIGNvbnN0IGhhc1Bvc3REZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgICBjb25zdCBoYXNQcmVEZXBsb3lUYXNrID0gZW52aXJvbm1lbnRPcHRpb25zLnByZURlcGxveVdvcmtmbG93U2NyaXB0ID8gJ3RydWUnIDogJ2ZhbHNlJztcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50T3B0aW9ucy5uYW1lLFxuICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldE5hbWUsXG4gICAgICAgIHNlY3JldEFjY2Vzc0tleVNlY3JldE5hbWUsXG4gICAgICAgIHJlZ2lvbjogYXdzQ3JlZGVudGlhbHMucmVnaW9uLFxuICAgICAgICBhc3N1bWVSb2xlLFxuICAgICAgICBoYXNQb3N0RGVwbG95VGFzayxcbiAgICAgICAgcG9zdERlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgICAgIGhhc1ByZURlcGxveVRhc2ssXG4gICAgICAgIHByZURlcGxveW1lbnRTY3JpcHQ6IGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICAgICAgLi4uYXNzdW1lUm9sZVNldHRpbmdzLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlcGxveUpvYkVudiA9IGVudmlyb25tZW50VmFyaWFibGVOYW1lID8ge1xuICAgICAgW2Vudmlyb25tZW50VmFyaWFibGVOYW1lXTogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0nLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogJyR7eyBtYXRyaXguZW52aXJvbm1lbnQgfX0tZGVwbG95JyxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbXG4gICAgICAgICdyZWxlYXNlX2dpdGh1YicsXG4gICAgICBdLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgZGVwbG95bWVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICAgIGlkVG9rZW46IHRoaXMucHJvcHMuYXV0aFByb3ZpZGVyID09PSBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMgPyBKb2JQZXJtaXNzaW9uLldSSVRFIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIHN0cmF0ZWd5OiB7XG4gICAgICAgIG1heFBhcmFsbGVsOiAxLFxuICAgICAgICBtYXRyaXg6IHtcbiAgICAgICAgICBkb21haW46IHtcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBpbmNsdWRlLm1hcChlID0+IGUuZW52aXJvbm1lbnQpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jbHVkZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBuYW1lOiAnJHt7IG1hdHJpeC5lbnZpcm9ubWVudCB9fScsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLmNoZWNrb3V0U3RlcCk7XG5cbiAgICBjb25zdCBwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCA9IHRoaXMucHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXA7XG4gICAgaWYgKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi4odGhpcy5wcm9qZWN0KS5yZW5kZXJXb3JrZmxvd1NldHVwKCkpO1xuXG4gICAgY29uc3QgY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCA9IHRoaXMuY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeDtcbiAgICBpZiAoY2hlY2tBY3RpdmVEZXBsb3ltZW50U3RlcEZvck1hdHJpeCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXBGb3JNYXRyaXgpO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCguLi50aGlzLnNldHVwQXdzQ3JlZGVudGlhbHNTdGVwc0Zvck1hdHJpeCk7XG5cbiAgICBjb25zdCBzZXR1cE5wbUNvbmZpZ1N0ZXAgPSB0aGlzLnNldHVwTnBtQ29uZmlnRm9yTWF0cml4O1xuICAgIGlmIChzZXR1cE5wbUNvbmZpZ1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChzZXR1cE5wbUNvbmZpZ1N0ZXApO1xuICAgIH1cblxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaCh0aGlzLnByZURlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMucG9zdERlcGxveW1lbnRTdGVwRm9yTWF0cml4KTtcblxuICAgIHJldHVybiB7IGRlcGxveTogam9iRGVmaW5pdGlvbiB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgSURzIG9mIHRoZSBqb2JzIHRoYXQgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZW52aXJvbm1lbnQncyBkZXBsb3ltZW50IGpvYlxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBqb2IgSURzXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVwbG95bWVudEpvYlByZXJlcXVpc2l0ZUpvYklkcyhlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoIXRoaXMucHJvcHMuZW52aXJvbm1lbnREZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wcm9wcy5kZXBsb3lPcHRpb25zLmVudmlyb25tZW50cy5maW5kSW5kZXgoZW52ID0+IGVudi5uYW1lID09PSBlbnZpcm9ubWVudE5hbWUpO1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlRW52aXJvbm1lbnQgPSBpbmRleCA+IDAgPyB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnMuZW52aXJvbm1lbnRzW2luZGV4IC0gMV0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQocHJlcmVxdWlzaXRlRW52aXJvbm1lbnQubmFtZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLnByb3BzLmVudmlyb25tZW50RGVwZW5kZW5jaWVzW2Vudmlyb25tZW50TmFtZV07XG4gICAgICBpZiAoZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgIGRlcGVuZGVuY2llcy5mb3JFYWNoKGRlcCA9PiB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goZ2V0RGVwbG95Sm9iSWQoZGVwKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmVzdWx0LnB1c2goJ3JlbGVhc2VfZ2l0aHViJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlcGxveW1lbnQgam9icyBmb3IgbXVsdGktam9iIHN0cmF0ZWd5XG4gICAqIEByZXR1cm5zIFJlY29yZCBvZiBqb2JzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGRlcGxveW1lbnRKb2JzRm9yTXVsdGlKb2IoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9icyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE9wdGlvbnMubmFtZSksIHRoaXMuZ2V0Sm9iRm9yRW52aXJvbm1lbnQoZW52aXJvbm1lbnRPcHRpb25zLCBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSldO1xuICAgIH0pO1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoam9icyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRPcHRpb25zIFRoZSBlbnZpcm9ubWVudCBvcHRpb25zXG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gc2V0IHdpdGggdGhlIGVudmlyb25tZW50IG5hbWUsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgam9iIGRlZmluaXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHVibGljIGdldEpvYkZvckVudmlyb25tZW50KFxuICAgIGVudmlyb25tZW50T3B0aW9uczogRW52aXJvbm1lbnRPcHRpb25zLFxuICAgIGVudmlyb25tZW50VmFyaWFibGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICk6IEpvYiB7XG4gICAgY29uc3QgeyBuYW1lLCBydW5zT24sIHJ1bnNPbkdyb3VwIH0gPSBlbnZpcm9ubWVudE9wdGlvbnM7XG4gICAgY29uc3QgZGVwbG95Sm9iRW52ID0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgPyB7XG4gICAgICBbZW52aXJvbm1lbnRWYXJpYWJsZU5hbWVdOiBuYW1lLFxuICAgIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAocnVuc09uICYmIHJ1bnNPbkdyb3VwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0JvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgY2Fubm90IGJlIHNwZWNpZmllZCBzaW11bHRhbmVvdXNseS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBqb2JEZWZpbml0aW9uOiBKb2IgPSB7XG4gICAgICBydW5zT246IHJ1bnNPbkdyb3VwID8gdW5kZWZpbmVkIDogW3J1bnNPbiA/PyAndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcnVuc09uR3JvdXA6IHJ1bnNPbkdyb3VwLFxuICAgICAgY29uY3VycmVuY3k6IHtcbiAgICAgICAgJ2dyb3VwJzogYCR7bmFtZX0tZGVwbG95YCxcbiAgICAgICAgJ2NhbmNlbC1pbi1wcm9ncmVzcyc6IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiB0aGlzLmdldERlcGxveW1lbnRKb2JQcmVyZXF1aXNpdGVKb2JJZHMobmFtZSksXG4gICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICBjb250ZW50czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICBkZXBsb3ltZW50czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgIH0sXG4gICAgICBlbnY6IGRlcGxveUpvYkVudixcbiAgICAgIHN0ZXBzOiBbXSxcbiAgICB9O1xuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHRoaXMuY2hlY2tvdXRTdGVwKTtcblxuICAgIGNvbnN0IHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwID0gdGhpcy5wcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcDtcbiAgICBpZiAocHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCk7XG4gICAgfVxuXG4gICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKC4uLih0aGlzLnByb2plY3QpLnJlbmRlcldvcmtmbG93U2V0dXAoKSk7XG5cbiAgICBjb25zdCBjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwID0gdGhpcy5nZXRDaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSk7XG4gICAgaWYgKGNoZWNrQWN0aXZlRGVwbG95bWVudFN0ZXApIHtcbiAgICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChjaGVja0FjdGl2ZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVEZXBsb3ltZW50U3RlcCA9IHRoaXMuZ2V0UHJlRGVwbG95bWVudFN0ZXBGb3JFbnZpcm9ubWVudChcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wcmVEZXBsb3lXb3JrZmxvd1NjcmlwdCB8fCAnJyxcbiAgICApO1xuICAgIGlmIChwcmVEZXBsb3ltZW50U3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZURlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5kZXBsb3ltZW50U3RlcCk7XG5cbiAgICBjb25zdCBwb3N0RGVwbG95bWVudFN0ZXAgPSB0aGlzLmdldFBvc3REZXBsb3ltZW50U3RlcEZvckVudmlyb25tZW50KFxuICAgICAgZW52aXJvbm1lbnRPcHRpb25zLnBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdCA/IHRydWUgOiBmYWxzZSxcbiAgICAgIGVudmlyb25tZW50T3B0aW9ucy5wb3N0RGVwbG95V29ya2Zsb3dTY3JpcHQgfHwgJycsXG4gICAgKTtcbiAgICBpZiAocG9zdERlcGxveW1lbnRTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2gocG9zdERlcGxveW1lbnRTdGVwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGVwIHRvIGdlbmVyYXRlIHRoZSBkaWZmIG91dHB1dFxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0IGdlbmVyYXRlRGlmZlN0ZXAoKTogSm9iU3RlcCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UnVuU2NyaXB0U3RlcChcbiAgICAgICdkaWZmOm91dHB1dCcsXG4gICAgICAnR2VuZXJhdGUgRGlmZiBPdXRwdXQnLFxuICAgICAgdHJ1ZSxcbiAgICApITtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGpvYiB0byBhbm5vdGF0ZSB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXQgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHBhcmFtIGRlcGVuZGVudEpvYk5hbWVzIFRoZSBuYW1lcyBvZiB0aGUgam9icyB0aGF0IHRoZSBhbm5vdGF0aW9uIGpvYiBkZXBlbmRzIG9uXG4gICAqIEByZXR1cm5zIFRoZSBqb2IgZGVmaW5pdGlvbiBmb3IgYW5ub3RhdGluZyB0aGUgUFIgd2l0aCB0aGUgZGlmZiBvdXRwdXRcbiAgICovXG4gIHB1YmxpYyBnZXRBbm5vdGF0ZURpZmZKb2IoZGVwZW5kZW50Sm9iTmFtZXM6IHN0cmluZ1tdKTogSm9iIHtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBkZXBlbmRlbnRKb2JOYW1lcyxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5XUklURSxcbiAgICAgIH0sXG4gICAgICBzdGVwczogW1xuICAgICAgICBnaXRodWIuV29ya2Zsb3dTdGVwcy5kb3dubG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGRpZmYgYXJ0aWZhY3RzJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBwYXR0ZXJuOiAnZGlmZi1vdXRwdXQtKicsXG4gICAgICAgICAgICBwYXRoOiAnZGlmZi1vdXRwdXRzJyxcbiAgICAgICAgICAgIG1lcmdlTXVsdGlwbGU6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQW5ub3RhdGUgUFIgd2l0aCBEaWZmIE91dHB1dCcsXG4gICAgICAgICAgdXNlczogJ21zaGljay9hZGQtcHItY29tbWVudEB2MycsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgJ21lc3NhZ2UtaWQnOiAnZGlmZi1vdXRwdXQnLFxuICAgICAgICAgICAgJ3JlZnJlc2gtbWVzc2FnZS1wb3NpdGlvbic6IHRydWUsXG4gICAgICAgICAgICAnbWVzc2FnZS1wYXRoJzogJ2RpZmYtb3V0cHV0cy8qLm1kJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3RlcCB0byBmb3JtYXQgdGhlIGRpZmYgb3V0cHV0IGludG8gYSBHaXRIdWIgYW5ub3RhdGlvbiBjb21tZW50IGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gICAqIEBwYXJhbSBlbnZpcm9ubWVudCBUaGUgZW52aXJvbm1lbnQgdG8gZm9ybWF0IHRoZSBkaWZmIGZvclxuICAgKiBAcmV0dXJucyBKb2JTdGVwXG4gICAqL1xuICBwdWJsaWMgZ2V0Rm9ybWF0dGVkRGlmZkFubm90YXRpb25Db21tZW50U3RlcEZvckVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpOiBKb2JTdGVwIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0dldCBmb3JtYXR0ZWQgZGlmZiBhbm5vdGF0aW9uIGNvbW1lbnQnLFxuICAgICAgaWQ6IGZvcm1hdHRlZERpZmZBbm5vdGF0aW9uQ29tbWVudFN0ZXBJZCxcbiAgICAgIHJ1bjogW1xuICAgICAgICAnbWtkaXIgLXAgZGlmZi1vdXRwdXQnLFxuICAgICAgICBgZWNobyBcIiMjIyBDaGFuZ2VzIGZvciBlbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVwiID4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZGAsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPGRldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiPHN1bW1hcnk+U2hvdyBkaWZmPC9zdW1tYXJ5PlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnZWNobyBcIlwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICBcImVjaG8gJ1xcYFxcYFxcYCcgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZFwiLFxuICAgICAgICAnZm9yIGZpbGUgaW4gJChmaW5kIC4gLXBhdGggXCIqKi9jZGsub3V0L2RpZmYubG9nXCIgMj4vZGV2L251bGwpOyBkbycsXG4gICAgICAgICcgIGVjaG8gXCI9PT09PT09PT09ICRmaWxlID09PT09PT09PT1cIiA+PiBkaWZmLW91dHB1dC9kaWZmLSR7ZW52aXJvbm1lbnR9Lm1kJyxcbiAgICAgICAgJyAgc2VkIFxcJ3MvXFxcXHgxQlxcXFxbWzAtOTtdKlttR0tIRl0vL2dcXCcgXCIkZmlsZVwiID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWQnLFxuICAgICAgICAnICBlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdkb25lJyxcbiAgICAgICAgXCJlY2hvICdcXGBcXGBcXGAnID4+IGRpZmYtb3V0cHV0L2RpZmYtJHtlbnZpcm9ubWVudH0ubWRcIixcbiAgICAgICAgJ2VjaG8gXCI8L2RldGFpbHM+XCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICAgICdlY2hvIFwiXCIgPj4gZGlmZi1vdXRwdXQvZGlmZi0ke2Vudmlyb25tZW50fS5tZCcsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgZW52OiB7XG4gICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlcGxveW1lbnQgbWV0aG9kIGFyZ3VtZW50IGZvciB0aGUgZGVwbG95IGNvbW1hbmRcbiAgICogQHBhcmFtIGVudmlyb25tZW50T3B0aW9ucyBUaGUgZW52aXJvbm1lbnQgb3B0aW9uc1xuICAgKiBAcGFyYW0gZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHNldCB3aXRoIHRoZSBlbnZpcm9ubWVudCBuYW1lLCBpZiBhbnlcbiAgICogQHBhcmFtIHJ1bnNPbiBUaGUgdHlwZSBvZiBydW5uZXIgdG8gdXNlIGZvciB0aGUgZGVwbG95bWVudCBqb2IsIGlmIGFueVxuICAgKiBAcGFyYW0gcnVuc09uR3JvdXAgVGhlIGdyb3VwIG9mIHJ1bm5lcnMgdG8gdXNlIGZvciB0aGUgZGVwbG95bWVudCBqb2IsIGlmIGFueVxuICAgKiBAcmV0dXJucyBUaGUgZGlmZiBhbm5vdGF0aW9uIGpvYiBmb3IgdGhlIGVudmlyb25tZW50XG4gICAqL1xuICBwdWJsaWMgZ2V0RGlmZkFubm90YXRpb25Kb2JGb3JFbnZpcm9ubWVudChcbiAgICBlbnZpcm9ubWVudE9wdGlvbnM6IEVudmlyb25tZW50T3B0aW9ucyxcbiAgICBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHJ1bnNPbj86IHN0cmluZyxcbiAgICBydW5zT25Hcm91cD86IEdyb3VwUnVubmVyT3B0aW9ucyxcbiAgKTogSm9iIHtcbiAgICBjb25zdCB7IG5hbWUgfSA9IGVudmlyb25tZW50T3B0aW9ucztcbiAgICBjb25zdCBkZXBsb3lKb2JFbnYgPSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSA/IHtcbiAgICAgIFtlbnZpcm9ubWVudFZhcmlhYmxlTmFtZV06IG5hbWUsXG4gICAgfSA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChydW5zT24gJiYgcnVuc09uR3JvdXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQm90aCBgcnVuc09uYCBhbmQgYHJ1bnNPbkdyb3VwYCBjYW5ub3QgYmUgc3BlY2lmaWVkIHNpbXVsdGFuZW91c2x5LicpO1xuICAgIH1cblxuICAgIGNvbnN0IGpvYkRlZmluaXRpb246IEpvYiA9IHtcbiAgICAgIHJ1bnNPbjogcnVuc09uR3JvdXAgPyB1bmRlZmluZWQgOiBbcnVuc09uID8/ICd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBydW5zT25Hcm91cDogcnVuc09uR3JvdXAsXG4gICAgICBuZWVkczogWydidWlsZCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgaWRUb2tlbjogdGhpcy5wcm9wcy5hdXRoUHJvdmlkZXIgPT09IENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQyA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgZW52OiBkZXBsb3lKb2JFbnYsXG4gICAgICBzdGVwczogW10sXG4gICAgfTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5jaGVja291dFN0ZXApO1xuXG4gICAgY29uc3QgcHJlSW5zdGFsbERlcGVuZGVuY2llc1N0ZXAgPSB0aGlzLnByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwO1xuICAgIGlmIChwcmVJbnN0YWxsRGVwZW5kZW5jaWVzU3RlcCkge1xuICAgICAgam9iRGVmaW5pdGlvbi5zdGVwcy5wdXNoKHByZUluc3RhbGxEZXBlbmRlbmNpZXNTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4uKHRoaXMucHJvamVjdCkucmVuZGVyV29ya2Zsb3dTZXR1cCgpKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goLi4udGhpcy5nZXRTZXR1cEF3c0NyZWRlbnRpYWxzU3RlcHNGb3JFbnZpcm9ubWVudChlbnZpcm9ubWVudE9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHNldHVwTnBtQ29uZmlnU3RlcCA9IHRoaXMuZ2V0U2V0dXBOcG1Db25maWdGb3JFbnZpcm9ubWVudChuYW1lKTtcbiAgICBpZiAoc2V0dXBOcG1Db25maWdTdGVwKSB7XG4gICAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2goc2V0dXBOcG1Db25maWdTdGVwKTtcbiAgICB9XG5cbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZW5lcmF0ZURpZmZTdGVwKTtcbiAgICBqb2JEZWZpbml0aW9uLnN0ZXBzLnB1c2godGhpcy5nZXRGb3JtYXR0ZWREaWZmQW5ub3RhdGlvbkNvbW1lbnRTdGVwRm9yRW52aXJvbm1lbnQobmFtZSkpO1xuXG4gICAgLy8gVXBsb2FkIHRoZSBkaWZmIG91dHB1dCBhcyBhbiBhcnRpZmFjdFxuICAgIGpvYkRlZmluaXRpb24uc3RlcHMucHVzaChcbiAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgbmFtZTogJ1VwbG9hZCBkaWZmIG91dHB1dCcsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBuYW1lOiBgZGlmZi1vdXRwdXQtJHtuYW1lfWAsXG4gICAgICAgICAgcGF0aDogJ2RpZmYtb3V0cHV0LycsXG4gICAgICAgICAgcmV0ZW50aW9uRGF5czogMSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gam9iRGVmaW5pdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGlmZiBhbm5vdGF0aW9uIGpvYnMgZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICogQHJldHVybnMgUmVjb3JkIG9mIGpvYnNcbiAgICovXG4gIGdldCBkaWZmQW5ub3RhdGlvbkpvYnMoKTogUmVjb3JkPHN0cmluZywgSm9iPiB7XG4gICAgY29uc3QgeyBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZSwgZW52aXJvbm1lbnRzIH0gPSB0aGlzLnByb3BzLmRlcGxveU9wdGlvbnM7XG4gICAgY29uc3Qgam9iRW50cmllcyA9IGVudmlyb25tZW50cy5tYXAoKGVudmlyb25tZW50T3B0aW9ucyk6IFtzdHJpbmcsIEpvYl0gPT4ge1xuICAgICAgcmV0dXJuIFtnZXREaWZmQW5ub3RhdGlvbkpvYklkKGVudmlyb25tZW50T3B0aW9ucy5uYW1lKSwgdGhpcy5nZXREaWZmQW5ub3RhdGlvbkpvYkZvckVudmlyb25tZW50KGVudmlyb25tZW50T3B0aW9ucywgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWUpXTtcbiAgICB9KTtcbiAgICBjb25zdCBqb2JzID0gT2JqZWN0LmZyb21FbnRyaWVzKGpvYkVudHJpZXMpO1xuICAgIGpvYnNbJ0RpZmYtQW5ub3RhdGlvbi1Db21tZW50J10gPSB0aGlzLmdldEFubm90YXRlRGlmZkpvYihPYmplY3Qua2V5cyhqb2JzKSk7XG4gICAgcmV0dXJuIGpvYnM7XG4gIH1cblxufVxuXG4vKipcbiAqIEdldCB0aGUgZGVwbG95IGpvYiBJRCBmb3IgYSBzcGVjaWZpYyBlbnZpcm9ubWVudFxuICogQHBhcmFtIGVudmlyb25tZW50TmFtZSBUaGUgbmFtZSBvZiB0aGUgZW52aXJvbm1lbnRcbiAqIEByZXR1cm5zIFRoZSBkZXBsb3kgam9iIElEXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXBsb3lKb2JJZChlbnZpcm9ubWVudE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgRGVwbG95LSR7ZW52aXJvbm1lbnROYW1lfWA7XG59XG5cbi8qKlxuICogR2V0IHRoZSBkaWZmIGFubm90YXRpb24gam9iIElEIGZvciBhIHNwZWNpZmljIGVudmlyb25tZW50XG4gKiBAcGFyYW0gZW52aXJvbm1lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudFxuICogQHJldHVybnMgVGhlIGRpZmYgYW5ub3RhdGlvbiBqb2IgSURcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERpZmZBbm5vdGF0aW9uSm9iSWQoZW52aXJvbm1lbnROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYERpZmYtQW5ub3RhdGlvbi0ke2Vudmlyb25tZW50TmFtZX1gO1xufVxuIl19
package/lib/types.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { awscdk } from 'projen';
1
+ import { awscdk, GroupRunnerOptions } from 'projen';
2
2
  export interface DeployableAwsCdkTypeScriptAppDiffOutputOptions {
3
3
  /**
4
4
  * Whether to enable the diff output to a file in cdk.out
@@ -107,6 +107,19 @@ export interface EnvironmentOptions {
107
107
  * @example "pre:deploy"
108
108
  */
109
109
  readonly preDeployWorkflowScript?: string;
110
+ /**
111
+ * The type of runner to use for the deployment jobs in the workflow
112
+ * This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix
113
+ * @default "ubuntu-latest"
114
+ */
115
+ readonly runsOn?: string;
116
+ /**
117
+ * Github Runner Group selection options
118
+ * This is not supported in Matrix job strategy and will be ignored if the job strategy is set to Matrix
119
+ * @description Defines a target Runner Group by name and/or labels
120
+ * @throws {Error} if both `runsOn` and `runsOnGroup` are specified
121
+ */
122
+ readonly runsOnGroup?: GroupRunnerOptions;
110
123
  }
111
124
  export interface AWSCredentials {
112
125
  /**
package/lib/types.js CHANGED
@@ -6,4 +6,4 @@ var DeployJobStrategy;
6
6
  DeployJobStrategy["MATRIX"] = "matrix";
7
7
  DeployJobStrategy["MULTI_JOB"] = "multi-job";
8
8
  })(DeployJobStrategy || (exports.DeployJobStrategy = DeployJobStrategy = {}));
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkNBLElBQVksaUJBR1g7QUFIRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQiw0Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFHNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwRGlmZk91dHB1dE9wdGlvbnMge1xuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgdGhlIGRpZmYgb3V0cHV0IHRvIGEgZmlsZSBpbiBjZGsub3V0XG4gICAqL1xuICByZWFkb25seSBlbmFibGU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYW5ub3RhdGUgdGhlIGRpZmYgb3V0cHV0IGluIHRoZSBHaXRIdWIgUFIgYXMgd2VsbFxuICAgKiBUaGlzIGNhbm5vdCBiZSBzZXQgdG8gdHJ1ZSBpZiB0aGUgZGlmZiBvdXRwdXQgaXMgbm90IGVuYWJsZWRcbiAgICogQGRlZmF1bHQgdHJ1ZSBpZiB0aGUgZGlmZiBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGFubm90YXRlT25CdWlsZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zIGV4dGVuZHMgYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIERlcGxveW1lbnQgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCBcImNvbmZpZyB3aXRoIGVtcHR5IGxpc3Qgb2YgZW52aXJvbm1lbnRzXCJcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveU9wdGlvbnM/OiBEZXBsb3lPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGdlbmVyYXRlIG52bXJjIGZpbGUgZm9yIHRoZSBub2RlIHZlcnNpb24gb2YgdGhlIHByb2plY3RcbiAgICogaWYgc2V0IHRvIHRydWUsIGFuZCBubyBcIndvcmtmbG93Tm9kZVZlcnNpb25cIiBpcyBzcGVjaWZpZWQgd2lsbCB1c2UgdmVyc2lvbiAxNC4xOC4xXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGdlbmVyYXRlTnZtcmM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGNoZWNrIGFuZCBza2lwIHRoZSBkZXBsb3ltZW50IGZvciBlbnZpcm9ubWVudHMgdGhhdCBoYXZlIGFjdGl2ZSBkZXBsb3ltZW50IG9mIHRoZSBzYW1lIGNvbW1pdFxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tBY3RpdmVEZXBsb3ltZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ0RLIGRpZmYgb3V0cHV0IG9wdGlvbnNcbiAgICogQGRlZmF1bHQgZGlmZiBvdXRwdXQgZGlzYWJsZWRcbiAgICovXG4gIHJlYWRvbmx5IGRpZmZPdXRwdXQ/OiBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcERpZmZPdXRwdXRPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBEZXBsb3lNZXRob2QgPSAnZGlyZWN0JyB8ICdjaGFuZ2Utc2V0JyB8ICdwcmVwYXJlLWNoYW5nZS1zZXQnO1xuXG5leHBvcnQgZW51bSBEZXBsb3lKb2JTdHJhdGVneSB7XG4gIE1BVFJJWCA9ICdtYXRyaXgnLFxuICBNVUxUSV9KT0IgPSAnbXVsdGktam9iJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lPcHRpb25zIHtcbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHNldHRpbmdzIHRvIGRlcGxveSB0b1xuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnRzOiBFbnZpcm9ubWVudE9wdGlvbnNbXTtcblxuICAvKipcbiAgICogUmVnZXggZm9yIHN0YWNrcyB0byBiZSBkZXBsb3llZFxuICAgKlxuICAgKiBpZiBub3QgcHJvdmlkZWQgbWF0Y2hlcyBhbGwgb2YgdGhlIHN0YWNrcyBpbiB0aGUgQ0RLIEFwcC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBzdGFja1BhdHRlcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIG5wbSBjb25maWcgbmFtZSB0byBzZXQgYXMgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICogVGhpcyBtaWdodCBiZSB1c2VmdWwgaW4gZGVwbG95bWVudCBwcm9jZXNzXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgbm9kZSB2ZXJzaW9ucyBhYm92ZSAxOC5cbiAgICpcbiAgICogaWYgbm90IHByb3ZpZGVkIHdpbGwgbm90IHNldFxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IG5wbUNvbmZpZ0Vudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2VkIHRvIHNldCB0aGUgZGVwbG95IGVudmlyb25tZW50IG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnRWYXJpYWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRhc2sgbmFtZSB0byBydW4gcHJpb3IgdG8gaW5zdGFsbGF0aW9uIGluIGRlcGxveSBqb2Igb2Ygd29ya2Zsb3dcbiAgICogaWYgbm90IHByb3ZpZGVkIHdpbGwgbm90IGFkZCB0byB3b3JrZmxvd1xuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHRhc2tUb1J1blByZUluc3RhbGw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvdyB0byBwZXJmb3JtIHRoZSBkZXBsb3ltZW50LiBEaXJlY3QgaXMgYSBiaXQgZmFzdGVyIGJ1dCBsYWNrcyBwcm9ncmVzcyBpbmZvcm1hdGlvblxuICAgKiBAZGVmYXVsdCBcImNoYW5nZS1zZXRcIlxuICAgKi9cbiAgcmVhZG9ubHkgbWV0aG9kPzogRGVwbG95TWV0aG9kO1xuXG4gIC8qKlxuICAgKiBEZXBsb3ltZW50IGpvYiBzdHJhdGVneSwgd2hldGhlciB0byB1c2UgYSBtYXRyaXggam9iIG9yIG11bHRpcGxlIGpvYnMgZm9yIGVhY2ggZW52aXJvbm1lbnRcbiAgICogQGRlZmF1bHQgXCJtYXRyaXhcIlxuICAgKi9cbiAgcmVhZG9ubHkgam9iU3RyYXRlZ3k/OiBEZXBsb3lKb2JTdHJhdGVneTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudE9wdGlvbnMge1xuICAvKipcbiAgICogRW52aXJvbm1lbnQgbmFtZSB0byBkZXBsb3kgdG9cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIGNyZWRlbnRpYWwgZGV0YWlscyBmb3IgZGVwbG95bWVudFxuICAgKi9cbiAgcmVhZG9ubHkgYXdzQ3JlZGVudGlhbHM6IEFXU0NyZWRlbnRpYWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NyaXB0L3Rhc2sgdG8gcnVuIGFmdGVyIGRlcGxveW1lbnQgb2YgdGhlIGVudmlyb25tZW50IGluIHRoZSB3b3JrZmxvd1xuICAgKiBJZiBub3QgcHJlc2VudCwgdGhlIHdvcmtmbG93IHdpbGwgbm90IGV4ZWN1dGUgdGhhdFxuICAgKlxuICAgKiBAZXhhbXBsZSBcInBvc3Q6ZGVwbG95XCJcbiAgICovXG4gIHJlYWRvbmx5IHBvc3REZXBsb3lXb3JrZmxvd1NjcmlwdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNjcmlwdC90YXNrIHRvIHJ1biBiZWZvcmUgZGVwbG95bWVudCBvZiB0aGUgZW52aXJvbm1lbnQgaW4gdGhlIHdvcmtmbG93XG4gICAqIElmIG5vdCBwcmVzZW50LCB0aGUgd29ya2Zsb3cgd2lsbCBub3QgZXhlY3V0ZSB0aGF0XG4gICAqXG4gICAqIEBleGFtcGxlIFwicHJlOmRlcGxveVwiXG4gICAqL1xuICByZWFkb25seSBwcmVEZXBsb3lXb3JrZmxvd1NjcmlwdD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBV1NDcmVkZW50aWFscyB7XG4gIC8qKlxuICAgKiBHaXRIdWIgU2VjcmV0IG5hbWUgZm9yIEFXUyBBY2Nlc3MgS2V5IElkXG4gICAqIEBkZWZhdWx0IFwiQVdTX0FDQ0VTU19LRVlfSURcIlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjZXNzS2V5SWRTZWNyZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgU2VjcmV0IG5hbWUgZm9yIEFXUyBTZWNyZXQgQWNjZXNzIEtleVxuICAgKiBAZGVmYXVsdCBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiXG4gICAqL1xuICByZWFkb25seSBzZWNyZXRBY2Nlc3NLZXlTZWNyZXROYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgQVdTIHJvbGUgdG8gYmUgYXNzdW1lZFxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZVRvQXNzdW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEdXJhdGlvbiBvZiBhc3N1bWUgcm9sZSBzZXNzaW9uXG4gICAqIEBkZWZhdWx0IDkwMFxuICAgKi9cbiAgcmVhZG9ubHkgYXNzdW1lUm9sZUR1cmF0aW9uU2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogRGVmYXVsdCBBV1MgcmVnaW9uIGZvciB0aGUgYWNjb3VudFxuICAgKiBAZXhhbXBsZSBcInVzLWVhc3QtMlwiXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIG1hcCBvZiBlbnZpcm9ubWVudCBuYW1lcyB0byB0aGUgbGlzdCBvZiBlbnZpcm9ubWVudCBuYW1lcyB0aGV5IGRlcGVuZCBvbiBmb3IgZGVwbG95bWVudFxuICovXG5leHBvcnQgdHlwZSBFbnZpcm9ubWVudERlcGxveW1lbnREZXBlbmRlbmNpZXMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBNkNBLElBQVksaUJBR1g7QUFIRCxXQUFZLGlCQUFpQjtJQUMzQixzQ0FBaUIsQ0FBQTtJQUNqQiw0Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBSFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFHNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhd3NjZGssIEdyb3VwUnVubmVyT3B0aW9ucyB9IGZyb20gJ3Byb2plbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95YWJsZUF3c0Nka1R5cGVTY3JpcHRBcHBEaWZmT3V0cHV0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgZGlmZiBvdXRwdXQgdG8gYSBmaWxlIGluIGNkay5vdXRcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbm5vdGF0ZSB0aGUgZGlmZiBvdXRwdXQgaW4gdGhlIEdpdEh1YiBQUiBhcyB3ZWxsXG4gICAqIFRoaXMgY2Fubm90IGJlIHNldCB0byB0cnVlIGlmIHRoZSBkaWZmIG91dHB1dCBpcyBub3QgZW5hYmxlZFxuICAgKiBAZGVmYXVsdCB0cnVlIGlmIHRoZSBkaWZmIGlzIGVuYWJsZWQsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgcmVhZG9ubHkgYW5ub3RhdGVPbkJ1aWxkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXBsb3lhYmxlQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMgZXh0ZW5kcyBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcE9wdGlvbnMge1xuICAvKipcbiAgICogRGVwbG95bWVudCBvcHRpb25zXG4gICAqIEBkZWZhdWx0IFwiY29uZmlnIHdpdGggZW1wdHkgbGlzdCBvZiBlbnZpcm9ubWVudHNcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T3B0aW9ucz86IERlcGxveU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZ2VuZXJhdGUgbnZtcmMgZmlsZSBmb3IgdGhlIG5vZGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdFxuICAgKiBpZiBzZXQgdG8gdHJ1ZSwgYW5kIG5vIFwid29ya2Zsb3dOb2RlVmVyc2lvblwiIGlzIHNwZWNpZmllZCB3aWxsIHVzZSB2ZXJzaW9uIDE0LjE4LjFcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhdGVOdm1yYz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2sgYW5kIHNraXAgdGhlIGRlcGxveW1lbnQgZm9yIGVudmlyb25tZW50cyB0aGF0IGhhdmUgYWN0aXZlIGRlcGxveW1lbnQgb2YgdGhlIHNhbWUgY29tbWl0XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjaGVja0FjdGl2ZURlcGxveW1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDREsgZGlmZiBvdXRwdXQgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCBkaWZmIG91dHB1dCBkaXNhYmxlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlmZk91dHB1dD86IERlcGxveWFibGVBd3NDZGtUeXBlU2NyaXB0QXBwRGlmZk91dHB1dE9wdGlvbnM7XG59XG5cbmV4cG9ydCB0eXBlIERlcGxveU1ldGhvZCA9ICdkaXJlY3QnIHwgJ2NoYW5nZS1zZXQnIHwgJ3ByZXBhcmUtY2hhbmdlLXNldCc7XG5cbmV4cG9ydCBlbnVtIERlcGxveUpvYlN0cmF0ZWd5IHtcbiAgTUFUUklYID0gJ21hdHJpeCcsXG4gIE1VTFRJX0pPQiA9ICdtdWx0aS1qb2InLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveU9wdGlvbnMge1xuICAvKipcbiAgICogRW52aXJvbm1lbnQgc2V0dGluZ3MgdG8gZGVwbG95IHRvXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudHM6IEVudmlyb25tZW50T3B0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBSZWdleCBmb3Igc3RhY2tzIHRvIGJlIGRlcGxveWVkXG4gICAqXG4gICAqIGlmIG5vdCBwcm92aWRlZCBtYXRjaGVzIGFsbCBvZiB0aGUgc3RhY2tzIGluIHRoZSBDREsgQXBwLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrUGF0dGVybj86IHN0cmluZztcblxuICAvKipcbiAgICogbnBtIGNvbmZpZyBuYW1lIHRvIHNldCBhcyB0aGUgZW52aXJvbm1lbnQgbmFtZVxuICAgKiBUaGlzIG1pZ2h0IGJlIHVzZWZ1bCBpbiBkZXBsb3ltZW50IHByb2Nlc3NcbiAgICpcbiAgICogRG9lcyBub3Qgc3VwcG9ydCBub2RlIHZlcnNpb25zIGFib3ZlIDE4LlxuICAgKlxuICAgKiBpZiBub3QgcHJvdmlkZWQgd2lsbCBub3Qgc2V0XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgbnBtQ29uZmlnRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIHVzZWQgdG8gc2V0IHRoZSBkZXBsb3kgZW52aXJvbm1lbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudFZhcmlhYmxlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogdGFzayBuYW1lIHRvIHJ1biBwcmlvciB0byBpbnN0YWxsYXRpb24gaW4gZGVwbG95IGpvYiBvZiB3b3JrZmxvd1xuICAgKiBpZiBub3QgcHJvdmlkZWQgd2lsbCBub3QgYWRkIHRvIHdvcmtmbG93XG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdGFza1RvUnVuUHJlSW5zdGFsbD86IHN0cmluZztcblxuICAvKipcbiAgICogSG93IHRvIHBlcmZvcm0gdGhlIGRlcGxveW1lbnQuIERpcmVjdCBpcyBhIGJpdCBmYXN0ZXIgYnV0IGxhY2tzIHByb2dyZXNzIGluZm9ybWF0aW9uXG4gICAqIEBkZWZhdWx0IFwiY2hhbmdlLXNldFwiXG4gICAqL1xuICByZWFkb25seSBtZXRob2Q/OiBEZXBsb3lNZXRob2Q7XG5cbiAgLyoqXG4gICAqIERlcGxveW1lbnQgam9iIHN0cmF0ZWd5LCB3aGV0aGVyIHRvIHVzZSBhIG1hdHJpeCBqb2Igb3IgbXVsdGlwbGUgam9icyBmb3IgZWFjaCBlbnZpcm9ubWVudFxuICAgKiBAZGVmYXVsdCBcIm1hdHJpeFwiXG4gICAqL1xuICByZWFkb25seSBqb2JTdHJhdGVneT86IERlcGxveUpvYlN0cmF0ZWd5O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudmlyb25tZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCBuYW1lIHRvIGRlcGxveSB0b1xuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBV1MgY3JlZGVudGlhbCBkZXRhaWxzIGZvciBkZXBsb3ltZW50XG4gICAqL1xuICByZWFkb25seSBhd3NDcmVkZW50aWFsczogQVdTQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQvdGFzayB0byBydW4gYWZ0ZXIgZGVwbG95bWVudCBvZiB0aGUgZW52aXJvbm1lbnQgaW4gdGhlIHdvcmtmbG93XG4gICAqIElmIG5vdCBwcmVzZW50LCB0aGUgd29ya2Zsb3cgd2lsbCBub3QgZXhlY3V0ZSB0aGF0XG4gICAqXG4gICAqIEBleGFtcGxlIFwicG9zdDpkZXBsb3lcIlxuICAgKi9cbiAgcmVhZG9ubHkgcG9zdERlcGxveVdvcmtmbG93U2NyaXB0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc2NyaXB0L3Rhc2sgdG8gcnVuIGJlZm9yZSBkZXBsb3ltZW50IG9mIHRoZSBlbnZpcm9ubWVudCBpbiB0aGUgd29ya2Zsb3dcbiAgICogSWYgbm90IHByZXNlbnQsIHRoZSB3b3JrZmxvdyB3aWxsIG5vdCBleGVjdXRlIHRoYXRcbiAgICpcbiAgICogQGV4YW1wbGUgXCJwcmU6ZGVwbG95XCJcbiAgICovXG4gIHJlYWRvbmx5IHByZURlcGxveVdvcmtmbG93U2NyaXB0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBydW5uZXIgdG8gdXNlIGZvciB0aGUgZGVwbG95bWVudCBqb2JzIGluIHRoZSB3b3JrZmxvd1xuICAgKiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgaW4gTWF0cml4IGpvYiBzdHJhdGVneSBhbmQgd2lsbCBiZSBpZ25vcmVkIGlmIHRoZSBqb2Igc3RyYXRlZ3kgaXMgc2V0IHRvIE1hdHJpeFxuICAgKiBAZGVmYXVsdCBcInVidW50dS1sYXRlc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIEdyb3VwIHNlbGVjdGlvbiBvcHRpb25zXG4gICAqIFRoaXMgaXMgbm90IHN1cHBvcnRlZCBpbiBNYXRyaXggam9iIHN0cmF0ZWd5IGFuZCB3aWxsIGJlIGlnbm9yZWQgaWYgdGhlIGpvYiBzdHJhdGVneSBpcyBzZXQgdG8gTWF0cml4XG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBHcm91cCBieSBuYW1lIGFuZC9vciBsYWJlbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgYXJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uR3JvdXA/OiBHcm91cFJ1bm5lck9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVdTQ3JlZGVudGlhbHMge1xuICAvKipcbiAgICogR2l0SHViIFNlY3JldCBuYW1lIGZvciBBV1MgQWNjZXNzIEtleSBJZFxuICAgKiBAZGVmYXVsdCBcIkFXU19BQ0NFU1NfS0VZX0lEXCJcbiAgICovXG4gIHJlYWRvbmx5IGFjY2Vzc0tleUlkU2VjcmV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogR2l0SHViIFNlY3JldCBuYW1lIGZvciBBV1MgU2VjcmV0IEFjY2VzcyBLZXlcbiAgICogQGRlZmF1bHQgXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVlcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0QWNjZXNzS2V5U2VjcmV0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQVJOIG9mIEFXUyByb2xlIHRvIGJlIGFzc3VtZWRcbiAgICovXG4gIHJlYWRvbmx5IHJvbGVUb0Fzc3VtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRHVyYXRpb24gb2YgYXNzdW1lIHJvbGUgc2Vzc2lvblxuICAgKiBAZGVmYXVsdCA5MDBcbiAgICovXG4gIHJlYWRvbmx5IGFzc3VtZVJvbGVEdXJhdGlvblNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgQVdTIHJlZ2lvbiBmb3IgdGhlIGFjY291bnRcbiAgICogQGV4YW1wbGUgXCJ1cy1lYXN0LTJcIlxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBtYXAgb2YgZW52aXJvbm1lbnQgbmFtZXMgdG8gdGhlIGxpc3Qgb2YgZW52aXJvbm1lbnQgbmFtZXMgdGhleSBkZXBlbmQgb24gZm9yIGRlcGxveW1lbnRcbiAqL1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnREZXBsb3ltZW50RGVwZW5kZW5jaWVzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuIl19
package/package.json CHANGED
@@ -69,7 +69,7 @@
69
69
  "publishConfig": {
70
70
  "access": "public"
71
71
  },
72
- "version": "0.1.847",
72
+ "version": "0.1.848",
73
73
  "jest": {
74
74
  "coverageProvider": "v8",
75
75
  "testMatch": [