aws-cdk 2.9.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +3 -2
  3. package/bin/cdk.d.ts +1 -3
  4. package/bin/cdk.js +3 -511
  5. package/build-info.json +2 -2
  6. package/lib/api/aws-auth/sdk.d.ts +2 -0
  7. package/lib/api/aws-auth/sdk.js +4 -1
  8. package/lib/api/cloudformation-deployments.d.ts +8 -5
  9. package/lib/api/cloudformation-deployments.js +90 -38
  10. package/lib/api/cxapp/cloud-executable.js +12 -8
  11. package/lib/api/evaluate-cloudformation-template.js +34 -2
  12. package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
  13. package/lib/api/hotswap/appsync-mapping-templates.js +69 -0
  14. package/lib/api/hotswap/lambda-functions.js +48 -13
  15. package/lib/api/hotswap-deployments.js +3 -1
  16. package/lib/api/toolkit-info.js +5 -5
  17. package/lib/api/util/placeholders.d.ts +6 -0
  18. package/lib/api/util/placeholders.js +25 -0
  19. package/lib/assets.js +2 -1
  20. package/lib/cdk-toolkit.js +3 -3
  21. package/lib/cli.d.ts +3 -0
  22. package/lib/cli.js +545 -0
  23. package/lib/commands/context.d.ts +0 -16
  24. package/lib/commands/context.js +2 -20
  25. package/lib/commands/docs.d.ts +0 -13
  26. package/lib/commands/docs.js +2 -19
  27. package/lib/commands/doctor.d.ts +0 -5
  28. package/lib/commands/doctor.js +2 -9
  29. package/lib/context-providers/ami.d.ts +1 -1
  30. package/lib/context-providers/ami.js +3 -3
  31. package/lib/context-providers/availability-zones.d.ts +1 -1
  32. package/lib/context-providers/availability-zones.js +3 -3
  33. package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -1
  34. package/lib/context-providers/endpoint-service-availability-zones.js +3 -3
  35. package/lib/context-providers/hosted-zones.d.ts +1 -1
  36. package/lib/context-providers/hosted-zones.js +3 -3
  37. package/lib/context-providers/index.d.ts +6 -0
  38. package/lib/context-providers/index.js +18 -5
  39. package/lib/context-providers/keys.d.ts +1 -1
  40. package/lib/context-providers/keys.js +3 -3
  41. package/lib/context-providers/load-balancers.d.ts +1 -1
  42. package/lib/context-providers/load-balancers.js +4 -4
  43. package/lib/context-providers/security-groups.d.ts +1 -1
  44. package/lib/context-providers/security-groups.js +3 -3
  45. package/lib/context-providers/ssm-parameters.d.ts +1 -1
  46. package/lib/context-providers/ssm-parameters.js +3 -3
  47. package/lib/context-providers/vpcs.d.ts +1 -1
  48. package/lib/context-providers/vpcs.js +6 -3
  49. package/lib/index.d.ts +3 -0
  50. package/lib/index.js +17 -0
  51. package/lib/init-templates/v1/app/csharp/cdk.template.json +1 -1
  52. package/lib/init-templates/v1/app/fsharp/cdk.template.json +1 -1
  53. package/lib/init-templates/v1/app/javascript/README.md +5 -5
  54. package/lib/init-templates/v1/app/typescript/README.md +7 -7
  55. package/lib/init-templates/v1/lib/typescript/README.template.md +4 -4
  56. package/lib/init-templates/v1/sample-app/csharp/cdk.template.json +1 -1
  57. package/lib/init-templates/v1/sample-app/fsharp/cdk.template.json +1 -1
  58. package/lib/init-templates/v1/sample-app/javascript/README.template.md +7 -6
  59. package/lib/init-templates/v1/sample-app/typescript/README.template.md +9 -9
  60. package/lib/init-templates/v2/app/csharp/cdk.template.json +1 -1
  61. package/lib/init-templates/v2/app/fsharp/cdk.template.json +1 -1
  62. package/lib/init-templates/v2/app/javascript/README.md +5 -5
  63. package/lib/init-templates/v2/app/typescript/README.md +7 -7
  64. package/lib/init-templates/v2/lib/typescript/README.template.md +4 -4
  65. package/lib/init-templates/v2/sample-app/csharp/cdk.template.json +1 -1
  66. package/lib/init-templates/v2/sample-app/fsharp/cdk.template.json +1 -1
  67. package/lib/init-templates/v2/sample-app/javascript/README.template.md +5 -5
  68. package/lib/init-templates/v2/sample-app/typescript/README.template.md +7 -7
  69. package/lib/plugin.d.ts +15 -1
  70. package/lib/plugin.js +17 -3
  71. package/lib/util/asset-publishing.d.ts +1 -1
  72. package/lib/util/asset-publishing.js +4 -4
  73. package/npm-shrinkwrap.json +96 -52
  74. package/package.json +16 -15
  75. package/test/api/cloud-executable.test.js +57 -32
  76. package/test/api/cloudformation-deployments.test.js +643 -1
  77. package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.d.ts +1 -0
  78. package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.js +336 -0
  79. package/test/api/hotswap/hotswap-deployments.test.js +2 -2
  80. package/test/api/hotswap/hotswap-test-setup.d.ts +7 -1
  81. package/test/api/hotswap/hotswap-test-setup.js +22 -3
  82. package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +59 -2
  83. package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +175 -2
  84. package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.js +2 -2
  85. package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.js +2 -2
  86. package/test/api/hotswap/state-machine-hotswap-deployments.test.js +72 -1
  87. package/test/api/logs/logs-monitor.test.js +9 -13
  88. package/test/cdk-docs.test.js +4 -7
  89. package/test/cdk-doctor.test.js +3 -4
  90. package/test/context-providers/generic.test.js +7 -6
  91. package/test/context-providers/vpcs.test.js +132 -1
  92. package/test/diff-nested-stacks-templates/one-output-one-param-stack.nested.template.json +20 -0
  93. package/test/diff-nested-stacks-templates/one-resource-one-stack-stack.nested.template.json +19 -0
  94. package/test/diff-nested-stacks-templates/one-resource-stack.nested.template.json +10 -0
  95. package/test/diff-nested-stacks-templates/one-resource-two-stacks-stack.nested.template.json +28 -0
  96. package/test/diff.test.js +215 -96
  97. package/test/util/mock-sdk.d.ts +9 -1
  98. package/test/util/mock-sdk.js +13 -3
  99. package/test/util.js +18 -1
@@ -0,0 +1,336 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const setup = require("./hotswap-test-setup");
4
+ let hotswapMockSdkProvider;
5
+ let mockUpdateResolver;
6
+ let mockUpdateFunction;
7
+ beforeEach(() => {
8
+ hotswapMockSdkProvider = setup.setupHotswapTests();
9
+ mockUpdateResolver = jest.fn();
10
+ mockUpdateFunction = jest.fn();
11
+ hotswapMockSdkProvider.stubAppSync({ updateResolver: mockUpdateResolver, updateFunction: mockUpdateFunction });
12
+ });
13
+ test('returns undefined when a new Resolver is added to the Stack', async () => {
14
+ // GIVEN
15
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
16
+ template: {
17
+ Resources: {
18
+ AppSyncResolver: {
19
+ Type: 'AWS::AppSync::Resolver',
20
+ },
21
+ },
22
+ },
23
+ });
24
+ // WHEN
25
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
26
+ // THEN
27
+ expect(deployStackResult).toBeUndefined();
28
+ });
29
+ test('calls the updateResolver() API when it receives only a mapping template difference in a Unit Resolver', async () => {
30
+ // GIVEN
31
+ setup.setCurrentCfnStackTemplate({
32
+ Resources: {
33
+ AppSyncResolver: {
34
+ Type: 'AWS::AppSync::Resolver',
35
+ Properties: {
36
+ ApiId: 'apiId',
37
+ FieldName: 'myField',
38
+ TypeName: 'Query',
39
+ DataSourceName: 'my-datasource',
40
+ Kind: 'UNIT',
41
+ RequestMappingTemplate: '## original request template',
42
+ ResponseMappingTemplate: '## original response template',
43
+ },
44
+ Metadata: {
45
+ 'aws:asset:path': 'old-path',
46
+ },
47
+ },
48
+ },
49
+ });
50
+ setup.pushStackResourceSummaries(setup.stackSummaryOf('AppSyncResolver', 'AWS::AppSync::Resolver', 'arn:aws:appsync:us-east-1:111111111111:apis/apiId/types/Query/resolvers/myField'));
51
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
52
+ template: {
53
+ Resources: {
54
+ AppSyncResolver: {
55
+ Type: 'AWS::AppSync::Resolver',
56
+ Properties: {
57
+ ApiId: 'apiId',
58
+ FieldName: 'myField',
59
+ TypeName: 'Query',
60
+ DataSourceName: 'my-datasource',
61
+ Kind: 'UNIT',
62
+ RequestMappingTemplate: '## new request template',
63
+ ResponseMappingTemplate: '## original response template',
64
+ },
65
+ Metadata: {
66
+ 'aws:asset:path': 'new-path',
67
+ },
68
+ },
69
+ },
70
+ },
71
+ });
72
+ // WHEN
73
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
74
+ // THEN
75
+ expect(deployStackResult).not.toBeUndefined();
76
+ expect(mockUpdateResolver).toHaveBeenCalledWith({
77
+ apiId: 'apiId',
78
+ dataSourceName: 'my-datasource',
79
+ typeName: 'Query',
80
+ fieldName: 'myField',
81
+ kind: 'UNIT',
82
+ requestMappingTemplate: '## new request template',
83
+ responseMappingTemplate: '## original response template',
84
+ });
85
+ });
86
+ test('does not call the updateResolver() API when it receives only a mapping template difference in a Pipeline Resolver', async () => {
87
+ // GIVEN
88
+ setup.setCurrentCfnStackTemplate({
89
+ Resources: {
90
+ AppSyncResolver: {
91
+ Type: 'AWS::AppSync::Resolver',
92
+ Properties: {
93
+ ApiId: 'apiId',
94
+ FieldName: 'myField',
95
+ TypeName: 'Query',
96
+ DataSourceName: 'my-datasource',
97
+ Kind: 'PIPELINE',
98
+ PipelineConfig: ['function1'],
99
+ RequestMappingTemplate: '## original request template',
100
+ ResponseMappingTemplate: '## original response template',
101
+ },
102
+ Metadata: {
103
+ 'aws:asset:path': 'old-path',
104
+ },
105
+ },
106
+ },
107
+ });
108
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
109
+ template: {
110
+ Resources: {
111
+ AppSyncResolver: {
112
+ Type: 'AWS::AppSync::Resolver',
113
+ Properties: {
114
+ ApiId: 'apiId',
115
+ FieldName: 'myField',
116
+ TypeName: 'Query',
117
+ DataSourceName: 'my-datasource',
118
+ Kind: 'PIPELINE',
119
+ PipelineConfig: ['function1'],
120
+ RequestMappingTemplate: '## new request template',
121
+ ResponseMappingTemplate: '## original response template',
122
+ },
123
+ Metadata: {
124
+ 'aws:asset:path': 'new-path',
125
+ },
126
+ },
127
+ },
128
+ },
129
+ });
130
+ // WHEN
131
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
132
+ // THEN
133
+ expect(deployStackResult).toBeUndefined();
134
+ expect(mockUpdateResolver).not.toHaveBeenCalled();
135
+ });
136
+ test('does not call the updateResolver() API when it receives a change that is not a mapping template difference in a Resolver', async () => {
137
+ // GIVEN
138
+ setup.setCurrentCfnStackTemplate({
139
+ Resources: {
140
+ AppSyncResolver: {
141
+ Type: 'AWS::AppSync::Resolver',
142
+ Properties: {
143
+ RequestMappingTemplate: '## original template',
144
+ FieldName: 'oldField',
145
+ },
146
+ Metadata: {
147
+ 'aws:asset:path': 'old-path',
148
+ },
149
+ },
150
+ },
151
+ });
152
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
153
+ template: {
154
+ Resources: {
155
+ AppSyncResolver: {
156
+ Type: 'AWS::AppSync::Resolver',
157
+ Properties: {
158
+ RequestMappingTemplate: '## new template',
159
+ FieldName: 'newField',
160
+ },
161
+ },
162
+ },
163
+ },
164
+ });
165
+ // WHEN
166
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
167
+ // THEN
168
+ expect(deployStackResult).toBeUndefined();
169
+ expect(mockUpdateResolver).not.toHaveBeenCalled();
170
+ });
171
+ test('does not call the updateResolver() API when a resource with type that is not AWS::AppSync::Resolver but has the same properties is changed', async () => {
172
+ // GIVEN
173
+ setup.setCurrentCfnStackTemplate({
174
+ Resources: {
175
+ AppSyncResolver: {
176
+ Type: 'AWS::AppSync::NotAResolver',
177
+ Properties: {
178
+ RequestMappingTemplate: '## original template',
179
+ FieldName: 'oldField',
180
+ },
181
+ Metadata: {
182
+ 'aws:asset:path': 'old-path',
183
+ },
184
+ },
185
+ },
186
+ });
187
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
188
+ template: {
189
+ Resources: {
190
+ AppSyncResolver: {
191
+ Type: 'AWS::AppSync::NotAResolver',
192
+ Properties: {
193
+ RequestMappingTemplate: '## new template',
194
+ FieldName: 'newField',
195
+ },
196
+ },
197
+ },
198
+ },
199
+ });
200
+ // WHEN
201
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
202
+ // THEN
203
+ expect(deployStackResult).toBeUndefined();
204
+ expect(mockUpdateResolver).not.toHaveBeenCalled();
205
+ });
206
+ test('calls the updateFunction() API when it receives only a mapping template difference in a Function', async () => {
207
+ // GIVEN
208
+ const mockListFunctions = jest.fn().mockReturnValue({ functions: [{ name: 'my-function', functionId: 'functionId' }] });
209
+ hotswapMockSdkProvider.stubAppSync({ listFunctions: mockListFunctions, updateFunction: mockUpdateFunction });
210
+ setup.setCurrentCfnStackTemplate({
211
+ Resources: {
212
+ AppSyncFunction: {
213
+ Type: 'AWS::AppSync::FunctionConfiguration',
214
+ Properties: {
215
+ Name: 'my-function',
216
+ ApiId: 'apiId',
217
+ DataSourceName: 'my-datasource',
218
+ FunctionVersion: '2018-05-29',
219
+ RequestMappingTemplate: '## original request template',
220
+ ResponseMappingTemplate: '## original response template',
221
+ },
222
+ Metadata: {
223
+ 'aws:asset:path': 'old-path',
224
+ },
225
+ },
226
+ },
227
+ });
228
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
229
+ template: {
230
+ Resources: {
231
+ AppSyncFunction: {
232
+ Type: 'AWS::AppSync::FunctionConfiguration',
233
+ Properties: {
234
+ Name: 'my-function',
235
+ ApiId: 'apiId',
236
+ DataSourceName: 'my-datasource',
237
+ FunctionVersion: '2018-05-29',
238
+ RequestMappingTemplate: '## original request template',
239
+ ResponseMappingTemplate: '## new response template',
240
+ },
241
+ Metadata: {
242
+ 'aws:asset:path': 'new-path',
243
+ },
244
+ },
245
+ },
246
+ },
247
+ });
248
+ // WHEN
249
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
250
+ // THEN
251
+ expect(deployStackResult).not.toBeUndefined();
252
+ expect(mockUpdateFunction).toHaveBeenCalledWith({
253
+ apiId: 'apiId',
254
+ dataSourceName: 'my-datasource',
255
+ functionId: 'functionId',
256
+ functionVersion: '2018-05-29',
257
+ name: 'my-function',
258
+ requestMappingTemplate: '## original request template',
259
+ responseMappingTemplate: '## new response template',
260
+ });
261
+ });
262
+ test('does not call the updateFunction() API when it receives a change that is not a mapping template difference in a Function', async () => {
263
+ // GIVEN
264
+ setup.setCurrentCfnStackTemplate({
265
+ Resources: {
266
+ AppSyncFunction: {
267
+ Type: 'AWS::AppSync::FunctionConfiguration',
268
+ Properties: {
269
+ RequestMappingTemplate: '## original template',
270
+ Name: 'my-function',
271
+ DataSourceName: 'my-datasource',
272
+ },
273
+ Metadata: {
274
+ 'aws:asset:path': 'old-path',
275
+ },
276
+ },
277
+ },
278
+ });
279
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
280
+ template: {
281
+ Resources: {
282
+ AppSyncFunction: {
283
+ Type: 'AWS::AppSync::FunctionConfiguration',
284
+ Properties: {
285
+ RequestMappingTemplate: '## new template',
286
+ Name: 'my-function',
287
+ DataSourceName: 'new-datasource',
288
+ },
289
+ },
290
+ },
291
+ },
292
+ });
293
+ // WHEN
294
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
295
+ // THEN
296
+ expect(deployStackResult).toBeUndefined();
297
+ expect(mockUpdateFunction).not.toHaveBeenCalled();
298
+ });
299
+ test('does not call the updateFunction() API when a resource with type that is not AWS::AppSync::FunctionConfiguration but has the same properties is changed', async () => {
300
+ // GIVEN
301
+ setup.setCurrentCfnStackTemplate({
302
+ Resources: {
303
+ AppSyncFunction: {
304
+ Type: 'AWS::AppSync::NotAFunctionConfiguration',
305
+ Properties: {
306
+ RequestMappingTemplate: '## original template',
307
+ Name: 'my-function',
308
+ DataSourceName: 'my-datasource',
309
+ },
310
+ Metadata: {
311
+ 'aws:asset:path': 'old-path',
312
+ },
313
+ },
314
+ },
315
+ });
316
+ const cdkStackArtifact = setup.cdkStackArtifactOf({
317
+ template: {
318
+ Resources: {
319
+ AppSyncFunction: {
320
+ Type: 'AWS::AppSync::NotAFunctionConfiguration',
321
+ Properties: {
322
+ RequestMappingTemplate: '## new template',
323
+ Name: 'my-resolver',
324
+ DataSourceName: 'my-datasource',
325
+ },
326
+ },
327
+ },
328
+ },
329
+ });
330
+ // WHEN
331
+ const deployStackResult = await hotswapMockSdkProvider.tryHotswapDeployment(cdkStackArtifact);
332
+ // THEN
333
+ expect(deployStackResult).toBeUndefined();
334
+ expect(mockUpdateFunction).not.toHaveBeenCalled();
335
+ });
336
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1tYXBwaW5nLXRlbXBsYXRlcy1ob3Rzd2FwLWRlcGxveW1lbnRzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBzeW5jLW1hcHBpbmctdGVtcGxhdGVzLWhvdHN3YXAtZGVwbG95bWVudHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDhDQUE4QztBQUU5QyxJQUFJLHNCQUFvRCxDQUFDO0FBQ3pELElBQUksa0JBQTZGLENBQUM7QUFDbEcsSUFBSSxrQkFBNkYsQ0FBQztBQUVsRyxVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2Qsc0JBQXNCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDbkQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQixzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNqSCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyw2REFBNkQsRUFBRSxLQUFLLElBQUksRUFBRTtJQUM3RSxRQUFRO0lBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEQsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRTtvQkFDZixJQUFJLEVBQUUsd0JBQXdCO2lCQUMvQjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUYsT0FBTztJQUNQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLHVHQUF1RyxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQ3ZILFFBQVE7SUFDUixLQUFLLENBQUMsMEJBQTBCLENBQUM7UUFDL0IsU0FBUyxFQUFFO1lBQ1QsZUFBZSxFQUFFO2dCQUNmLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLFVBQVUsRUFBRTtvQkFDVixLQUFLLEVBQUUsT0FBTztvQkFDZCxTQUFTLEVBQUUsU0FBUztvQkFDcEIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLGNBQWMsRUFBRSxlQUFlO29CQUMvQixJQUFJLEVBQUUsTUFBTTtvQkFDWixzQkFBc0IsRUFBRSw4QkFBOEI7b0JBQ3RELHVCQUF1QixFQUFFLCtCQUErQjtpQkFDekQ7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLGdCQUFnQixFQUFFLFVBQVU7aUJBQzdCO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQywwQkFBMEIsQ0FDOUIsS0FBSyxDQUFDLGNBQWMsQ0FDbEIsaUJBQWlCLEVBQ2pCLHdCQUF3QixFQUN4QixpRkFBaUYsQ0FDbEYsQ0FDRixDQUFDO0lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEQsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRTtvQkFDZixJQUFJLEVBQUUsd0JBQXdCO29CQUM5QixVQUFVLEVBQUU7d0JBQ1YsS0FBSyxFQUFFLE9BQU87d0JBQ2QsU0FBUyxFQUFFLFNBQVM7d0JBQ3BCLFFBQVEsRUFBRSxPQUFPO3dCQUNqQixjQUFjLEVBQUUsZUFBZTt3QkFDL0IsSUFBSSxFQUFFLE1BQU07d0JBQ1osc0JBQXNCLEVBQUUseUJBQXlCO3dCQUNqRCx1QkFBdUIsRUFBRSwrQkFBK0I7cUJBQ3pEO29CQUNELFFBQVEsRUFBRTt3QkFDUixnQkFBZ0IsRUFBRSxVQUFVO3FCQUM3QjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUYsT0FBTztJQUNQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQztRQUM5QyxLQUFLLEVBQUUsT0FBTztRQUNkLGNBQWMsRUFBRSxlQUFlO1FBQy9CLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFNBQVMsRUFBRSxTQUFTO1FBQ3BCLElBQUksRUFBRSxNQUFNO1FBQ1osc0JBQXNCLEVBQUUseUJBQXlCO1FBQ2pELHVCQUF1QixFQUFFLCtCQUErQjtLQUN6RCxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxtSEFBbUgsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNuSSxRQUFRO0lBQ1IsS0FBSyxDQUFDLDBCQUEwQixDQUFDO1FBQy9CLFNBQVMsRUFBRTtZQUNULGVBQWUsRUFBRTtnQkFDZixJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLE9BQU87b0JBQ2QsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFFBQVEsRUFBRSxPQUFPO29CQUNqQixjQUFjLEVBQUUsZUFBZTtvQkFDL0IsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLGNBQWMsRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDN0Isc0JBQXNCLEVBQUUsOEJBQThCO29CQUN0RCx1QkFBdUIsRUFBRSwrQkFBK0I7aUJBQ3pEO2dCQUNELFFBQVEsRUFBRTtvQkFDUixnQkFBZ0IsRUFBRSxVQUFVO2lCQUM3QjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxFQUFFO29CQUNmLElBQUksRUFBRSx3QkFBd0I7b0JBQzlCLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsT0FBTzt3QkFDZCxTQUFTLEVBQUUsU0FBUzt3QkFDcEIsUUFBUSxFQUFFLE9BQU87d0JBQ2pCLGNBQWMsRUFBRSxlQUFlO3dCQUMvQixJQUFJLEVBQUUsVUFBVTt3QkFDaEIsY0FBYyxFQUFFLENBQUMsV0FBVyxDQUFDO3dCQUM3QixzQkFBc0IsRUFBRSx5QkFBeUI7d0JBQ2pELHVCQUF1QixFQUFFLCtCQUErQjtxQkFDekQ7b0JBQ0QsUUFBUSxFQUFFO3dCQUNSLGdCQUFnQixFQUFFLFVBQVU7cUJBQzdCO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU5RixPQUFPO0lBQ1AsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsMEhBQTBILEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDMUksUUFBUTtJQUNSLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztRQUMvQixTQUFTLEVBQUU7WUFDVCxlQUFlLEVBQUU7Z0JBQ2YsSUFBSSxFQUFFLHdCQUF3QjtnQkFDOUIsVUFBVSxFQUFFO29CQUNWLHNCQUFzQixFQUFFLHNCQUFzQjtvQkFDOUMsU0FBUyxFQUFFLFVBQVU7aUJBQ3RCO2dCQUNELFFBQVEsRUFBRTtvQkFDUixnQkFBZ0IsRUFBRSxVQUFVO2lCQUM3QjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFDSCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQztRQUNoRCxRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUU7Z0JBQ1QsZUFBZSxFQUFFO29CQUNmLElBQUksRUFBRSx3QkFBd0I7b0JBQzlCLFVBQVUsRUFBRTt3QkFDVixzQkFBc0IsRUFBRSxpQkFBaUI7d0JBQ3pDLFNBQVMsRUFBRSxVQUFVO3FCQUN0QjtpQkFDRjthQUNGO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxPQUFPO0lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFFOUYsT0FBTztJQUNQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3BELENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDRJQUE0SSxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzVKLFFBQVE7SUFDUixLQUFLLENBQUMsMEJBQTBCLENBQUM7UUFDL0IsU0FBUyxFQUFFO1lBQ1QsZUFBZSxFQUFFO2dCQUNmLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLFVBQVUsRUFBRTtvQkFDVixzQkFBc0IsRUFBRSxzQkFBc0I7b0JBQzlDLFNBQVMsRUFBRSxVQUFVO2lCQUN0QjtnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsZ0JBQWdCLEVBQUUsVUFBVTtpQkFDN0I7YUFDRjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEQsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRTtvQkFDZixJQUFJLEVBQUUsNEJBQTRCO29CQUNsQyxVQUFVLEVBQUU7d0JBQ1Ysc0JBQXNCLEVBQUUsaUJBQWlCO3dCQUN6QyxTQUFTLEVBQUUsVUFBVTtxQkFDdEI7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTztJQUNQLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlGLE9BQU87SUFDUCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMxQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUNwRCxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxrR0FBa0csRUFBRSxLQUFLLElBQUksRUFBRTtJQUNsSCxRQUFRO0lBQ1IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN4SCxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQztJQUU3RyxLQUFLLENBQUMsMEJBQTBCLENBQUM7UUFDL0IsU0FBUyxFQUFFO1lBQ1QsZUFBZSxFQUFFO2dCQUNmLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLFVBQVUsRUFBRTtvQkFDVixJQUFJLEVBQUUsYUFBYTtvQkFDbkIsS0FBSyxFQUFFLE9BQU87b0JBQ2QsY0FBYyxFQUFFLGVBQWU7b0JBQy9CLGVBQWUsRUFBRSxZQUFZO29CQUM3QixzQkFBc0IsRUFBRSw4QkFBOEI7b0JBQ3RELHVCQUF1QixFQUFFLCtCQUErQjtpQkFDekQ7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLGdCQUFnQixFQUFFLFVBQVU7aUJBQzdCO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ2hELFFBQVEsRUFBRTtZQUNSLFNBQVMsRUFBRTtnQkFDVCxlQUFlLEVBQUU7b0JBQ2YsSUFBSSxFQUFFLHFDQUFxQztvQkFDM0MsVUFBVSxFQUFFO3dCQUNWLElBQUksRUFBRSxhQUFhO3dCQUNuQixLQUFLLEVBQUUsT0FBTzt3QkFDZCxjQUFjLEVBQUUsZUFBZTt3QkFDL0IsZUFBZSxFQUFFLFlBQVk7d0JBQzdCLHNCQUFzQixFQUFFLDhCQUE4Qjt3QkFDdEQsdUJBQXVCLEVBQUUsMEJBQTBCO3FCQUNwRDtvQkFDRCxRQUFRLEVBQUU7d0JBQ1IsZ0JBQWdCLEVBQUUsVUFBVTtxQkFDN0I7aUJBQ0Y7YUFDRjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTztJQUNQLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlGLE9BQU87SUFDUCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsb0JBQW9CLENBQUM7UUFDOUMsS0FBSyxFQUFFLE9BQU87UUFDZCxjQUFjLEVBQUUsZUFBZTtRQUMvQixVQUFVLEVBQUUsWUFBWTtRQUN4QixlQUFlLEVBQUUsWUFBWTtRQUM3QixJQUFJLEVBQUUsYUFBYTtRQUNuQixzQkFBc0IsRUFBRSw4QkFBOEI7UUFDdEQsdUJBQXVCLEVBQUUsMEJBQTBCO0tBQ3BELENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLDBIQUEwSCxFQUFFLEtBQUssSUFBSSxFQUFFO0lBQzFJLFFBQVE7SUFDUixLQUFLLENBQUMsMEJBQTBCLENBQUM7UUFDL0IsU0FBUyxFQUFFO1lBQ1QsZUFBZSxFQUFFO2dCQUNmLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLFVBQVUsRUFBRTtvQkFDVixzQkFBc0IsRUFBRSxzQkFBc0I7b0JBQzlDLElBQUksRUFBRSxhQUFhO29CQUNuQixjQUFjLEVBQUUsZUFBZTtpQkFDaEM7Z0JBQ0QsUUFBUSxFQUFFO29CQUNSLGdCQUFnQixFQUFFLFVBQVU7aUJBQzdCO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1FBQ2hELFFBQVEsRUFBRTtZQUNSLFNBQVMsRUFBRTtnQkFDVCxlQUFlLEVBQUU7b0JBQ2YsSUFBSSxFQUFFLHFDQUFxQztvQkFDM0MsVUFBVSxFQUFFO3dCQUNWLHNCQUFzQixFQUFFLGlCQUFpQjt3QkFDekMsSUFBSSxFQUFFLGFBQWE7d0JBQ25CLGNBQWMsRUFBRSxnQkFBZ0I7cUJBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU5RixPQUFPO0lBQ1AsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMseUpBQXlKLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDekssUUFBUTtJQUNSLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztRQUMvQixTQUFTLEVBQUU7WUFDVCxlQUFlLEVBQUU7Z0JBQ2YsSUFBSSxFQUFFLHlDQUF5QztnQkFDL0MsVUFBVSxFQUFFO29CQUNWLHNCQUFzQixFQUFFLHNCQUFzQjtvQkFDOUMsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLGNBQWMsRUFBRSxlQUFlO2lCQUNoQztnQkFDRCxRQUFRLEVBQUU7b0JBQ1IsZ0JBQWdCLEVBQUUsVUFBVTtpQkFDN0I7YUFDRjtTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7UUFDaEQsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRTtvQkFDZixJQUFJLEVBQUUseUNBQXlDO29CQUMvQyxVQUFVLEVBQUU7d0JBQ1Ysc0JBQXNCLEVBQUUsaUJBQWlCO3dCQUN6QyxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsY0FBYyxFQUFFLGVBQWU7cUJBQ2hDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILE9BQU87SUFDUCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sc0JBQXNCLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUU5RixPQUFPO0lBQ1AsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDcEQsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBTeW5jIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBzZXR1cCBmcm9tICcuL2hvdHN3YXAtdGVzdC1zZXR1cCc7XG5cbmxldCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyOiBzZXR1cC5Ib3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xubGV0IG1vY2tVcGRhdGVSZXNvbHZlcjogKHBhcmFtczogQXBwU3luYy5VcGRhdGVSZXNvbHZlclJlcXVlc3QpID0+IEFwcFN5bmMuVXBkYXRlUmVzb2x2ZXJSZXNwb25zZTtcbmxldCBtb2NrVXBkYXRlRnVuY3Rpb246IChwYXJhbXM6IEFwcFN5bmMuVXBkYXRlRnVuY3Rpb25SZXF1ZXN0KSA9PiBBcHBTeW5jLlVwZGF0ZUZ1bmN0aW9uUmVzcG9uc2U7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gc2V0dXAuc2V0dXBIb3Rzd2FwVGVzdHMoKTtcbiAgbW9ja1VwZGF0ZVJlc29sdmVyID0gamVzdC5mbigpO1xuICBtb2NrVXBkYXRlRnVuY3Rpb24gPSBqZXN0LmZuKCk7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIuc3R1YkFwcFN5bmMoeyB1cGRhdGVSZXNvbHZlcjogbW9ja1VwZGF0ZVJlc29sdmVyLCB1cGRhdGVGdW5jdGlvbjogbW9ja1VwZGF0ZUZ1bmN0aW9uIH0pO1xufSk7XG5cbnRlc3QoJ3JldHVybnMgdW5kZWZpbmVkIHdoZW4gYSBuZXcgUmVzb2x2ZXIgaXMgYWRkZWQgdG8gdGhlIFN0YWNrJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNSZXNvbHZlcjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbn0pO1xuXG50ZXN0KCdjYWxscyB0aGUgdXBkYXRlUmVzb2x2ZXIoKSBBUEkgd2hlbiBpdCByZWNlaXZlcyBvbmx5IGEgbWFwcGluZyB0ZW1wbGF0ZSBkaWZmZXJlbmNlIGluIGEgVW5pdCBSZXNvbHZlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEFwaUlkOiAnYXBpSWQnLFxuICAgICAgICAgIEZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgICAgICAgIFR5cGVOYW1lOiAnUXVlcnknLFxuICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgS2luZDogJ1VOSVQnLFxuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICBSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZTogJyMjIG9yaWdpbmFsIHJlc3BvbnNlIHRlbXBsYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgc2V0dXAucHVzaFN0YWNrUmVzb3VyY2VTdW1tYXJpZXMoXG4gICAgc2V0dXAuc3RhY2tTdW1tYXJ5T2YoXG4gICAgICAnQXBwU3luY1Jlc29sdmVyJyxcbiAgICAgICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICdhcm46YXdzOmFwcHN5bmM6dXMtZWFzdC0xOjExMTExMTExMTExMTphcGlzL2FwaUlkL3R5cGVzL1F1ZXJ5L3Jlc29sdmVycy9teUZpZWxkJyxcbiAgICApLFxuICApO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNSZXNvbHZlcjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBBcGlJZDogJ2FwaUlkJyxcbiAgICAgICAgICAgIEZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgICAgICAgICAgVHlwZU5hbWU6ICdRdWVyeScsXG4gICAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgICAgICAgICAgS2luZDogJ1VOSVQnLFxuICAgICAgICAgICAgUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogJyMjIG5ldyByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIFJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVzcG9uc2UgdGVtcGxhdGUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICduZXctcGF0aCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlUmVzb2x2ZXIpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBhcGlJZDogJ2FwaUlkJyxcbiAgICBkYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgIHR5cGVOYW1lOiAnUXVlcnknLFxuICAgIGZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgIGtpbmQ6ICdVTklUJyxcbiAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHJlcXVlc3QgdGVtcGxhdGUnLFxuICAgIHJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVzcG9uc2UgdGVtcGxhdGUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBjYWxsIHRoZSB1cGRhdGVSZXNvbHZlcigpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIG9ubHkgYSBtYXBwaW5nIHRlbXBsYXRlIGRpZmZlcmVuY2UgaW4gYSBQaXBlbGluZSBSZXNvbHZlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIEFwaUlkOiAnYXBpSWQnLFxuICAgICAgICAgIEZpZWxkTmFtZTogJ215RmllbGQnLFxuICAgICAgICAgIFR5cGVOYW1lOiAnUXVlcnknLFxuICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgS2luZDogJ1BJUEVMSU5FJyxcbiAgICAgICAgICBQaXBlbGluZUNvbmZpZzogWydmdW5jdGlvbjEnXSxcbiAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVxdWVzdCB0ZW1wbGF0ZScsXG4gICAgICAgICAgUmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXNwb25zZSB0ZW1wbGF0ZScsXG4gICAgICAgIH0sXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ29sZC1wYXRoJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIEFwaUlkOiAnYXBpSWQnLFxuICAgICAgICAgICAgRmllbGROYW1lOiAnbXlGaWVsZCcsXG4gICAgICAgICAgICBUeXBlTmFtZTogJ1F1ZXJ5JyxcbiAgICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgICBLaW5kOiAnUElQRUxJTkUnLFxuICAgICAgICAgICAgUGlwZWxpbmVDb25maWc6IFsnZnVuY3Rpb24xJ10sXG4gICAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHJlcXVlc3QgdGVtcGxhdGUnLFxuICAgICAgICAgICAgUmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXNwb25zZSB0ZW1wbGF0ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ25ldy1wYXRoJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZVJlc29sdmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZVJlc29sdmVyKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgYSBjaGFuZ2UgdGhhdCBpcyBub3QgYSBtYXBwaW5nIHRlbXBsYXRlIGRpZmZlcmVuY2UgaW4gYSBSZXNvbHZlcicsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCB0ZW1wbGF0ZScsXG4gICAgICAgICAgRmllbGROYW1lOiAnb2xkRmllbGQnLFxuICAgICAgICB9LFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICdvbGQtcGF0aCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNSZXNvbHZlcjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6OlJlc29sdmVyJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIEZpZWxkTmFtZTogJ25ld0ZpZWxkJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZVJlc29sdmVyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZVJlc29sdmVyKCkgQVBJIHdoZW4gYSByZXNvdXJjZSB3aXRoIHR5cGUgdGhhdCBpcyBub3QgQVdTOjpBcHBTeW5jOjpSZXNvbHZlciBidXQgaGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgaXMgY2hhbmdlZCcsIGFzeW5jICgpID0+IHtcbiAgLy8gR0lWRU5cbiAgc2V0dXAuc2V0Q3VycmVudENmblN0YWNrVGVtcGxhdGUoe1xuICAgIFJlc291cmNlczoge1xuICAgICAgQXBwU3luY1Jlc29sdmVyOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6Ok5vdEFSZXNvbHZlcicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgdGVtcGxhdGUnLFxuICAgICAgICAgIEZpZWxkTmFtZTogJ29sZEZpZWxkJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBBcHBTeW5jUmVzb2x2ZXI6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpOb3RBUmVzb2x2ZXInLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBuZXcgdGVtcGxhdGUnLFxuICAgICAgICAgICAgRmllbGROYW1lOiAnbmV3RmllbGQnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlUmVzb2x2ZXIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnY2FsbHMgdGhlIHVwZGF0ZUZ1bmN0aW9uKCkgQVBJIHdoZW4gaXQgcmVjZWl2ZXMgb25seSBhIG1hcHBpbmcgdGVtcGxhdGUgZGlmZmVyZW5jZSBpbiBhIEZ1bmN0aW9uJywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBjb25zdCBtb2NrTGlzdEZ1bmN0aW9ucyA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoeyBmdW5jdGlvbnM6IFt7IG5hbWU6ICdteS1mdW5jdGlvbicsIGZ1bmN0aW9uSWQ6ICdmdW5jdGlvbklkJyB9XSB9KTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zdHViQXBwU3luYyh7IGxpc3RGdW5jdGlvbnM6IG1vY2tMaXN0RnVuY3Rpb25zLCB1cGRhdGVGdW5jdGlvbjogbW9ja1VwZGF0ZUZ1bmN0aW9uIH0pO1xuXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICBBcGlJZDogJ2FwaUlkJyxcbiAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgICAgICAgIEZ1bmN0aW9uVmVyc2lvbjogJzIwMTgtMDUtMjknLFxuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICBSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZTogJyMjIG9yaWdpbmFsIHJlc3BvbnNlIHRlbXBsYXRlJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBBcHBTeW5jRnVuY3Rpb246IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIE5hbWU6ICdteS1mdW5jdGlvbicsXG4gICAgICAgICAgICBBcGlJZDogJ2FwaUlkJyxcbiAgICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgICBGdW5jdGlvblZlcnNpb246ICcyMDE4LTA1LTI5JyxcbiAgICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCByZXF1ZXN0IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIFJlc3BvbnNlTWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHJlc3BvbnNlIHRlbXBsYXRlJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUZ1bmN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgYXBpSWQ6ICdhcGlJZCcsXG4gICAgZGF0YVNvdXJjZU5hbWU6ICdteS1kYXRhc291cmNlJyxcbiAgICBmdW5jdGlvbklkOiAnZnVuY3Rpb25JZCcsXG4gICAgZnVuY3Rpb25WZXJzaW9uOiAnMjAxOC0wNS0yOScsXG4gICAgbmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICByZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgb3JpZ2luYWwgcmVxdWVzdCB0ZW1wbGF0ZScsXG4gICAgcmVzcG9uc2VNYXBwaW5nVGVtcGxhdGU6ICcjIyBuZXcgcmVzcG9uc2UgdGVtcGxhdGUnLFxuICB9KTtcbn0pO1xuXG50ZXN0KCdkb2VzIG5vdCBjYWxsIHRoZSB1cGRhdGVGdW5jdGlvbigpIEFQSSB3aGVuIGl0IHJlY2VpdmVzIGEgY2hhbmdlIHRoYXQgaXMgbm90IGEgbWFwcGluZyB0ZW1wbGF0ZSBkaWZmZXJlbmNlIGluIGEgRnVuY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUmVxdWVzdE1hcHBpbmdUZW1wbGF0ZTogJyMjIG9yaWdpbmFsIHRlbXBsYXRlJyxcbiAgICAgICAgICBOYW1lOiAnbXktZnVuY3Rpb24nLFxuICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgIH0sXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ29sZC1wYXRoJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgQXBwU3luY0Z1bmN0aW9uOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6QXBwU3luYzo6RnVuY3Rpb25Db25maWd1cmF0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlOiAnIyMgbmV3IHRlbXBsYXRlJyxcbiAgICAgICAgICAgIE5hbWU6ICdteS1mdW5jdGlvbicsXG4gICAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ25ldy1kYXRhc291cmNlJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUZ1bmN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2RvZXMgbm90IGNhbGwgdGhlIHVwZGF0ZUZ1bmN0aW9uKCkgQVBJIHdoZW4gYSByZXNvdXJjZSB3aXRoIHR5cGUgdGhhdCBpcyBub3QgQVdTOjpBcHBTeW5jOjpGdW5jdGlvbkNvbmZpZ3VyYXRpb24gYnV0IGhhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGlzIGNoYW5nZWQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICBUeXBlOiAnQVdTOjpBcHBTeW5jOjpOb3RBRnVuY3Rpb25Db25maWd1cmF0aW9uJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBvcmlnaW5hbCB0ZW1wbGF0ZScsXG4gICAgICAgICAgTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICBEYXRhU291cmNlTmFtZTogJ215LWRhdGFzb3VyY2UnLFxuICAgICAgICB9LFxuICAgICAgICBNZXRhZGF0YToge1xuICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICdvbGQtcGF0aCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEFwcFN5bmNGdW5jdGlvbjoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkFwcFN5bmM6Ok5vdEFGdW5jdGlvbkNvbmZpZ3VyYXRpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIFJlcXVlc3RNYXBwaW5nVGVtcGxhdGU6ICcjIyBuZXcgdGVtcGxhdGUnLFxuICAgICAgICAgICAgTmFtZTogJ215LXJlc29sdmVyJyxcbiAgICAgICAgICAgIERhdGFTb3VyY2VOYW1lOiAnbXktZGF0YXNvdXJjZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVGdW5jdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbn0pO1xuIl19
@@ -7,7 +7,7 @@ let mockUpdateMachineDefinition;
7
7
  let mockGetEndpointSuffix;
8
8
  beforeEach(() => {
9
9
  hotswapMockSdkProvider = setup.setupHotswapTests();
10
- mockUpdateLambdaCode = jest.fn();
10
+ mockUpdateLambdaCode = jest.fn().mockReturnValue({});
11
11
  mockUpdateMachineDefinition = jest.fn();
12
12
  mockGetEndpointSuffix = jest.fn(() => 'amazonaws.com');
13
13
  hotswapMockSdkProvider.stubLambda({
@@ -295,4 +295,4 @@ test('can correctly reference AWS::URLSuffix in hotswappable changes', async ()
295
295
  expect(hotswapMockSdkProvider.mockSdkProvider.sdk.removeCustomUserAgent)
296
296
  .toHaveBeenCalledWith('cdk-hotswap/success-lambda-function');
297
297
  });
298
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC1kZXBsb3ltZW50cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOENBQThDO0FBRTlDLElBQUksc0JBQW9ELENBQUM7QUFDekQsSUFBSSxvQkFBNEcsQ0FBQztBQUNqSCxJQUFJLDJCQUFrSSxDQUFDO0FBQ3ZJLElBQUkscUJBQW1DLENBQUM7QUFFeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ25ELG9CQUFvQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNqQywyQkFBMkIsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDeEMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7UUFDaEMsa0JBQWtCLEVBQUUsb0JBQW9CO0tBQ3pDLENBQUMsQ0FBQztJQUNILHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDOUUsc0JBQXNCLENBQUMscUJBQXFCLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN0RSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxxRkFBcUYsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNyRyxPQUFPO0lBQ1AsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLHNCQUFzQixDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7SUFFeEcsT0FBTztJQUNQLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QyxNQUFNLENBQUMsaUJBQWlCLGFBQWpCLGlCQUFpQix1QkFBakIsaUJBQWlCLENB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QUFFLGdCQUFnQjtRQUMxQixLQUFLLEVBQUUsU0FBUztLQUNqQixDQUFDLENBQUM7SUFDSCxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV2RCxrQ0FBa0M7SUFDbEMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7U0FDckUsb0JBQW9CLENBQUMscUNBQXFDLENBQUMsQ0FBQztJQUMvRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQztTQUNyRSxvQkFBb0IsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGFtYmRhLCBTdGVwRnVuY3Rpb25zIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBzZXR1cCBmcm9tICcuL2hvdHN3YXAtdGVzdC1zZXR1cCc7XG5cbmxldCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyOiBzZXR1cC5Ib3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xubGV0IG1vY2tVcGRhdGVMYW1iZGFDb2RlOiAocGFyYW1zOiBMYW1iZGEuVHlwZXMuVXBkYXRlRnVuY3Rpb25Db2RlUmVxdWVzdCkgPT4gTGFtYmRhLlR5cGVzLkZ1bmN0aW9uQ29uZmlndXJhdGlvbjtcbmxldCBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb246IChwYXJhbXM6IFN0ZXBGdW5jdGlvbnMuVHlwZXMuVXBkYXRlU3RhdGVNYWNoaW5lSW5wdXQpID0+IFN0ZXBGdW5jdGlvbnMuVHlwZXMuVXBkYXRlU3RhdGVNYWNoaW5lT3V0cHV0O1xubGV0IG1vY2tHZXRFbmRwb2ludFN1ZmZpeDogKCkgPT4gc3RyaW5nO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlciA9IHNldHVwLnNldHVwSG90c3dhcFRlc3RzKCk7XG4gIG1vY2tVcGRhdGVMYW1iZGFDb2RlID0gamVzdC5mbigpO1xuICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24gPSBqZXN0LmZuKCk7XG4gIG1vY2tHZXRFbmRwb2ludFN1ZmZpeCA9IGplc3QuZm4oKCkgPT4gJ2FtYXpvbmF3cy5jb20nKTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zdHViTGFtYmRhKHtcbiAgICB1cGRhdGVGdW5jdGlvbkNvZGU6IG1vY2tVcGRhdGVMYW1iZGFDb2RlLFxuICB9KTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zZXRVcGRhdGVTdGF0ZU1hY2hpbmVNb2NrKG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbik7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIuc3R1YkdldEVuZHBvaW50U3VmZml4KG1vY2tHZXRFbmRwb2ludFN1ZmZpeCk7XG59KTtcblxudGVzdCgncmV0dXJucyBhIGRlcGxveVN0YWNrUmVzdWx0IHdpdGggbm9PcD10cnVlIHdoZW4gaXQgcmVjZWl2ZXMgYW4gZW1wdHkgc2V0IG9mIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZigpKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0Py5ub09wKS50b0JlVHJ1dGh5KCk7XG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdD8uc3RhY2tBcm4pLnRvRXF1YWwoc2V0dXAuU1RBQ0tfSUQpO1xufSk7XG5cbnRlc3QoJ0EgY2hhbmdlIHRvIG9ubHkgYSBub24taG90c3dhcHBhYmxlIHJlc291cmNlIHJlc3VsdHMgaW4gYSBmdWxsIGRlcGxveW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlNvbWV0aGluZ0Vsc2UnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvcDogJ29sZC12YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U29tZXRoaW5nRWxzZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJvcDogJ25ldy12YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVMYW1iZGFDb2RlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ0EgY2hhbmdlIHRvIGJvdGggYSBob3Rzd2FwcGFibGUgcmVzb3VyY2UgYW5kIGEgbm9uLWhvdHN3YXBwYWJsZSByZXNvdXJjZSByZXN1bHRzIGluIGEgZnVsbCBkZXBsb3ltZW50JywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBGdW5jOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgQ29kZToge1xuICAgICAgICAgICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgICAgICAgICBTM0tleTogJ2N1cnJlbnQta2V5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlNvbWV0aGluZ0Vsc2UnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvcDogJ29sZC12YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgICAgICAgICAgICBTM0tleTogJ25ldy1rZXknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U29tZXRoaW5nRWxzZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJvcDogJ25ldy12YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVMYW1iZGFDb2RlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2NoYW5nZXMgb25seSB0byBDREs6Ok1ldGFkYXRhIHJlc3VsdCBpbiBhIG5vT3AnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1ldGFEYXRhOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkNESzo6TWV0YURhdGEnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvcDogJ29sZC12YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1ldGFEYXRhOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6Q0RLOjpNZXRhZGF0YScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJvcDogJ25ldy12YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdD8ubm9PcCkudG9FcXVhbCh0cnVlKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVMYW1iZGFDb2RlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ3Jlc291cmNlIGRlbGV0aW9ucyByZXF1aXJlIGZ1bGwgZGVwbG95bWVudHMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2YoKTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUxhbWJkYUNvZGUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnY2FuIGNvcnJlY3RseSByZWZlcmVuY2UgQVdTOjpQYXJ0aXRpb24gaW4gaG90c3dhcHBhYmxlIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEZ1bmM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICBTM0J1Y2tldDogJ2N1cnJlbnQtYnVja2V0JyxcbiAgICAgICAgICAgIFMzS2V5OiAnY3VycmVudC1rZXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgQ29kZToge1xuICAgICAgICAgICAgICBTM0J1Y2tldDogJ2N1cnJlbnQtYnVja2V0JyxcbiAgICAgICAgICAgICAgUzNLZXk6ICduZXcta2V5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpQYXJ0aXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAnbXktZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICduZXctcGF0aCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTGFtYmRhQ29kZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIEZ1bmN0aW9uTmFtZTogJ2F3cy1teS1mdW5jdGlvbicsXG4gICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgUzNLZXk6ICduZXcta2V5JyxcbiAgfSk7XG59KTtcblxudGVzdCgnY2FuIGNvcnJlY3RseSByZWZlcmVuY2UgQVdTOjpVUkxTdWZmaXggaW4gaG90c3dhcHBhYmxlIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEZ1bmM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICBTM0J1Y2tldDogJ2N1cnJlbnQtYnVja2V0JyxcbiAgICAgICAgICAgIFMzS2V5OiAnY3VycmVudC1rZXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbJycsIFtcbiAgICAgICAgICAgICAgJ215LWZ1bmN0aW9uLScsXG4gICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpVUkxTdWZmaXgnIH0sXG4gICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlVSTFN1ZmZpeCcgfSxcbiAgICAgICAgICAgIF1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ29sZC1wYXRoJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgRnVuYzoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIENvZGU6IHtcbiAgICAgICAgICAgICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgICAgICAgICAgIFMzS2V5OiAnbmV3LWtleScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgICAgICdGbjo6Sm9pbic6IFsnJywgW1xuICAgICAgICAgICAgICAgICdteS1mdW5jdGlvbi0nLFxuICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpVUkxTdWZmaXgnIH0sXG4gICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpVUkxTdWZmaXgnIH0sXG4gICAgICAgICAgICAgIF1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUxhbWJkYUNvZGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBGdW5jdGlvbk5hbWU6ICdteS1mdW5jdGlvbi1hbWF6b25hd3MuY29tLWFtYXpvbmF3cy5jb20nLFxuICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgIFMzS2V5OiAnbmV3LWtleScsXG4gIH0pO1xuICBleHBlY3QobW9ja0dldEVuZHBvaW50U3VmZml4KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgLy8gdGhlIFVzZXItQWdlbnQgaXMgc2V0IGNvcnJlY3RseVxuICBleHBlY3QoaG90c3dhcE1vY2tTZGtQcm92aWRlci5tb2NrU2RrUHJvdmlkZXIuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudClcbiAgICAudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2Nkay1ob3Rzd2FwL3N1Y2Nlc3MtbGFtYmRhLWZ1bmN0aW9uJyk7XG4gIGV4cGVjdChob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLm1vY2tTZGtQcm92aWRlci5zZGsucmVtb3ZlQ3VzdG9tVXNlckFnZW50KVxuICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnY2RrLWhvdHN3YXAvc3VjY2Vzcy1sYW1iZGEtZnVuY3Rpb24nKTtcbn0pO1xuIl19
298
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC1kZXBsb3ltZW50cy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC1kZXBsb3ltZW50cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsOENBQThDO0FBRTlDLElBQUksc0JBQW9ELENBQUM7QUFDekQsSUFBSSxvQkFBNEcsQ0FBQztBQUNqSCxJQUFJLDJCQUFrSSxDQUFDO0FBQ3ZJLElBQUkscUJBQW1DLENBQUM7QUFFeEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtJQUNkLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ25ELG9CQUFvQixHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsMkJBQTJCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ3hDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdkQsc0JBQXNCLENBQUMsVUFBVSxDQUFDO1FBQ2hDLGtCQUFrQixFQUFFLG9CQUFvQjtLQUN6QyxDQUFDLENBQUM7SUFDSCxzQkFBc0IsQ0FBQyx5QkFBeUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlFLHNCQUFzQixDQUFDLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMscUZBQXFGLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDckcsT0FBTztJQUNQLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBRXhHLE9BQU87SUFDUCxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUMsTUFBTSxDQUFDLGlCQUFpQixhQUFq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LEVBQUUseUNBQXlDO1FBQ3ZELFFBQVEsRUFBRSxnQkFBZ0I7UUFDMUIsS0FBSyxFQUFFLFNBQVM7S0FDakIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdkQsa0NBQWtDO0lBQ2xDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDO1NBQ3JFLG9CQUFvQixDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7U0FDckUsb0JBQW9CLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUNqRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhbWJkYSwgU3RlcEZ1bmN0aW9ucyB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgc2V0dXAgZnJvbSAnLi9ob3Rzd2FwLXRlc3Qtc2V0dXAnO1xuXG5sZXQgaG90c3dhcE1vY2tTZGtQcm92aWRlcjogc2V0dXAuSG90c3dhcE1vY2tTZGtQcm92aWRlcjtcbmxldCBtb2NrVXBkYXRlTGFtYmRhQ29kZTogKHBhcmFtczogTGFtYmRhLlR5cGVzLlVwZGF0ZUZ1bmN0aW9uQ29kZVJlcXVlc3QpID0+IExhbWJkYS5UeXBlcy5GdW5jdGlvbkNvbmZpZ3VyYXRpb247XG5sZXQgbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uOiAocGFyYW1zOiBTdGVwRnVuY3Rpb25zLlR5cGVzLlVwZGF0ZVN0YXRlTWFjaGluZUlucHV0KSA9PiBTdGVwRnVuY3Rpb25zLlR5cGVzLlVwZGF0ZVN0YXRlTWFjaGluZU91dHB1dDtcbmxldCBtb2NrR2V0RW5kcG9pbnRTdWZmaXg6ICgpID0+IHN0cmluZztcblxuYmVmb3JlRWFjaCgoKSA9PiB7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIgPSBzZXR1cC5zZXR1cEhvdHN3YXBUZXN0cygpO1xuICBtb2NrVXBkYXRlTGFtYmRhQ29kZSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pO1xuICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24gPSBqZXN0LmZuKCk7XG4gIG1vY2tHZXRFbmRwb2ludFN1ZmZpeCA9IGplc3QuZm4oKCkgPT4gJ2FtYXpvbmF3cy5jb20nKTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zdHViTGFtYmRhKHtcbiAgICB1cGRhdGVGdW5jdGlvbkNvZGU6IG1vY2tVcGRhdGVMYW1iZGFDb2RlLFxuICB9KTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlci5zZXRVcGRhdGVTdGF0ZU1hY2hpbmVNb2NrKG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbik7XG4gIGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIuc3R1YkdldEVuZHBvaW50U3VmZml4KG1vY2tHZXRFbmRwb2ludFN1ZmZpeCk7XG59KTtcblxudGVzdCgncmV0dXJucyBhIGRlcGxveVN0YWNrUmVzdWx0IHdpdGggbm9PcD10cnVlIHdoZW4gaXQgcmVjZWl2ZXMgYW4gZW1wdHkgc2V0IG9mIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZigpKTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkubm90LnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0Py5ub09wKS50b0JlVHJ1dGh5KCk7XG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdD8uc3RhY2tBcm4pLnRvRXF1YWwoc2V0dXAuU1RBQ0tfSUQpO1xufSk7XG5cbnRlc3QoJ0EgY2hhbmdlIHRvIG9ubHkgYSBub24taG90c3dhcHBhYmxlIHJlc291cmNlIHJlc3VsdHMgaW4gYSBmdWxsIGRlcGxveW1lbnQnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlNvbWV0aGluZ0Vsc2UnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvcDogJ29sZC12YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U29tZXRoaW5nRWxzZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJvcDogJ25ldy12YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVMYW1iZGFDb2RlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ0EgY2hhbmdlIHRvIGJvdGggYSBob3Rzd2FwcGFibGUgcmVzb3VyY2UgYW5kIGEgbm9uLWhvdHN3YXBwYWJsZSByZXNvdXJjZSByZXN1bHRzIGluIGEgZnVsbCBkZXBsb3ltZW50JywgYXN5bmMgKCkgPT4ge1xuICAvLyBHSVZFTlxuICBzZXR1cC5zZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh7XG4gICAgUmVzb3VyY2VzOiB7XG4gICAgICBGdW5jOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgQ29kZToge1xuICAgICAgICAgICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgICAgICAgICBTM0tleTogJ2N1cnJlbnQta2V5JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnb2xkLXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6Q2xvdWRGb3JtYXRpb246OlNvbWV0aGluZ0Vsc2UnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvcDogJ29sZC12YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIEZ1bmM6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJyxcbiAgICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgICAgICAgICAgICBTM0tleTogJ25ldy1rZXknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFNvbWV0aGluZ0Vsc2U6IHtcbiAgICAgICAgICBUeXBlOiAnQVdTOjpDbG91ZEZvcm1hdGlvbjo6U29tZXRoaW5nRWxzZScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJvcDogJ25ldy12YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLnRvQmVVbmRlZmluZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVMYW1iZGFDb2RlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ2NoYW5nZXMgb25seSB0byBDREs6Ok1ldGFkYXRhIHJlc3VsdCBpbiBhIG5vT3AnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1ldGFEYXRhOiB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkNESzo6TWV0YURhdGEnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgUHJvcDogJ29sZC12YWx1ZScsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuICBjb25zdCBjZGtTdGFja0FydGlmYWN0ID0gc2V0dXAuY2RrU3RhY2tBcnRpZmFjdE9mKHtcbiAgICB0ZW1wbGF0ZToge1xuICAgICAgUmVzb3VyY2VzOiB7XG4gICAgICAgIE1ldGFEYXRhOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6Q0RLOjpNZXRhZGF0YScsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgUHJvcDogJ25ldy12YWx1ZScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdD8ubm9PcCkudG9FcXVhbCh0cnVlKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgZXhwZWN0KG1vY2tVcGRhdGVMYW1iZGFDb2RlKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xufSk7XG5cbnRlc3QoJ3Jlc291cmNlIGRlbGV0aW9ucyByZXF1aXJlIGZ1bGwgZGVwbG95bWVudHMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIE1hY2hpbmU6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6U3RlcEZ1bmN0aW9uczo6U3RhdGVNYWNoaW5lJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2YoKTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IGRlcGxveVN0YWNrUmVzdWx0ID0gYXdhaXQgaG90c3dhcE1vY2tTZGtQcm92aWRlci50cnlIb3Rzd2FwRGVwbG95bWVudChjZGtTdGFja0FydGlmYWN0KTtcblxuICAvLyBUSEVOXG4gIGV4cGVjdChkZXBsb3lTdGFja1Jlc3VsdCkudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUxhbWJkYUNvZGUpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG59KTtcblxudGVzdCgnY2FuIGNvcnJlY3RseSByZWZlcmVuY2UgQVdTOjpQYXJ0aXRpb24gaW4gaG90c3dhcHBhYmxlIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEZ1bmM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICBTM0J1Y2tldDogJ2N1cnJlbnQtYnVja2V0JyxcbiAgICAgICAgICAgIFMzS2V5OiAnY3VycmVudC1rZXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbXG4gICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlBhcnRpdGlvbicgfSxcbiAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgJ215LWZ1bmN0aW9uJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KTtcbiAgY29uc3QgY2RrU3RhY2tBcnRpZmFjdCA9IHNldHVwLmNka1N0YWNrQXJ0aWZhY3RPZih7XG4gICAgdGVtcGxhdGU6IHtcbiAgICAgIFJlc291cmNlczoge1xuICAgICAgICBGdW5jOiB7XG4gICAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgQ29kZToge1xuICAgICAgICAgICAgICBTM0J1Y2tldDogJ2N1cnJlbnQtYnVja2V0JyxcbiAgICAgICAgICAgICAgUzNLZXk6ICduZXcta2V5JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IHtcbiAgICAgICAgICAgICAgJ0ZuOjpKb2luJzogW1xuICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpQYXJ0aXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAnbXktZnVuY3Rpb24nLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgICAgICdhd3M6YXNzZXQ6cGF0aCc6ICduZXctcGF0aCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBkZXBsb3lTdGFja1Jlc3VsdCA9IGF3YWl0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXIudHJ5SG90c3dhcERlcGxveW1lbnQoY2RrU3RhY2tBcnRpZmFjdCk7XG5cbiAgLy8gVEhFTlxuICBleHBlY3QoZGVwbG95U3RhY2tSZXN1bHQpLm5vdC50b0JlVW5kZWZpbmVkKCk7XG4gIGV4cGVjdChtb2NrVXBkYXRlTGFtYmRhQ29kZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgIEZ1bmN0aW9uTmFtZTogJ2F3cy1teS1mdW5jdGlvbicsXG4gICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgUzNLZXk6ICduZXcta2V5JyxcbiAgfSk7XG59KTtcblxudGVzdCgnY2FuIGNvcnJlY3RseSByZWZlcmVuY2UgQVdTOjpVUkxTdWZmaXggaW4gaG90c3dhcHBhYmxlIGNoYW5nZXMnLCBhc3luYyAoKSA9PiB7XG4gIC8vIEdJVkVOXG4gIHNldHVwLnNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHtcbiAgICBSZXNvdXJjZXM6IHtcbiAgICAgIEZ1bmM6IHtcbiAgICAgICAgVHlwZTogJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicsXG4gICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICBDb2RlOiB7XG4gICAgICAgICAgICBTM0J1Y2tldDogJ2N1cnJlbnQtYnVja2V0JyxcbiAgICAgICAgICAgIFMzS2V5OiAnY3VycmVudC1rZXknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgICAnRm46OkpvaW4nOiBbJycsIFtcbiAgICAgICAgICAgICAgJ215LWZ1bmN0aW9uLScsXG4gICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpVUkxTdWZmaXgnIH0sXG4gICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgeyBSZWY6ICdBV1M6OlVSTFN1ZmZpeCcgfSxcbiAgICAgICAgICAgIF1dLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgJ2F3czphc3NldDpwYXRoJzogJ29sZC1wYXRoJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG4gIGNvbnN0IGNka1N0YWNrQXJ0aWZhY3QgPSBzZXR1cC5jZGtTdGFja0FydGlmYWN0T2Yoe1xuICAgIHRlbXBsYXRlOiB7XG4gICAgICBSZXNvdXJjZXM6IHtcbiAgICAgICAgRnVuYzoge1xuICAgICAgICAgIFR5cGU6ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nLFxuICAgICAgICAgIFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIENvZGU6IHtcbiAgICAgICAgICAgICAgUzNCdWNrZXQ6ICdjdXJyZW50LWJ1Y2tldCcsXG4gICAgICAgICAgICAgIFMzS2V5OiAnbmV3LWtleScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiB7XG4gICAgICAgICAgICAgICdGbjo6Sm9pbic6IFsnJywgW1xuICAgICAgICAgICAgICAgICdteS1mdW5jdGlvbi0nLFxuICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpVUkxTdWZmaXgnIH0sXG4gICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgIHsgUmVmOiAnQVdTOjpVUkxTdWZmaXgnIH0sXG4gICAgICAgICAgICAgIF1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgICAgICAnYXdzOmFzc2V0OnBhdGgnOiAnbmV3LXBhdGgnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pO1xuXG4gIC8vIFdIRU5cbiAgY29uc3QgZGVwbG95U3RhY2tSZXN1bHQgPSBhd2FpdCBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLnRyeUhvdHN3YXBEZXBsb3ltZW50KGNka1N0YWNrQXJ0aWZhY3QpO1xuXG4gIC8vIFRIRU5cbiAgZXhwZWN0KGRlcGxveVN0YWNrUmVzdWx0KS5ub3QudG9CZVVuZGVmaW5lZCgpO1xuICBleHBlY3QobW9ja1VwZGF0ZUxhbWJkYUNvZGUpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICBGdW5jdGlvbk5hbWU6ICdteS1mdW5jdGlvbi1hbWF6b25hd3MuY29tLWFtYXpvbmF3cy5jb20nLFxuICAgIFMzQnVja2V0OiAnY3VycmVudC1idWNrZXQnLFxuICAgIFMzS2V5OiAnbmV3LWtleScsXG4gIH0pO1xuICBleHBlY3QobW9ja0dldEVuZHBvaW50U3VmZml4KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgLy8gdGhlIFVzZXItQWdlbnQgaXMgc2V0IGNvcnJlY3RseVxuICBleHBlY3QoaG90c3dhcE1vY2tTZGtQcm92aWRlci5tb2NrU2RrUHJvdmlkZXIuc2RrLmFwcGVuZEN1c3RvbVVzZXJBZ2VudClcbiAgICAudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2Nkay1ob3Rzd2FwL3N1Y2Nlc3MtbGFtYmRhLWZ1bmN0aW9uJyk7XG4gIGV4cGVjdChob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyLm1vY2tTZGtQcm92aWRlci5zZGsucmVtb3ZlQ3VzdG9tVXNlckFnZW50KVxuICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnY2RrLWhvdHN3YXAvc3VjY2Vzcy1sYW1iZGEtZnVuY3Rpb24nKTtcbn0pO1xuIl19
@@ -18,8 +18,14 @@ export declare class HotswapMockSdkProvider {
18
18
  readonly mockSdkProvider: MockSdkProvider;
19
19
  constructor();
20
20
  setUpdateStateMachineMock(mockUpdateMachineDefinition: (input: stepfunctions.UpdateStateMachineInput) => stepfunctions.UpdateStateMachineOutput): void;
21
- stubLambda(stubs: SyncHandlerSubsetOf<AWS.Lambda>): void;
21
+ stubLambda(stubs: SyncHandlerSubsetOf<AWS.Lambda>, serviceStubs?: SyncHandlerSubsetOf<AWS.Service>, additionalProperties?: {
22
+ [key: string]: any;
23
+ }): void;
24
+ getLambdaApiWaiters(): {
25
+ [key: string]: any;
26
+ };
22
27
  setUpdateProjectMock(mockUpdateProject: (input: codebuild.UpdateProjectInput) => codebuild.UpdateProjectOutput): void;
28
+ stubAppSync(stubs: SyncHandlerSubsetOf<AWS.AppSync>): void;
23
29
  setInvokeLambdaMock(mockInvokeLambda: (input: lambda.InvocationRequest) => lambda.InvocationResponse): void;
24
30
  stubEcs(stubs: SyncHandlerSubsetOf<AWS.ECS>, additionalProperties?: {
25
31
  [key: string]: any;
@@ -67,14 +67,33 @@ class HotswapMockSdkProvider {
67
67
  updateStateMachine: mockUpdateMachineDefinition,
68
68
  });
69
69
  }
70
- stubLambda(stubs) {
71
- this.mockSdkProvider.stubLambda(stubs);
70
+ stubLambda(stubs, serviceStubs, additionalProperties = {}) {
71
+ this.mockSdkProvider.stubLambda(stubs, {
72
+ api: {
73
+ waiters: {},
74
+ },
75
+ makeRequest() {
76
+ return {
77
+ promise: () => Promise.resolve({}),
78
+ response: {},
79
+ addListeners: () => { },
80
+ };
81
+ },
82
+ ...serviceStubs,
83
+ ...additionalProperties,
84
+ });
85
+ }
86
+ getLambdaApiWaiters() {
87
+ return this.mockSdkProvider.sdk.lambda().api.waiters;
72
88
  }
73
89
  setUpdateProjectMock(mockUpdateProject) {
74
90
  this.mockSdkProvider.stubCodeBuild({
75
91
  updateProject: mockUpdateProject,
76
92
  });
77
93
  }
94
+ stubAppSync(stubs) {
95
+ this.mockSdkProvider.stubAppSync(stubs);
96
+ }
78
97
  setInvokeLambdaMock(mockInvokeLambda) {
79
98
  this.mockSdkProvider.stubLambda({
80
99
  invoke: mockInvokeLambda,
@@ -91,4 +110,4 @@ class HotswapMockSdkProvider {
91
110
  }
92
111
  }
93
112
  exports.HotswapMockSdkProvider = HotswapMockSdkProvider;
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC10ZXN0LXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC10ZXN0LXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9FQUFvRTtBQUVwRSxxQ0FBMEQ7QUFDMUQsa0RBQTJFO0FBQzNFLDRFQUF1RTtBQUV2RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDdEIsUUFBQSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRWxDLElBQUksc0JBQThDLENBQUM7QUFDbkQsSUFBSSxlQUF3QyxDQUFDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQTBDLEVBQUUsQ0FBQztBQUUzRSxTQUFnQixpQkFBaUI7SUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELGVBQWUsR0FBRyxJQUFJLG1EQUF1QixDQUFDO1FBQzVDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE9BQU8sRUFBRSxnQkFBUTtLQUNsQixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFYRCw4Q0FXQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLG9CQUFnRCxFQUFFO0lBQ25GLE9BQU8sZ0JBQVMsQ0FBQztRQUNmLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLEdBQUcsaUJBQWlCO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFMRCxnREFLQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLEdBQUcsS0FBNEM7SUFDeEYsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUZELGdFQUVDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsUUFBa0I7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLHVGQUF1RjtJQUN0SixlQUFlLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUhELGdFQUdDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLFNBQWlCLEVBQUUsWUFBb0IsRUFBRSxrQkFBMEI7SUFDaEcsT0FBTztRQUNMLGlCQUFpQixFQUFFLFNBQVM7UUFDNUIsa0JBQWtCLEVBQUUsa0JBQWtCO1FBQ3RDLFlBQVksRUFBRSxZQUFZO1FBQzFCLGNBQWMsRUFBRSxpQkFBaUI7UUFDakMsb0JBQW9CLEVBQUUsSUFBSSxJQUFJLEVBQUU7S0FDakMsQ0FBQztBQUNKLENBQUM7QUFSRCx3Q0FRQztBQUVELE1BQWEsc0JBQXNCO0lBR2pDO1FBQ0UsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLDBCQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUvRCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDO1lBQ3RDLGtCQUFrQixFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtnQkFDL0MsSUFBSSxTQUFTLEtBQUssVUFBVSxFQUFFO29CQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxVQUFVLG9CQUFvQixTQUFTLEdBQUcsQ0FBQyxDQUFDO2lCQUN6SDtnQkFDRCxPQUFPO29CQUNMLHNCQUFzQixFQUFFLHdCQUF3QjtpQkFDakQsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0seUJBQXlCLENBQzlCLDJCQUFxSDtRQUVySCxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDO1lBQ3JDLGtCQUFrQixFQUFFLDJCQUEyQjtTQUNoRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQXNDO1FBQ3RELElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxpQkFBeUY7UUFDbkgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUM7WUFDakMsYUFBYSxFQUFFLGlCQUFpQjtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsZ0JBQWdGO1FBQ3pHLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxnQkFBZ0I7U0FDekIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFtQyxFQUFFLHVCQUErQyxFQUFFO1FBQ25HLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxJQUFrQjtRQUM3QyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFTSxvQkFBb0IsQ0FDekIsYUFBZ0QsRUFDaEQsY0FBeUMsRUFBRTtRQUUzQyxPQUFPLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDN0csQ0FBQztDQUNGO0FBeERELHdEQXdEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbiB9IGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgY29kZWJ1aWxkIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9jb2RlYnVpbGQnO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9sYW1iZGEnO1xuaW1wb3J0ICogYXMgc3RlcGZ1bmN0aW9ucyBmcm9tICdhd3Mtc2RrL2NsaWVudHMvc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBEZXBsb3lTdGFja1Jlc3VsdCB9IGZyb20gJy4uLy4uLy4uL2xpYi9hcGknO1xuaW1wb3J0ICogYXMgZGVwbG95bWVudHMgZnJvbSAnLi4vLi4vLi4vbGliL2FwaS9ob3Rzd2FwLWRlcGxveW1lbnRzJztcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaS91dGlsL2Nsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IHRlc3RTdGFjaywgVGVzdFN0YWNrQXJ0aWZhY3QgfSBmcm9tICcuLi8uLi91dGlsJztcbmltcG9ydCB7IE1vY2tTZGtQcm92aWRlciwgU3luY0hhbmRsZXJTdWJzZXRPZiB9IGZyb20gJy4uLy4uL3V0aWwvbW9jay1zZGsnO1xuaW1wb3J0IHsgRmFrZUNsb3VkZm9ybWF0aW9uU3RhY2sgfSBmcm9tICcuLi9mYWtlLWNsb3VkZm9ybWF0aW9uLXN0YWNrJztcblxuY29uc3QgU1RBQ0tfTkFNRSA9ICd3aXRob3V0ZXJyb3JzJztcbmV4cG9ydCBjb25zdCBTVEFDS19JRCA9ICdzdGFja0lkJztcblxubGV0IGhvdHN3YXBNb2NrU2RrUHJvdmlkZXI6IEhvdHN3YXBNb2NrU2RrUHJvdmlkZXI7XG5sZXQgY3VycmVudENmblN0YWNrOiBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjaztcbmNvbnN0IGN1cnJlbnRDZm5TdGFja1Jlc291cmNlczogQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXSA9IFtdO1xuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBIb3Rzd2FwVGVzdHMoKSB7XG4gIGplc3QucmVzZXRBbGxNb2NrcygpO1xuICAvLyBjbGVhciB0aGUgYXJyYXlcbiAgY3VycmVudENmblN0YWNrUmVzb3VyY2VzLnNwbGljZSgwKTtcbiAgaG90c3dhcE1vY2tTZGtQcm92aWRlciA9IG5ldyBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyKCk7XG4gIGN1cnJlbnRDZm5TdGFjayA9IG5ldyBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjayh7XG4gICAgc3RhY2tOYW1lOiBTVEFDS19OQU1FLFxuICAgIHN0YWNrSWQ6IFNUQUNLX0lELFxuICB9KTtcblxuICByZXR1cm4gaG90c3dhcE1vY2tTZGtQcm92aWRlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNka1N0YWNrQXJ0aWZhY3RPZih0ZXN0U3RhY2tBcnRpZmFjdDogUGFydGlhbDxUZXN0U3RhY2tBcnRpZmFjdD4gPSB7fSk6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdCB7XG4gIHJldHVybiB0ZXN0U3RhY2soe1xuICAgIHN0YWNrTmFtZTogU1RBQ0tfTkFNRSxcbiAgICAuLi50ZXN0U3RhY2tBcnRpZmFjdCxcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwdXNoU3RhY2tSZXNvdXJjZVN1bW1hcmllcyguLi5pdGVtczogQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXSkge1xuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMucHVzaCguLi5pdGVtcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDdXJyZW50Q2ZuU3RhY2tUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGUpIHtcbiAgY29uc3QgdGVtcGxhdGVEZWVwQ29weSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGVtcGxhdGUpKTsgLy8gZGVlcCBjb3B5IHRoZSB0ZW1wbGF0ZSwgc28gb3VyIHRlc3RzIGNhbiBtdXRhdGUgb25lIHRlbXBsYXRlIGluc3RlYWQgb2YgY3JlYXRpbmcgdHdvXG4gIGN1cnJlbnRDZm5TdGFjay5zZXRUZW1wbGF0ZSh0ZW1wbGF0ZURlZXBDb3B5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YWNrU3VtbWFyeU9mKGxvZ2ljYWxJZDogc3RyaW5nLCByZXNvdXJjZVR5cGU6IHN0cmluZywgcGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmcpOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeSB7XG4gIHJldHVybiB7XG4gICAgTG9naWNhbFJlc291cmNlSWQ6IGxvZ2ljYWxJZCxcbiAgICBQaHlzaWNhbFJlc291cmNlSWQ6IHBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICBSZXNvdXJjZVR5cGU6IHJlc291cmNlVHlwZSxcbiAgICBSZXNvdXJjZVN0YXR1czogJ0NSRUFURV9DT01QTEVURScsXG4gICAgTGFzdFVwZGF0ZWRUaW1lc3RhbXA6IG5ldyBEYXRlKCksXG4gIH07XG59XG5cbmV4cG9ydCBjbGFzcyBIb3Rzd2FwTW9ja1Nka1Byb3ZpZGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IG1vY2tTZGtQcm92aWRlcjogTW9ja1Nka1Byb3ZpZGVyO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyID0gbmV3IE1vY2tTZGtQcm92aWRlcih7IHJlYWxTZGs6IGZhbHNlIH0pO1xuXG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkNsb3VkRm9ybWF0aW9uKHtcbiAgICAgIGxpc3RTdGFja1Jlc291cmNlczogKHsgU3RhY2tOYW1lOiBzdGFja05hbWUgfSkgPT4ge1xuICAgICAgICBpZiAoc3RhY2tOYW1lICE9PSBTVEFDS19OQU1FKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBTdGFjayBuYW1lIGluIGxpc3RTdGFja1Jlc291cmNlcygpIGNhbGwgdG8gYmU6ICcke1NUQUNLX05BTUV9JywgYnV0IHJlY2VpdmVkOiAke3N0YWNrTmFtZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBTdGFja1Jlc291cmNlU3VtbWFyaWVzOiBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldFVwZGF0ZVN0YXRlTWFjaGluZU1vY2soXG4gICAgbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uOiAoaW5wdXQ6IHN0ZXBmdW5jdGlvbnMuVXBkYXRlU3RhdGVNYWNoaW5lSW5wdXQpID0+IHN0ZXBmdW5jdGlvbnMuVXBkYXRlU3RhdGVNYWNoaW5lT3V0cHV0LFxuICApIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViU3RlcEZ1bmN0aW9ucyh7XG4gICAgICB1cGRhdGVTdGF0ZU1hY2hpbmU6IG1vY2tVcGRhdGVNYWNoaW5lRGVmaW5pdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViTGFtYmRhKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5MYW1iZGE+KSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkxhbWJkYShzdHVicyk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXBkYXRlUHJvamVjdE1vY2sobW9ja1VwZGF0ZVByb2plY3Q6IChpbnB1dDogY29kZWJ1aWxkLlVwZGF0ZVByb2plY3RJbnB1dCkgPT4gY29kZWJ1aWxkLlVwZGF0ZVByb2plY3RPdXRwdXQpIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQ29kZUJ1aWxkKHtcbiAgICAgIHVwZGF0ZVByb2plY3Q6IG1vY2tVcGRhdGVQcm9qZWN0LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNldEludm9rZUxhbWJkYU1vY2sobW9ja0ludm9rZUxhbWJkYTogKGlucHV0OiBsYW1iZGEuSW52b2NhdGlvblJlcXVlc3QpID0+IGxhbWJkYS5JbnZvY2F0aW9uUmVzcG9uc2UpIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViTGFtYmRhKHtcbiAgICAgIGludm9rZTogbW9ja0ludm9rZUxhbWJkYSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViRWNzKHN0dWJzOiBTeW5jSGFuZGxlclN1YnNldE9mPEFXUy5FQ1M+LCBhZGRpdGlvbmFsUHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkVjcyhzdHVicywgYWRkaXRpb25hbFByb3BlcnRpZXMpO1xuICB9XG5cbiAgcHVibGljIHN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViOiAoKSA9PiBzdHJpbmcpIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViR2V0RW5kcG9pbnRTdWZmaXgoc3R1Yik7XG4gIH1cblxuICBwdWJsaWMgdHJ5SG90c3dhcERlcGxveW1lbnQoXG4gICAgc3RhY2tBcnRpZmFjdDogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0LFxuICAgIGFzc2V0UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gICk6IFByb21pc2U8RGVwbG95U3RhY2tSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gZGVwbG95bWVudHMudHJ5SG90c3dhcERlcGxveW1lbnQodGhpcy5tb2NrU2RrUHJvdmlkZXIsIGFzc2V0UGFyYW1zLCBjdXJyZW50Q2ZuU3RhY2ssIHN0YWNrQXJ0aWZhY3QpO1xuICB9XG59XG4iXX0=
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90c3dhcC10ZXN0LXNldHVwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaG90c3dhcC10ZXN0LXNldHVwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLG9FQUFvRTtBQUVwRSxxQ0FBMEQ7QUFDMUQsa0RBQTJFO0FBQzNFLDRFQUF1RTtBQUV2RSxNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUM7QUFDdEIsUUFBQSxRQUFRLEdBQUcsU0FBUyxDQUFDO0FBRWxDLElBQUksc0JBQThDLENBQUM7QUFDbkQsSUFBSSxlQUF3QyxDQUFDO0FBQzdDLE1BQU0sd0JBQXdCLEdBQTBDLEVBQUUsQ0FBQztBQUUzRSxTQUFnQixpQkFBaUI7SUFDL0IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLGtCQUFrQjtJQUNsQix3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO0lBQ3RELGVBQWUsR0FBRyxJQUFJLG1EQUF1QixDQUFDO1FBQzVDLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLE9BQU8sRUFBRSxnQkFBUTtLQUNsQixDQUFDLENBQUM7SUFFSCxPQUFPLHNCQUFzQixDQUFDO0FBQ2hDLENBQUM7QUFYRCw4Q0FXQztBQUVELFNBQWdCLGtCQUFrQixDQUFDLG9CQUFnRCxFQUFFO0lBQ25GLE9BQU8sZ0JBQVMsQ0FBQztRQUNmLFNBQVMsRUFBRSxVQUFVO1FBQ3JCLEdBQUcsaUJBQWlCO0tBQ3JCLENBQUMsQ0FBQztBQUNMLENBQUM7QUFMRCxnREFLQztBQUVELFNBQWdCLDBCQUEwQixDQUFDLEdBQUcsS0FBNEM7SUFDeEYsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUZELGdFQUVDO0FBRUQsU0FBZ0IsMEJBQTBCLENBQUMsUUFBa0I7SUFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsS0FBSyxD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QUFvQixDQUN6QixhQUFnRCxFQUNoRCxjQUF5QyxFQUFFO1FBRTNDLE9BQU8sV0FBVyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RyxDQUFDO0NBQ0Y7QUFqRkQsd0RBaUZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY3gtYXBpJztcbmltcG9ydCB7IENsb3VkRm9ybWF0aW9uIH0gZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgKiBhcyBjb2RlYnVpbGQgZnJvbSAnYXdzLXNkay9jbGllbnRzL2NvZGVidWlsZCc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLXNkay9jbGllbnRzL2xhbWJkYSc7XG5pbXBvcnQgKiBhcyBzdGVwZnVuY3Rpb25zIGZyb20gJ2F3cy1zZGsvY2xpZW50cy9zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IERlcGxveVN0YWNrUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vbGliL2FwaSc7XG5pbXBvcnQgKiBhcyBkZXBsb3ltZW50cyBmcm9tICcuLi8uLi8uLi9saWIvYXBpL2hvdHN3YXAtZGVwbG95bWVudHMnO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuLi8uLi8uLi9saWIvYXBpL3V0aWwvY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgdGVzdFN0YWNrLCBUZXN0U3RhY2tBcnRpZmFjdCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgTW9ja1Nka1Byb3ZpZGVyLCBTeW5jSGFuZGxlclN1YnNldE9mIH0gZnJvbSAnLi4vLi4vdXRpbC9tb2NrLXNkayc7XG5pbXBvcnQgeyBGYWtlQ2xvdWRmb3JtYXRpb25TdGFjayB9IGZyb20gJy4uL2Zha2UtY2xvdWRmb3JtYXRpb24tc3RhY2snO1xuXG5jb25zdCBTVEFDS19OQU1FID0gJ3dpdGhvdXRlcnJvcnMnO1xuZXhwb3J0IGNvbnN0IFNUQUNLX0lEID0gJ3N0YWNrSWQnO1xuXG5sZXQgaG90c3dhcE1vY2tTZGtQcm92aWRlcjogSG90c3dhcE1vY2tTZGtQcm92aWRlcjtcbmxldCBjdXJyZW50Q2ZuU3RhY2s6IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrO1xuY29uc3QgY3VycmVudENmblN0YWNrUmVzb3VyY2VzOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdID0gW107XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEhvdHN3YXBUZXN0cygpIHtcbiAgamVzdC5yZXNldEFsbE1vY2tzKCk7XG4gIC8vIGNsZWFyIHRoZSBhcnJheVxuICBjdXJyZW50Q2ZuU3RhY2tSZXNvdXJjZXMuc3BsaWNlKDApO1xuICBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyID0gbmV3IEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIoKTtcbiAgY3VycmVudENmblN0YWNrID0gbmV3IEZha2VDbG91ZGZvcm1hdGlvblN0YWNrKHtcbiAgICBzdGFja05hbWU6IFNUQUNLX05BTUUsXG4gICAgc3RhY2tJZDogU1RBQ0tfSUQsXG4gIH0pO1xuXG4gIHJldHVybiBob3Rzd2FwTW9ja1Nka1Byb3ZpZGVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2RrU3RhY2tBcnRpZmFjdE9mKHRlc3RTdGFja0FydGlmYWN0OiBQYXJ0aWFsPFRlc3RTdGFja0FydGlmYWN0PiA9IHt9KTogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0IHtcbiAgcmV0dXJuIHRlc3RTdGFjayh7XG4gICAgc3RhY2tOYW1lOiBTVEFDS19OQU1FLFxuICAgIC4uLnRlc3RTdGFja0FydGlmYWN0LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2hTdGFja1Jlc291cmNlU3VtbWFyaWVzKC4uLml0ZW1zOiBDbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdKSB7XG4gIGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcy5wdXNoKC4uLml0ZW1zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEN1cnJlbnRDZm5TdGFja1RlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZSkge1xuICBjb25zdCB0ZW1wbGF0ZURlZXBDb3B5ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0ZW1wbGF0ZSkpOyAvLyBkZWVwIGNvcHkgdGhlIHRlbXBsYXRlLCBzbyBvdXIgdGVzdHMgY2FuIG11dGF0ZSBvbmUgdGVtcGxhdGUgaW5zdGVhZCBvZiBjcmVhdGluZyB0d29cbiAgY3VycmVudENmblN0YWNrLnNldFRlbXBsYXRlKHRlbXBsYXRlRGVlcENvcHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RhY2tTdW1tYXJ5T2YobG9naWNhbElkOiBzdHJpbmcsIHJlc291cmNlVHlwZTogc3RyaW5nLCBwaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZyk6IENsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogbG9naWNhbElkLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgIFJlc291cmNlVHlwZTogcmVzb3VyY2VUeXBlLFxuICAgIFJlc291cmNlU3RhdHVzOiAnQ1JFQVRFX0NPTVBMRVRFJyxcbiAgICBMYXN0VXBkYXRlZFRpbWVzdGFtcDogbmV3IERhdGUoKSxcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEhvdHN3YXBNb2NrU2RrUHJvdmlkZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgbW9ja1Nka1Byb3ZpZGVyOiBNb2NrU2RrUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIgPSBuZXcgTW9ja1Nka1Byb3ZpZGVyKHsgcmVhbFNkazogZmFsc2UgfSk7XG5cbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQ2xvdWRGb3JtYXRpb24oe1xuICAgICAgbGlzdFN0YWNrUmVzb3VyY2VzOiAoeyBTdGFja05hbWU6IHN0YWNrTmFtZSB9KSA9PiB7XG4gICAgICAgIGlmIChzdGFja05hbWUgIT09IFNUQUNLX05BTUUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIFN0YWNrIG5hbWUgaW4gbGlzdFN0YWNrUmVzb3VyY2VzKCkgY2FsbCB0byBiZTogJyR7U1RBQ0tfTkFNRX0nLCBidXQgcmVjZWl2ZWQ6ICR7c3RhY2tOYW1lfSdgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFN0YWNrUmVzb3VyY2VTdW1tYXJpZXM6IGN1cnJlbnRDZm5TdGFja1Jlc291cmNlcyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0VXBkYXRlU3RhdGVNYWNoaW5lTW9jayhcbiAgICBtb2NrVXBkYXRlTWFjaGluZURlZmluaXRpb246IChpbnB1dDogc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVJbnB1dCkgPT4gc3RlcGZ1bmN0aW9ucy5VcGRhdGVTdGF0ZU1hY2hpbmVPdXRwdXQsXG4gICkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJTdGVwRnVuY3Rpb25zKHtcbiAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZTogbW9ja1VwZGF0ZU1hY2hpbmVEZWZpbml0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJMYW1iZGEoXG4gICAgc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkxhbWJkYT4sXG4gICAgc2VydmljZVN0dWJzPzogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuU2VydmljZT4sXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkxhbWJkYShzdHVicywge1xuICAgICAgYXBpOiB7XG4gICAgICAgIHdhaXRlcnM6IHt9LFxuICAgICAgfSxcbiAgICAgIG1ha2VSZXF1ZXN0KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHByb21pc2U6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSksXG4gICAgICAgICAgcmVzcG9uc2U6IHt9LFxuICAgICAgICAgIGFkZExpc3RlbmVyczogKCkgPT4ge30sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLi4uc2VydmljZVN0dWJzLFxuICAgICAgLi4uYWRkaXRpb25hbFByb3BlcnRpZXMsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TGFtYmRhQXBpV2FpdGVycygpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICByZXR1cm4gKHRoaXMubW9ja1Nka1Byb3ZpZGVyLnNkay5sYW1iZGEoKSBhcyBhbnkpLmFwaS53YWl0ZXJzO1xuICB9XG5cbiAgcHVibGljIHNldFVwZGF0ZVByb2plY3RNb2NrKG1vY2tVcGRhdGVQcm9qZWN0OiAoaW5wdXQ6IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0SW5wdXQpID0+IGNvZGVidWlsZC5VcGRhdGVQcm9qZWN0T3V0cHV0KSB7XG4gICAgdGhpcy5tb2NrU2RrUHJvdmlkZXIuc3R1YkNvZGVCdWlsZCh7XG4gICAgICB1cGRhdGVQcm9qZWN0OiBtb2NrVXBkYXRlUHJvamVjdCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdHViQXBwU3luYyhzdHViczogU3luY0hhbmRsZXJTdWJzZXRPZjxBV1MuQXBwU3luYz4pIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViQXBwU3luYyhzdHVicyk7XG4gIH1cblxuICBwdWJsaWMgc2V0SW52b2tlTGFtYmRhTW9jayhtb2NrSW52b2tlTGFtYmRhOiAoaW5wdXQ6IGxhbWJkYS5JbnZvY2F0aW9uUmVxdWVzdCkgPT4gbGFtYmRhLkludm9jYXRpb25SZXNwb25zZSkge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJMYW1iZGEoe1xuICAgICAgaW52b2tlOiBtb2NrSW52b2tlTGFtYmRhLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN0dWJFY3Moc3R1YnM6IFN5bmNIYW5kbGVyU3Vic2V0T2Y8QVdTLkVDUz4sIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge30pOiB2b2lkIHtcbiAgICB0aGlzLm1vY2tTZGtQcm92aWRlci5zdHViRWNzKHN0dWJzLCBhZGRpdGlvbmFsUHJvcGVydGllcyk7XG4gIH1cblxuICBwdWJsaWMgc3R1YkdldEVuZHBvaW50U3VmZml4KHN0dWI6ICgpID0+IHN0cmluZykge1xuICAgIHRoaXMubW9ja1Nka1Byb3ZpZGVyLnN0dWJHZXRFbmRwb2ludFN1ZmZpeChzdHViKTtcbiAgfVxuXG4gIHB1YmxpYyB0cnlIb3Rzd2FwRGVwbG95bWVudChcbiAgICBzdGFja0FydGlmYWN0OiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QsXG4gICAgYXNzZXRQYXJhbXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKTogUHJvbWlzZTxEZXBsb3lTdGFja1Jlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiBkZXBsb3ltZW50cy50cnlIb3Rzd2FwRGVwbG95bWVudCh0aGlzLm1vY2tTZGtQcm92aWRlciwgYXNzZXRQYXJhbXMsIGN1cnJlbnRDZm5TdGFjaywgc3RhY2tBcnRpZmFjdCk7XG4gIH1cbn1cbiJdfQ==