aws-cdk 2.36.0 → 2.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/THIRD_PARTY_LICENSES +81 -1
- package/build-info.json +2 -2
- package/lib/api/aws-auth/aws-sdk-inifile.js +2 -3
- package/lib/api/aws-auth/awscli-compatible.js +5 -7
- package/lib/api/aws-auth/sdk-provider.js +7 -11
- package/lib/api/aws-auth/sdk.js +2 -3
- package/lib/api/bootstrap/bootstrap-environment.js +14 -15
- package/lib/api/bootstrap/deploy-bootstrap.js +5 -7
- package/lib/api/cloudformation-deployments.js +9 -12
- package/lib/api/cxapp/cloud-assembly.js +3 -4
- package/lib/api/cxapp/cloud-executable.js +2 -3
- package/lib/api/cxapp/exec.js +8 -10
- package/lib/api/deploy-stack.js +11 -13
- package/lib/api/evaluate-cloudformation-template.js +6 -11
- package/lib/api/hotswap/appsync-mapping-templates.js +4 -5
- package/lib/api/hotswap/code-build-projects.js +2 -3
- package/lib/api/hotswap/ecs-services.js +4 -5
- package/lib/api/hotswap/lambda-functions.js +45 -24
- package/lib/api/hotswap/s3-bucket-deployments.js +3 -5
- package/lib/api/hotswap/stepfunctions-state-machines.js +2 -3
- package/lib/api/hotswap-deployments.js +9 -7
- package/lib/api/logs/logs-monitor.js +5 -8
- package/lib/api/nested-stack-helpers.js +9 -11
- package/lib/api/toolkit-info.js +12 -17
- package/lib/api/util/cloudformation/stack-activity-monitor.js +17 -27
- package/lib/api/util/cloudformation.js +7 -11
- package/lib/api/util/placeholders.js +2 -3
- package/lib/assets.js +3 -4
- package/lib/cdk-toolkit.d.ts +14 -0
- package/lib/cdk-toolkit.js +36 -19
- package/lib/cli.js +14 -14
- package/lib/context-providers/load-balancers.js +11 -18
- package/lib/context-providers/security-groups.js +5 -7
- package/lib/deploy.d.ts +7 -0
- package/lib/deploy.js +43 -0
- package/lib/import.js +8 -13
- package/lib/index.js +3266 -1537
- package/lib/init-templates/app/typescript/lib/%name%-stack.template.ts +3 -3
- package/lib/init-templates/lib/typescript/lib/index.template.ts +1 -0
- package/lib/notices.js +11 -17
- package/lib/settings.js +4 -5
- package/lib/util/asset-publishing.js +5 -8
- package/lib/util/directories.js +2 -3
- package/lib/version.js +2 -2
- package/package.json +10 -9
- package/test/api/bootstrap2.test.js +2 -3
- package/test/api/cloud-executable.test.js +2 -3
- package/test/api/deploy-stack.test.js +4 -7
- package/test/api/fake-sts.js +6 -8
- package/test/api/hotswap/hotswap-deployments.test.js +59 -4
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +3 -3
- package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +179 -7
- package/test/api/sdk-provider.test.js +8 -11
- package/test/aws-sdk-non-public-apis.test.js +2 -3
- package/test/cdk-toolkit.test.js +10 -1
- package/test/context-providers/load-balancers.test.js +3 -5
- package/test/deploy.test.d.ts +1 -0
- package/test/deploy.test.js +175 -0
- package/test/import.test.js +2 -2
- package/test/init.test.js +2 -3
- package/test/integ/cli/app/app.js +19 -0
- package/test/integ/cli/bootstrapping.integtest.js +9 -20
- package/test/integ/cli/cli.integtest.js +62 -31
- package/test/integ/github-helpers.js +2 -3
- package/test/integ/helpers/aws.js +4 -7
- package/test/integ/helpers/cdk.js +21 -30
- package/test/integ/helpers/sam.js +10 -17
- package/test/util/mock-child_process.js +3 -4
- package/test/util/mock-sdk.js +4 -6
- package/test/util/mock-toolkitinfo.js +4 -5
- package/test/util.js +3 -5
package/README.md
CHANGED
|
@@ -191,6 +191,8 @@ In order to deploy them, you can list the stacks you want to deploy. If your app
|
|
|
191
191
|
|
|
192
192
|
If you want to deploy all of them, you can use the flag `--all` or the wildcard `*` to deploy all stacks in an app. Please note that, if you have a hierarchy of stacks as described above, `--all` and `*` will only match the stacks on the top level. If you want to match all the stacks in the hierarchy, use `**`. You can also combine these patterns. For example, if you want to deploy all stacks in the `Prod` stage, you can use `cdk deploy PipelineStack/Prod/**`.
|
|
193
193
|
|
|
194
|
+
`--concurrency N` allows deploying multiple stacks in parallel while respecting inter-stack dependencies to speed up deployments. It does not protect against CloudFormation and other AWS account rate limiting.
|
|
195
|
+
|
|
194
196
|
#### Parameters
|
|
195
197
|
|
|
196
198
|
Pass parameters to your template during deployment by using `--parameters
|
|
@@ -373,7 +375,8 @@ and that you have the necessary IAM permissions to update the resources that are
|
|
|
373
375
|
Hotswapping is currently supported for the following changes
|
|
374
376
|
(additional changes will be supported in the future):
|
|
375
377
|
|
|
376
|
-
- Code asset (including Docker image and inline code)
|
|
378
|
+
- Code asset (including Docker image and inline code), tag changes, and configuration changes (only
|
|
379
|
+
description and environment variables are supported) of AWS Lambda functions.
|
|
377
380
|
- AWS Lambda Versions and Aliases changes.
|
|
378
381
|
- Definition changes of AWS Step Functions State Machines.
|
|
379
382
|
- Container asset changes of AWS ECS Services.
|
|
@@ -455,6 +458,15 @@ locally to your terminal. To disable this feature you can pass the `--no-logs` o
|
|
|
455
458
|
$ cdk watch --no-logs
|
|
456
459
|
```
|
|
457
460
|
|
|
461
|
+
You can increase the concurrency by which `watch` will deploy and hotswap
|
|
462
|
+
your stacks by specifying `--concurrency N`. `--concurrency` for `watch`
|
|
463
|
+
acts the same as `--concurrency` for `deploy`, in that it will deploy or
|
|
464
|
+
hotswap your stacks while respecting inter-stack dependencies.
|
|
465
|
+
|
|
466
|
+
```console
|
|
467
|
+
$ cdk watch --concurrency 5
|
|
468
|
+
```
|
|
469
|
+
|
|
458
470
|
**Note**: This command is considered experimental, and might have breaking changes in the future.
|
|
459
471
|
The same limitations apply to to `watch` deployments as do to `--hotswap` deployments. See the
|
|
460
472
|
*Hotswap deployments for faster development* section for more information.
|
package/THIRD_PARTY_LICENSES
CHANGED
|
@@ -268,7 +268,7 @@ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH RE
|
|
|
268
268
|
|
|
269
269
|
----------------
|
|
270
270
|
|
|
271
|
-
** aws-sdk@2.
|
|
271
|
+
** aws-sdk@2.1191.0 - https://www.npmjs.com/package/aws-sdk/v/2.1191.0 | Apache-2.0
|
|
272
272
|
AWS SDK for JavaScript
|
|
273
273
|
Copyright 2012-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
274
274
|
|
|
@@ -1143,6 +1143,32 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
|
1143
1143
|
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1144
1144
|
|
|
1145
1145
|
|
|
1146
|
+
----------------
|
|
1147
|
+
|
|
1148
|
+
** eventemitter3@4.0.7 - https://www.npmjs.com/package/eventemitter3/v/4.0.7 | MIT
|
|
1149
|
+
The MIT License (MIT)
|
|
1150
|
+
|
|
1151
|
+
Copyright (c) 2014 Arnout Kazemier
|
|
1152
|
+
|
|
1153
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
1154
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
1155
|
+
in the Software without restriction, including without limitation the rights
|
|
1156
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
1157
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
1158
|
+
furnished to do so, subject to the following conditions:
|
|
1159
|
+
|
|
1160
|
+
The above copyright notice and this permission notice shall be included in all
|
|
1161
|
+
copies or substantial portions of the Software.
|
|
1162
|
+
|
|
1163
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
1164
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
1165
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
1166
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
1167
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
1168
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
1169
|
+
SOFTWARE.
|
|
1170
|
+
|
|
1171
|
+
|
|
1146
1172
|
----------------
|
|
1147
1173
|
|
|
1148
1174
|
** fast-deep-equal@3.1.3 - https://www.npmjs.com/package/fast-deep-equal/v/3.1.3 | MIT
|
|
@@ -2274,6 +2300,60 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
|
2274
2300
|
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
2275
2301
|
|
|
2276
2302
|
|
|
2303
|
+
----------------
|
|
2304
|
+
|
|
2305
|
+
** p-finally@1.0.0 - https://www.npmjs.com/package/p-finally/v/1.0.0 | MIT
|
|
2306
|
+
The MIT License (MIT)
|
|
2307
|
+
|
|
2308
|
+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
2309
|
+
|
|
2310
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
2311
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
2312
|
+
in the Software without restriction, including without limitation the rights
|
|
2313
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
2314
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
2315
|
+
furnished to do so, subject to the following conditions:
|
|
2316
|
+
|
|
2317
|
+
The above copyright notice and this permission notice shall be included in
|
|
2318
|
+
all copies or substantial portions of the Software.
|
|
2319
|
+
|
|
2320
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
2321
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
2322
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
2323
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
2324
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
2325
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
2326
|
+
THE SOFTWARE.
|
|
2327
|
+
|
|
2328
|
+
|
|
2329
|
+
----------------
|
|
2330
|
+
|
|
2331
|
+
** p-queue@6.6.2 - https://www.npmjs.com/package/p-queue/v/6.6.2 | MIT
|
|
2332
|
+
MIT License
|
|
2333
|
+
|
|
2334
|
+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
|
2335
|
+
|
|
2336
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
2337
|
+
|
|
2338
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
2339
|
+
|
|
2340
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
2341
|
+
|
|
2342
|
+
|
|
2343
|
+
----------------
|
|
2344
|
+
|
|
2345
|
+
** p-timeout@3.2.0 - https://www.npmjs.com/package/p-timeout/v/3.2.0 | MIT
|
|
2346
|
+
MIT License
|
|
2347
|
+
|
|
2348
|
+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
|
2349
|
+
|
|
2350
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
2351
|
+
|
|
2352
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
2353
|
+
|
|
2354
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
2355
|
+
|
|
2356
|
+
|
|
2277
2357
|
----------------
|
|
2278
2358
|
|
|
2279
2359
|
** pac-proxy-agent@5.0.0 - https://www.npmjs.com/package/pac-proxy-agent/v/5.0.0 | MIT
|
package/build-info.json
CHANGED
|
@@ -31,7 +31,6 @@ class PatchedSharedIniFileCredentials extends AWS.SharedIniFileCredentials {
|
|
|
31
31
|
loadRoleProfile(creds, roleProfile, callback) {
|
|
32
32
|
// Need to duplicate the whole implementation here -- the function is long and has been written in
|
|
33
33
|
// such a way that there are no small monkey patches possible.
|
|
34
|
-
var _a, _b, _c, _d;
|
|
35
34
|
if (this.disableAssumeRole) {
|
|
36
35
|
throw AWS.util.error(new Error('Role assumption profiles are disabled. ' +
|
|
37
36
|
'Failed to load profile ' + this.profile +
|
|
@@ -52,7 +51,7 @@ class PatchedSharedIniFileCredentials extends AWS.SharedIniFileCredentials {
|
|
|
52
51
|
throw credentialError;
|
|
53
52
|
}
|
|
54
53
|
const profiles = loadProfilesProper(this.filename);
|
|
55
|
-
const region =
|
|
54
|
+
const region = profiles[this.profile]?.region ?? profiles.default?.region ?? 'us-east-1';
|
|
56
55
|
const stsCreds = sourceProfile ? this.sourceProfileCredentials(sourceProfile, creds) : this.credentialSourceCredentials(credentialSource);
|
|
57
56
|
this.roleArn = roleArn;
|
|
58
57
|
var sts = new AWS.STS({
|
|
@@ -154,4 +153,4 @@ function loadProfilesProper(filename) {
|
|
|
154
153
|
}
|
|
155
154
|
return profiles;
|
|
156
155
|
}
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNkay1pbmlmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXNkay1pbmlmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUcvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBYSwrQkFBZ0MsU0FBUSxHQUFHLENBQUMsd0JBQXdCO0lBU3hFLGVBQWUsQ0FDcEIsS0FBNkMsRUFDN0MsV0FBbUMsRUFDbkMsUUFBMkM7UUFFM0Msa0dBQWtHO1FBQ2xHLDhEQUE4RDs7UUFFOUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsTUFBTyxHQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FDM0IsSUFBSSxLQUFLLENBQUMseUNBQXlDO2dCQUN6Qyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsT0FBTztnQkFDeEMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFDcEMsRUFBRSxJQUFJLEVBQUUseUNBQXlDLEVBQUUsQ0FDcEQsQ0FBQztTQUNIO1FBRUQsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2hCLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDbkMsSUFBSSxlQUFlLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1FBQ3BELElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDekMsSUFBSSxTQUFTLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN2QyxJQUFJLGFBQWEsR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDO1FBQy9DLElBQUksZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDO1FBRXJELE1BQU0sZUFBZSxHQUFJLEdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUM3QyxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsSUFBSSxDQUFDLE9BQU8sb0ZBQW9GLENBQUMsRUFDakosRUFBRSxJQUFJLEVBQUUseUNB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cEMsa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUN0QyxRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUNoRCxDQUFDLENBQUM7S0FDSjtJQUNELElBQUksaUJBQWlCLEdBQTJDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakYsUUFBUSxFQUFFLFFBQVE7WUFDaEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ25GLENBQUMsQ0FBQztJQUNILEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDaEUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztLQUMxQjtJQUNELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2YsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pCLEdBQUcsT0FBTztTQUNYLENBQUM7S0FDSDtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5cblxuLyoqXG4gKiBIYWNrLWZpeFxuICpcbiAqIFRoZXJlIGFyZSBhIG51bWJlciBvZiBpc3N1ZXMgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gb2YgU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzXG4gKiB0aGF0IG5lZWQgZml4aW5nOlxuICpcbiAqICAxLiBUaGUgdXBzdHJlYW0gYXdzLXNkayBjb250YWlucyBhbiBpbmNvcnJlY3QgaW5zdGFudGlhdGlvbiBvZiBhbiBgQVdTLlNUU2BcbiAqICAgICBjbGllbnQsIHdoaWNoICpzaG91bGQqIGhhdmUgdGFrZW4gdGhlIHJlZ2lvbiBmcm9tIHRoZSByZXF1ZXN0ZWQgcHJvZmlsZVxuICogICAgIGJ1dCBkb2Vzbid0LiBJdCB3aWxsIHVzZSB0aGUgcmVnaW9uIGZyb20gdGhlIGRlZmF1bHQgcHJvZmlsZSwgd2hpY2hcbiAqICAgICBtYXkgbm90IGV4aXN0LCBkZWZhdWx0aW5nIHRvIGB1cy1lYXN0LTFgIChzaW5jZSB3ZSBzd2l0Y2hlZCB0b1xuICogICAgIEFXU19TVFNfUkVHSU9OQUxfRU5EUE9JTlRTPXJlZ2lvbmFsLCB0aGF0IGRlZmF1bHQgaXMgbm90IGV2ZW4gYWxsb3dlZCBhbnltb3JlXG4gKiAgICAgYW5kIHRoZSBhYnNlbmNlIG9mIGEgZGVmYXVsdCByZWdpb24gd2lsbCBsZWFkIHRvIGFuIGVycm9yKS5cbiAqXG4gKiAgMi4gVGhlIHNpbXBsZSBmaXggaXMgdG8gZ2V0IHRoZSByZWdpb24gZnJvbSB0aGUgYGNvbmZpZ2AgZmlsZS4gcHJvZmlsZXNcbiAqICAgICBhcmUgbWFkZSB1cCBvZiBhIGNvbWJpbmF0aW9uIG9mIGBjcmVkZW50aWFsc2AgYW5kIGBjb25maWdgLCBhbmQgdGhlIHJlZ2lvbiBpc1xuICogICAgIGdlbmVyYWxseSBpbiBgY29uZmlnYCB3aXRoIHRoZSByZXN0IGluIGBjcmVkZW50aWFsc2AuIEhvd2V2ZXIsIGEgYnVnIGluXG4gKiAgICAgYGdldFByb2ZpbGVzRnJvbVNoYXJlZENvbmZpZ2Agb3ZlcndyaXRlcyBBTEwgYGNvbmZpZ2AgZGF0YSB3aXRoIGBjcmVkZW50aWFsc2BcbiAqICAgICBkYXRhLCBzbyB3ZSBhbHNvIG5lZWQgdG8gZG8gZXh0cmEgd29yayB0byBmaXNoIHRoZSBgcmVnaW9uYCBvdXQgb2YgdGhlIGNvbmZpZy5cbiAqXG4gKiAzLiAgVGhlICdjcmVkZW50aWFsX3NvdXJjZScgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIE1lYW5pbmcgY3JlZGVudGlhbHNcbiAqICAgICBmb3IgYXNzdW1lLXJvbGUgY2Fubm90IGJlIGZldGNoZWQgdXNpbmcgRUMyL0VTQyBtZXRhZGF0YS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzL2lzc3Vlcy8zNDE4IGZvciBhbGwgdGhlIGdvcnkgZGV0YWlscy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzE5MTYgZm9yIHNvbWUgbW9yZSBnbG9yeSBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0Y2hlZFNoYXJlZEluaUZpbGVDcmVkZW50aWFscyBleHRlbmRzIEFXUy5TaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMge1xuICBkZWNsYXJlIHByaXZhdGUgcHJvZmlsZTogc3RyaW5nO1xuICBkZWNsYXJlIHByaXZhdGUgZmlsZW5hbWU6IHN0cmluZztcbiAgZGVjbGFyZSBwcml2YXRlIGRpc2FibGVBc3N1bWVSb2xlOiBib29sZWFuO1xuICBkZWNsYXJlIHByaXZhdGUgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZGVjbGFyZSBwcml2YXRlIHJvbGVBcm46IHN0cmluZztcbiAgZGVjbGFyZSBwcml2YXRlIGh0dHBPcHRpb25zPzogQVdTLkhUVFBPcHRpb25zO1xuICBkZWNsYXJlIHByaXZhdGUgdG9rZW5Db2RlRm4/OiAobWZhU2VyaWFsOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IsIHRva2VuPzogc3RyaW5nKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBsb2FkUm9sZVByb2ZpbGUoXG4gICAgY3JlZHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICAgIHJvbGVQcm9maWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IsIGRhdGE/OiBhbnkpID0+IHZvaWQpIHtcblxuICAgIC8vIE5lZWQgdG8gZHVwbGljYXRlIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbiBoZXJlIC0tIHRoZSBmdW5jdGlvbiBpcyBsb25nIGFuZCBoYXMgYmVlbiB3cml0dGVuIGluXG4gICAgLy8gc3VjaCBhIHdheSB0aGF0IHRoZXJlIGFyZSBubyBzbWFsbCBtb25rZXkgcGF0Y2hlcyBwb3NzaWJsZS5cblxuICAgIGlmICh0aGlzLmRpc2FibGVBc3N1bWVSb2xlKSB7XG4gICAgICB0aHJvdyAoQVdTIGFzIGFueSkudXRpbC5lcnJvcihcbiAgICAgICAgbmV3IEVycm9yKCdSb2xlIGFzc3VtcHRpb24gcHJvZmlsZXMgYXJlIGRpc2FibGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcm9maWxlICcgKyB0aGlzLnByb2ZpbGUgK1xuICAgICAgICAgICAgICAgICAgJyBmcm9tICcgKyBjcmVkcy5maWxlbmFtZSksXG4gICAgICAgIHsgY29kZTogJ1NoYXJlZEluaUZpbGVDcmVkZW50aWFsc1Byb3ZpZGVyRmFpbHVyZScgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByb2xlQXJuID0gcm9sZVByb2ZpbGUucm9sZV9hcm47XG4gICAgdmFyIHJvbGVTZXNzaW9uTmFtZSA9IHJvbGVQcm9maWxlLnJvbGVfc2Vzc2lvbl9uYW1lO1xuICAgIHZhciBleHRlcm5hbElkID0gcm9sZVByb2ZpbGUuZXh0ZXJuYWxfaWQ7XG4gICAgdmFyIG1mYVNlcmlhbCA9IHJvbGVQcm9maWxlLm1mYV9zZXJpYWw7XG4gICAgdmFyIHNvdXJjZVByb2ZpbGUgPSByb2xlUHJvZmlsZS5zb3VyY2VfcHJvZmlsZTtcbiAgICB2YXIgY3JlZGVudGlhbFNvdXJjZSA9IHJvbGVQcm9maWxlLmNyZWRlbnRpYWxfc291cmNlO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbEVycm9yID0gKEFXUyBhcyBhbnkpLnV0aWwuZXJyb3IoXG4gICAgICBuZXcgRXJyb3IoYFdoZW4gdXNpbmcgJ3JvbGVfYXJuJyBpbiBwcm9maWxlICgnJHt0aGlzLnByb2ZpbGV9JyksIHlvdSBtdXN0IGFsc28gY29uZmlndXJlIGV4YWN0bHkgb25lIG9mICdzb3VyY2VfcHJvZmlsZScgb3IgJ2NyZWRlbnRpYWxfc291cmNlJ2ApLFxuICAgICAgeyBjb2RlOiAnU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzUHJvdmlkZXJGYWlsdXJlJyB9LFxuICAgICk7XG5cbiAgICBpZiAoc291cmNlUHJvZmlsZSAmJiBjcmVkZW50aWFsU291cmNlKSB7XG4gICAgICB0aHJvdyBjcmVkZW50aWFsRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFzb3VyY2VQcm9maWxlICYmICFjcmVkZW50aWFsU291cmNlKSB7XG4gICAgICB0aHJvdyBjcmVkZW50aWFsRXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZmlsZXMgPSBsb2FkUHJvZmlsZXNQcm9wZXIodGhpcy5maWxlbmFtZSk7XG4gICAgY29uc3QgcmVnaW9uID0gcHJvZmlsZXNbdGhpcy5wcm9maWxlXT8ucmVnaW9uID8/IHByb2ZpbGVzLmRlZmF1bHQ/LnJlZ2lvbiA/PyAndXMtZWFzdC0xJztcblxuICAgIGNvbnN0IHN0c0NyZWRzID0gc291cmNlUHJvZmlsZSA/IHRoaXMuc291cmNlUHJvZmlsZUNyZWRlbnRpYWxzKHNvdXJjZVByb2ZpbGUsIGNyZWRzKSA6IHRoaXMuY3JlZGVudGlhbFNvdXJjZUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxTb3VyY2UpO1xuXG4gICAgdGhpcy5yb2xlQXJuID0gcm9sZUFybjtcbiAgICB2YXIgc3RzID0gbmV3IEFXUy5TVFMoe1xuICAgICAgY3JlZGVudGlhbHM6IHN0c0NyZWRzLFxuICAgICAgcmVnaW9uLFxuICAgICAgaHR0cE9wdGlvbnM6IHRoaXMuaHR0cE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB2YXIgcm9sZVBhcmFtczogQVdTLlNUUy5Bc3N1bWVSb2xlUmVxdWVzdCA9IHtcbiAgICAgIFJvbGVBcm46IHJvbGVBcm4sXG4gICAgICBSb2xlU2Vzc2lvbk5hbWU6IHJvbGVTZXNzaW9uTmFtZSB8fCAnYXdzLXNkay1qcy0nICsgRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgaWYgKGV4dGVybmFsSWQpIHtcbiAgICAgIHJvbGVQYXJhbXMuRXh0ZXJuYWxJZCA9IGV4dGVybmFsSWQ7XG4gICAgfVxuXG4gICAgaWYgKG1mYVNlcmlhbCAmJiBzZWxmLnRva2VuQ29kZUZuKSB7XG4gICAgICByb2xlUGFyYW1zLlNlcmlhbE51bWJlciA9IG1mYVNlcmlhbDtcbiAgICAgIHNlbGYudG9rZW5Db2RlRm4obWZhU2VyaWFsLCBmdW5jdGlvbihlcnIsIHRva2VuKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB2YXIgbWVzc2FnZTtcbiAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAoQVdTIGFzIGFueSkudXRpbC5lcnJvcihcbiAgICAgICAgICAgICAgbmV3IEVycm9yKCdFcnJvciBmZXRjaGluZyBNRkEgdG9rZW46ICcgKyBtZXNzYWdlKSxcbiAgICAgICAgICAgICAgeyBjb2RlOiAnU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzUHJvdmlkZXJGYWlsdXJlJyB9LFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm9sZVBhcmFtcy5Ub2tlbkNvZGUgPSB0b2tlbjtcbiAgICAgICAgc3RzLmFzc3VtZVJvbGUocm9sZVBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0cy5hc3N1bWVSb2xlKHJvbGVQYXJhbXMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgc291cmNlUHJvZmlsZUNyZWRlbnRpYWxzKHNvdXJjZVByb2ZpbGU6IHN0cmluZywgcHJvZmlsZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSB7XG5cbiAgICB2YXIgc291cmNlUHJvZmlsZUV4aXN0YW5jZVRlc3QgPSBwcm9maWxlc1tzb3VyY2VQcm9maWxlXTtcblxuICAgIGlmICh0eXBlb2Ygc291cmNlUHJvZmlsZUV4aXN0YW5jZVRlc3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyAoQVdTIGFzIGFueSkudXRpbC5lcnJvcihcbiAgICAgICAgbmV3IEVycm9yKCdzb3VyY2VfcHJvZmlsZSAnICsgc291cmNlUHJvZmlsZSArICcgdXNpbmcgcHJvZmlsZSAnXG4gICAgICAgICAgKyB0aGlzLnByb2ZpbGUgKyAnIGRvZXMgbm90IGV4aXN0JyksXG4gICAgICAgIHsgY29kZTogJ1NoYXJlZEluaUZpbGVDcmVkZW50aWFsc1Byb3ZpZGVyRmFpbHVyZScgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVByb2ZpbGVFeGlzdGFuY2VUZXN0LnNzb19zdGFydF91cmwpIHtcbiAgICAgIHJldHVybiBuZXcgQVdTLlNzb0NyZWRlbnRpYWxzKHsgcHJvZmlsZTogc291cmNlUHJvZmlsZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFXUy5TaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMoXG4gICAgICAoQVdTIGFzIGFueSkudXRpbC5tZXJnZSh0aGlzLm9wdGlvbnMgfHwge30sIHtcbiAgICAgICAgcHJvZmlsZTogc291cmNlUHJvZmlsZSxcbiAgICAgICAgcHJlZmVyU3RhdGljQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gIH1cblxuICAvLyB0aGUgYXdzLXNkayBmb3IganMgZG9lcyBub3Qgc3VwcG9ydCAnY3JlZGVudGlhbF9zb3VyY2UnIChodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzE5MTYpXG4gIC8vIHNvIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBvdXJzZWx2ZXMuXG4gIHByaXZhdGUgY3JlZGVudGlhbFNvdXJjZUNyZWRlbnRpYWxzKHNvdXJjZUNyZWRlbnRpYWw6IHN0cmluZykge1xuXG4gICAgLy8gc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jcmVkcmVmL2xhdGVzdC9yZWZkb2NzL3NldHRpbmctZ2xvYmFsLWNyZWRlbnRpYWxfc291cmNlLmh0bWxcbiAgICBzd2l0Y2ggKHNvdXJjZUNyZWRlbnRpYWwpIHtcbiAgICAgIGNhc2UgJ0Vudmlyb25tZW50Jzoge1xuICAgICAgICByZXR1cm4gbmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBV1MnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VjMkluc3RhbmNlTWV0YWRhdGEnOiB7XG4gICAgICAgIHJldHVybiBuZXcgQVdTLkVDMk1ldGFkYXRhQ3JlZGVudGlhbHMoKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Vjc0NvbnRhaW5lcic6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBV1MuRUNTQ3JlZGVudGlhbHMoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjcmVkZW50aWFsX3NvdXJjZSAke3NvdXJjZUNyZWRlbnRpYWx9IGluIHByb2ZpbGUgJHt0aGlzLnByb2ZpbGV9IGlzIHVuc3VwcG9ydGVkLiBjaG9vc2Ugb25lIG9mIFtFbnZpcm9ubWVudCwgRWMySW5zdGFuY2VNZXRhZGF0YSwgRWNzQ29udGFpbmVyXWApO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0byBsb2FkIHByb2ZpbGVzIGZyb20gZGlzayB0aGF0IE1FUkdFUyBjcmVkZW50aWFscyBhbmQgY29uZmlnIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmdcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9ibG9iLzVhZTVhN2Q3ZDI0ZDEwMDBkYmMwODljYzE1ZjhlZDJjN2IwNmM1NDIvbGliL3V0aWwuanMjTDk1NlxuICovXG5mdW5jdGlvbiBsb2FkUHJvZmlsZXNQcm9wZXIoZmlsZW5hbWU6IHN0cmluZykge1xuICBjb25zdCB1dGlsID0gKEFXUyBhcyBhbnkpLnV0aWw7IC8vIERvZXMgZXhpc3RzIGV2ZW4gdGhvdWdoIHRoZXJlIGFyZW4ndCBhbnkgdHlwaW5ncyBmb3IgaXRcbiAgY29uc3QgaW5pTG9hZGVyID0gdXRpbC5pbmlMb2FkZXI7XG4gIGNvbnN0IHByb2ZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBsZXQgcHJvZmlsZXNGcm9tQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBpZiAocHJvY2Vzcy5lbnZbdXRpbC5jb25maWdPcHRJbkVudl0pIHtcbiAgICBwcm9maWxlc0Zyb21Db25maWcgPSBpbmlMb2FkZXIubG9hZEZyb20oe1xuICAgICAgaXNDb25maWc6IHRydWUsXG4gICAgICBmaWxlbmFtZTogcHJvY2Vzcy5lbnZbdXRpbC5zaGFyZWRDb25maWdGaWxlRW52XSxcbiAgICB9KTtcbiAgfVxuICB2YXIgcHJvZmlsZXNGcm9tQ3JlZHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gaW5pTG9hZGVyLmxvYWRGcm9tKHtcbiAgICBmaWxlbmFtZTogZmlsZW5hbWUgfHxcbiAgICAgIChwcm9jZXNzLmVudlt1dGlsLmNvbmZpZ09wdEluRW52XSAmJiBwcm9jZXNzLmVudlt1dGlsLnNoYXJlZENyZWRlbnRpYWxzRmlsZUVudl0pLFxuICB9KTtcbiAgZm9yIChjb25zdCBbbmFtZSwgcHJvZmlsZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvZmlsZXNGcm9tQ29uZmlnKSkge1xuICAgIHByb2ZpbGVzW25hbWVdID0gcHJvZmlsZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9maWxlXSBvZiBPYmplY3QuZW50cmllcyhwcm9maWxlc0Zyb21DcmVkcykpIHtcbiAgICBwcm9maWxlc1tuYW1lXSA9IHtcbiAgICAgIC4uLnByb2ZpbGVzW25hbWVdLFxuICAgICAgLi4ucHJvZmlsZSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBwcm9maWxlcztcbn1cbiJdfQ==
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXNkay1pbmlmaWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLXNkay1pbmlmaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUcvQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBYSwrQkFBZ0MsU0FBUSxHQUFHLENBQUMsd0JBQXdCO0lBU3hFLGVBQWUsQ0FDcEIsS0FBNkMsRUFDN0MsV0FBbUMsRUFDbkMsUUFBMkM7UUFFM0Msa0dBQWtHO1FBQ2xHLDhEQUE4RDtRQUU5RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixNQUFPLEdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUMzQixJQUFJLEtBQUssQ0FBQyx5Q0FBeUM7Z0JBQ3pDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxPQUFPO2dCQUN4QyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUNwQyxFQUFFLElBQUksRUFBRSx5Q0FBeUMsRUFBRSxDQUNwRCxDQUFDO1NBQ0g7UUFFRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7UUFDaEIsSUFBSSxPQUFPLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQztRQUNuQyxJQUFJLGVBQWUsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7UUFDcEQsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUN6QyxJQUFJLFNBQVMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBQ3ZDLElBQUksYUFBYSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUM7UUFDL0MsSUFBSSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsaUJBQWlCLENBQUM7UUFFckQsTUFBTSxlQUFlLEdBQUksR0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQzdDLElBQUksS0FBSyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsT0FBTyxvRkFBb0YsQ0FBQyxFQUNqSixFQUFFLElBQUksRUFBRSx5Q0FB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QWtCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUN0QyxRQUFRLEVBQUUsSUFBSTtZQUNkLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztTQUNoRCxDQUFDLENBQUM7S0FDSjtJQUNELElBQUksaUJBQWlCLEdBQTJDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDakYsUUFBUSxFQUFFLFFBQVE7WUFDaEIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0tBQ25GLENBQUMsQ0FBQztJQUNILEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDaEUsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztLQUMxQjtJQUNELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDL0QsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ2YsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2pCLEdBQUcsT0FBTztTQUNYLENBQUM7S0FDSDtJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5cblxuLyoqXG4gKiBIYWNrLWZpeFxuICpcbiAqIFRoZXJlIGFyZSBhIG51bWJlciBvZiBpc3N1ZXMgaW4gdGhlIHVwc3RyZWFtIHZlcnNpb24gb2YgU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzXG4gKiB0aGF0IG5lZWQgZml4aW5nOlxuICpcbiAqICAxLiBUaGUgdXBzdHJlYW0gYXdzLXNkayBjb250YWlucyBhbiBpbmNvcnJlY3QgaW5zdGFudGlhdGlvbiBvZiBhbiBgQVdTLlNUU2BcbiAqICAgICBjbGllbnQsIHdoaWNoICpzaG91bGQqIGhhdmUgdGFrZW4gdGhlIHJlZ2lvbiBmcm9tIHRoZSByZXF1ZXN0ZWQgcHJvZmlsZVxuICogICAgIGJ1dCBkb2Vzbid0LiBJdCB3aWxsIHVzZSB0aGUgcmVnaW9uIGZyb20gdGhlIGRlZmF1bHQgcHJvZmlsZSwgd2hpY2hcbiAqICAgICBtYXkgbm90IGV4aXN0LCBkZWZhdWx0aW5nIHRvIGB1cy1lYXN0LTFgIChzaW5jZSB3ZSBzd2l0Y2hlZCB0b1xuICogICAgIEFXU19TVFNfUkVHSU9OQUxfRU5EUE9JTlRTPXJlZ2lvbmFsLCB0aGF0IGRlZmF1bHQgaXMgbm90IGV2ZW4gYWxsb3dlZCBhbnltb3JlXG4gKiAgICAgYW5kIHRoZSBhYnNlbmNlIG9mIGEgZGVmYXVsdCByZWdpb24gd2lsbCBsZWFkIHRvIGFuIGVycm9yKS5cbiAqXG4gKiAgMi4gVGhlIHNpbXBsZSBmaXggaXMgdG8gZ2V0IHRoZSByZWdpb24gZnJvbSB0aGUgYGNvbmZpZ2AgZmlsZS4gcHJvZmlsZXNcbiAqICAgICBhcmUgbWFkZSB1cCBvZiBhIGNvbWJpbmF0aW9uIG9mIGBjcmVkZW50aWFsc2AgYW5kIGBjb25maWdgLCBhbmQgdGhlIHJlZ2lvbiBpc1xuICogICAgIGdlbmVyYWxseSBpbiBgY29uZmlnYCB3aXRoIHRoZSByZXN0IGluIGBjcmVkZW50aWFsc2AuIEhvd2V2ZXIsIGEgYnVnIGluXG4gKiAgICAgYGdldFByb2ZpbGVzRnJvbVNoYXJlZENvbmZpZ2Agb3ZlcndyaXRlcyBBTEwgYGNvbmZpZ2AgZGF0YSB3aXRoIGBjcmVkZW50aWFsc2BcbiAqICAgICBkYXRhLCBzbyB3ZSBhbHNvIG5lZWQgdG8gZG8gZXh0cmEgd29yayB0byBmaXNoIHRoZSBgcmVnaW9uYCBvdXQgb2YgdGhlIGNvbmZpZy5cbiAqXG4gKiAzLiAgVGhlICdjcmVkZW50aWFsX3NvdXJjZScgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuIE1lYW5pbmcgY3JlZGVudGlhbHNcbiAqICAgICBmb3IgYXNzdW1lLXJvbGUgY2Fubm90IGJlIGZldGNoZWQgdXNpbmcgRUMyL0VTQyBtZXRhZGF0YS5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzL2lzc3Vlcy8zNDE4IGZvciBhbGwgdGhlIGdvcnkgZGV0YWlscy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzE5MTYgZm9yIHNvbWUgbW9yZSBnbG9yeSBkZXRhaWxzLlxuICovXG5leHBvcnQgY2xhc3MgUGF0Y2hlZFNoYXJlZEluaUZpbGVDcmVkZW50aWFscyBleHRlbmRzIEFXUy5TaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMge1xuICBkZWNsYXJlIHByaXZhdGUgcHJvZmlsZTogc3RyaW5nO1xuICBkZWNsYXJlIHByaXZhdGUgZmlsZW5hbWU6IHN0cmluZztcbiAgZGVjbGFyZSBwcml2YXRlIGRpc2FibGVBc3N1bWVSb2xlOiBib29sZWFuO1xuICBkZWNsYXJlIHByaXZhdGUgb3B0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgZGVjbGFyZSBwcml2YXRlIHJvbGVBcm46IHN0cmluZztcbiAgZGVjbGFyZSBwcml2YXRlIGh0dHBPcHRpb25zPzogQVdTLkhUVFBPcHRpb25zO1xuICBkZWNsYXJlIHByaXZhdGUgdG9rZW5Db2RlRm4/OiAobWZhU2VyaWFsOiBzdHJpbmcsIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IsIHRva2VuPzogc3RyaW5nKSA9PiB2b2lkKSA9PiB2b2lkO1xuXG4gIHB1YmxpYyBsb2FkUm9sZVByb2ZpbGUoXG4gICAgY3JlZHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICAgIHJvbGVQcm9maWxlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGNhbGxiYWNrOiAoZXJyPzogRXJyb3IsIGRhdGE/OiBhbnkpID0+IHZvaWQpIHtcblxuICAgIC8vIE5lZWQgdG8gZHVwbGljYXRlIHRoZSB3aG9sZSBpbXBsZW1lbnRhdGlvbiBoZXJlIC0tIHRoZSBmdW5jdGlvbiBpcyBsb25nIGFuZCBoYXMgYmVlbiB3cml0dGVuIGluXG4gICAgLy8gc3VjaCBhIHdheSB0aGF0IHRoZXJlIGFyZSBubyBzbWFsbCBtb25rZXkgcGF0Y2hlcyBwb3NzaWJsZS5cblxuICAgIGlmICh0aGlzLmRpc2FibGVBc3N1bWVSb2xlKSB7XG4gICAgICB0aHJvdyAoQVdTIGFzIGFueSkudXRpbC5lcnJvcihcbiAgICAgICAgbmV3IEVycm9yKCdSb2xlIGFzc3VtcHRpb24gcHJvZmlsZXMgYXJlIGRpc2FibGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcm9maWxlICcgKyB0aGlzLnByb2ZpbGUgK1xuICAgICAgICAgICAgICAgICAgJyBmcm9tICcgKyBjcmVkcy5maWxlbmFtZSksXG4gICAgICAgIHsgY29kZTogJ1NoYXJlZEluaUZpbGVDcmVkZW50aWFsc1Byb3ZpZGVyRmFpbHVyZScgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciByb2xlQXJuID0gcm9sZVByb2ZpbGUucm9sZV9hcm47XG4gICAgdmFyIHJvbGVTZXNzaW9uTmFtZSA9IHJvbGVQcm9maWxlLnJvbGVfc2Vzc2lvbl9uYW1lO1xuICAgIHZhciBleHRlcm5hbElkID0gcm9sZVByb2ZpbGUuZXh0ZXJuYWxfaWQ7XG4gICAgdmFyIG1mYVNlcmlhbCA9IHJvbGVQcm9maWxlLm1mYV9zZXJpYWw7XG4gICAgdmFyIHNvdXJjZVByb2ZpbGUgPSByb2xlUHJvZmlsZS5zb3VyY2VfcHJvZmlsZTtcbiAgICB2YXIgY3JlZGVudGlhbFNvdXJjZSA9IHJvbGVQcm9maWxlLmNyZWRlbnRpYWxfc291cmNlO1xuXG4gICAgY29uc3QgY3JlZGVudGlhbEVycm9yID0gKEFXUyBhcyBhbnkpLnV0aWwuZXJyb3IoXG4gICAgICBuZXcgRXJyb3IoYFdoZW4gdXNpbmcgJ3JvbGVfYXJuJyBpbiBwcm9maWxlICgnJHt0aGlzLnByb2ZpbGV9JyksIHlvdSBtdXN0IGFsc28gY29uZmlndXJlIGV4YWN0bHkgb25lIG9mICdzb3VyY2VfcHJvZmlsZScgb3IgJ2NyZWRlbnRpYWxfc291cmNlJ2ApLFxuICAgICAgeyBjb2RlOiAnU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzUHJvdmlkZXJGYWlsdXJlJyB9LFxuICAgICk7XG5cbiAgICBpZiAoc291cmNlUHJvZmlsZSAmJiBjcmVkZW50aWFsU291cmNlKSB7XG4gICAgICB0aHJvdyBjcmVkZW50aWFsRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFzb3VyY2VQcm9maWxlICYmICFjcmVkZW50aWFsU291cmNlKSB7XG4gICAgICB0aHJvdyBjcmVkZW50aWFsRXJyb3I7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvZmlsZXMgPSBsb2FkUHJvZmlsZXNQcm9wZXIodGhpcy5maWxlbmFtZSk7XG4gICAgY29uc3QgcmVnaW9uID0gcHJvZmlsZXNbdGhpcy5wcm9maWxlXT8ucmVnaW9uID8/IHByb2ZpbGVzLmRlZmF1bHQ/LnJlZ2lvbiA/PyAndXMtZWFzdC0xJztcblxuICAgIGNvbnN0IHN0c0NyZWRzID0gc291cmNlUHJvZmlsZSA/IHRoaXMuc291cmNlUHJvZmlsZUNyZWRlbnRpYWxzKHNvdXJjZVByb2ZpbGUsIGNyZWRzKSA6IHRoaXMuY3JlZGVudGlhbFNvdXJjZUNyZWRlbnRpYWxzKGNyZWRlbnRpYWxTb3VyY2UpO1xuXG4gICAgdGhpcy5yb2xlQXJuID0gcm9sZUFybjtcbiAgICB2YXIgc3RzID0gbmV3IEFXUy5TVFMoe1xuICAgICAgY3JlZGVudGlhbHM6IHN0c0NyZWRzLFxuICAgICAgcmVnaW9uLFxuICAgICAgaHR0cE9wdGlvbnM6IHRoaXMuaHR0cE9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICB2YXIgcm9sZVBhcmFtczogQVdTLlNUUy5Bc3N1bWVSb2xlUmVxdWVzdCA9IHtcbiAgICAgIFJvbGVBcm46IHJvbGVBcm4sXG4gICAgICBSb2xlU2Vzc2lvbk5hbWU6IHJvbGVTZXNzaW9uTmFtZSB8fCAnYXdzLXNkay1qcy0nICsgRGF0ZS5ub3coKSxcbiAgICB9O1xuXG4gICAgaWYgKGV4dGVybmFsSWQpIHtcbiAgICAgIHJvbGVQYXJhbXMuRXh0ZXJuYWxJZCA9IGV4dGVybmFsSWQ7XG4gICAgfVxuXG4gICAgaWYgKG1mYVNlcmlhbCAmJiBzZWxmLnRva2VuQ29kZUZuKSB7XG4gICAgICByb2xlUGFyYW1zLlNlcmlhbE51bWJlciA9IG1mYVNlcmlhbDtcbiAgICAgIHNlbGYudG9rZW5Db2RlRm4obWZhU2VyaWFsLCBmdW5jdGlvbihlcnIsIHRva2VuKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB2YXIgbWVzc2FnZTtcbiAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FsbGJhY2soXG4gICAgICAgICAgICAoQVdTIGFzIGFueSkudXRpbC5lcnJvcihcbiAgICAgICAgICAgICAgbmV3IEVycm9yKCdFcnJvciBmZXRjaGluZyBNRkEgdG9rZW46ICcgKyBtZXNzYWdlKSxcbiAgICAgICAgICAgICAgeyBjb2RlOiAnU2hhcmVkSW5pRmlsZUNyZWRlbnRpYWxzUHJvdmlkZXJGYWlsdXJlJyB9LFxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcm9sZVBhcmFtcy5Ub2tlbkNvZGUgPSB0b2tlbjtcbiAgICAgICAgc3RzLmFzc3VtZVJvbGUocm9sZVBhcmFtcywgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN0cy5hc3N1bWVSb2xlKHJvbGVQYXJhbXMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHByaXZhdGUgc291cmNlUHJvZmlsZUNyZWRlbnRpYWxzKHNvdXJjZVByb2ZpbGU6IHN0cmluZywgcHJvZmlsZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSB7XG5cbiAgICB2YXIgc291cmNlUHJvZmlsZUV4aXN0YW5jZVRlc3QgPSBwcm9maWxlc1tzb3VyY2VQcm9maWxlXTtcblxuICAgIGlmICh0eXBlb2Ygc291cmNlUHJvZmlsZUV4aXN0YW5jZVRlc3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyAoQVdTIGFzIGFueSkudXRpbC5lcnJvcihcbiAgICAgICAgbmV3IEVycm9yKCdzb3VyY2VfcHJvZmlsZSAnICsgc291cmNlUHJvZmlsZSArICcgdXNpbmcgcHJvZmlsZSAnXG4gICAgICAgICAgKyB0aGlzLnByb2ZpbGUgKyAnIGRvZXMgbm90IGV4aXN0JyksXG4gICAgICAgIHsgY29kZTogJ1NoYXJlZEluaUZpbGVDcmVkZW50aWFsc1Byb3ZpZGVyRmFpbHVyZScgfSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZVByb2ZpbGVFeGlzdGFuY2VUZXN0LnNzb19zdGFydF91cmwpIHtcbiAgICAgIHJldHVybiBuZXcgQVdTLlNzb0NyZWRlbnRpYWxzKHsgcHJvZmlsZTogc291cmNlUHJvZmlsZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFXUy5TaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMoXG4gICAgICAoQVdTIGFzIGFueSkudXRpbC5tZXJnZSh0aGlzLm9wdGlvbnMgfHwge30sIHtcbiAgICAgICAgcHJvZmlsZTogc291cmNlUHJvZmlsZSxcbiAgICAgICAgcHJlZmVyU3RhdGljQ3JlZGVudGlhbHM6IHRydWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gIH1cblxuICAvLyB0aGUgYXdzLXNkayBmb3IganMgZG9lcyBub3Qgc3VwcG9ydCAnY3JlZGVudGlhbF9zb3VyY2UnIChodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvaXNzdWVzLzE5MTYpXG4gIC8vIHNvIHVuZm9ydHVuYXRlbHkgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBvdXJzZWx2ZXMuXG4gIHByaXZhdGUgY3JlZGVudGlhbFNvdXJjZUNyZWRlbnRpYWxzKHNvdXJjZUNyZWRlbnRpYWw6IHN0cmluZykge1xuXG4gICAgLy8gc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jcmVkcmVmL2xhdGVzdC9yZWZkb2NzL3NldHRpbmctZ2xvYmFsLWNyZWRlbnRpYWxfc291cmNlLmh0bWxcbiAgICBzd2l0Y2ggKHNvdXJjZUNyZWRlbnRpYWwpIHtcbiAgICAgIGNhc2UgJ0Vudmlyb25tZW50Jzoge1xuICAgICAgICByZXR1cm4gbmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBV1MnKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VjMkluc3RhbmNlTWV0YWRhdGEnOiB7XG4gICAgICAgIHJldHVybiBuZXcgQVdTLkVDMk1ldGFkYXRhQ3JlZGVudGlhbHMoKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Vjc0NvbnRhaW5lcic6IHtcbiAgICAgICAgcmV0dXJuIG5ldyBBV1MuRUNTQ3JlZGVudGlhbHMoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjcmVkZW50aWFsX3NvdXJjZSAke3NvdXJjZUNyZWRlbnRpYWx9IGluIHByb2ZpbGUgJHt0aGlzLnByb2ZpbGV9IGlzIHVuc3VwcG9ydGVkLiBjaG9vc2Ugb25lIG9mIFtFbnZpcm9ubWVudCwgRWMySW5zdGFuY2VNZXRhZGF0YSwgRWNzQ29udGFpbmVyXWApO1xuICAgICAgfVxuICAgIH1cblxuICB9XG59XG5cbi8qKlxuICogQSBmdW5jdGlvbiB0byBsb2FkIHByb2ZpbGVzIGZyb20gZGlzayB0aGF0IE1FUkdFUyBjcmVkZW50aWFscyBhbmQgY29uZmlnIGluc3RlYWQgb2Ygb3ZlcndyaXRpbmdcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLXNkay1qcy9ibG9iLzVhZTVhN2Q3ZDI0ZDEwMDBkYmMwODljYzE1ZjhlZDJjN2IwNmM1NDIvbGliL3V0aWwuanMjTDk1NlxuICovXG5mdW5jdGlvbiBsb2FkUHJvZmlsZXNQcm9wZXIoZmlsZW5hbWU6IHN0cmluZykge1xuICBjb25zdCB1dGlsID0gKEFXUyBhcyBhbnkpLnV0aWw7IC8vIERvZXMgZXhpc3RzIGV2ZW4gdGhvdWdoIHRoZXJlIGFyZW4ndCBhbnkgdHlwaW5ncyBmb3IgaXRcbiAgY29uc3QgaW5pTG9hZGVyID0gdXRpbC5pbmlMb2FkZXI7XG4gIGNvbnN0IHByb2ZpbGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBsZXQgcHJvZmlsZXNGcm9tQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHt9O1xuICBpZiAocHJvY2Vzcy5lbnZbdXRpbC5jb25maWdPcHRJbkVudl0pIHtcbiAgICBwcm9maWxlc0Zyb21Db25maWcgPSBpbmlMb2FkZXIubG9hZEZyb20oe1xuICAgICAgaXNDb25maWc6IHRydWUsXG4gICAgICBmaWxlbmFtZTogcHJvY2Vzcy5lbnZbdXRpbC5zaGFyZWRDb25maWdGaWxlRW52XSxcbiAgICB9KTtcbiAgfVxuICB2YXIgcHJvZmlsZXNGcm9tQ3JlZHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+ID0gaW5pTG9hZGVyLmxvYWRGcm9tKHtcbiAgICBmaWxlbmFtZTogZmlsZW5hbWUgfHxcbiAgICAgIChwcm9jZXNzLmVudlt1dGlsLmNvbmZpZ09wdEluRW52XSAmJiBwcm9jZXNzLmVudlt1dGlsLnNoYXJlZENyZWRlbnRpYWxzRmlsZUVudl0pLFxuICB9KTtcbiAgZm9yIChjb25zdCBbbmFtZSwgcHJvZmlsZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvZmlsZXNGcm9tQ29uZmlnKSkge1xuICAgIHByb2ZpbGVzW25hbWVdID0gcHJvZmlsZTtcbiAgfVxuICBmb3IgKGNvbnN0IFtuYW1lLCBwcm9maWxlXSBvZiBPYmplY3QuZW50cmllcyhwcm9maWxlc0Zyb21DcmVkcykpIHtcbiAgICBwcm9maWxlc1tuYW1lXSA9IHtcbiAgICAgIC4uLnByb2ZpbGVzW25hbWVdLFxuICAgICAgLi4ucHJvZmlsZSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBwcm9maWxlcztcbn1cbiJdfQ==
|
|
@@ -35,7 +35,6 @@ class AwsCliCompatible {
|
|
|
35
35
|
* 4. Respects $AWS_DEFAULT_PROFILE in addition to $AWS_PROFILE.
|
|
36
36
|
*/
|
|
37
37
|
static async credentialChain(options = {}) {
|
|
38
|
-
var _a, _b;
|
|
39
38
|
// Force reading the `config` file if it exists by setting the appropriate
|
|
40
39
|
// environment variable.
|
|
41
40
|
await forceSdkToReadConfigIfPresent();
|
|
@@ -51,14 +50,14 @@ class AwsCliCompatible {
|
|
|
51
50
|
() => new AWS.EnvironmentCredentials('AMAZON'),
|
|
52
51
|
...iniFileCredentialFactories(implicitProfile),
|
|
53
52
|
];
|
|
54
|
-
if (
|
|
53
|
+
if (options.containerCreds ?? hasEcsCredentials()) {
|
|
55
54
|
sources.push(() => new AWS.ECSCredentials());
|
|
56
55
|
}
|
|
57
56
|
else if (hasWebIdentityCredentials()) {
|
|
58
57
|
// else if: we have found WebIdentityCredentials as provided by EKS ServiceAccounts
|
|
59
58
|
sources.push(() => new AWS.TokenFileWebIdentityCredentials());
|
|
60
59
|
}
|
|
61
|
-
else if (
|
|
60
|
+
else if (options.ec2instance ?? await isEc2Instance()) {
|
|
62
61
|
// else if: don't get EC2 creds if we should have gotten ECS or EKS creds
|
|
63
62
|
// ECS and EKS instances also run on EC2 boxes but the creds represent something different.
|
|
64
63
|
// Same behavior as upstream code.
|
|
@@ -95,7 +94,6 @@ class AwsCliCompatible {
|
|
|
95
94
|
* Lambda and CodeBuild set the $AWS_REGION variable.
|
|
96
95
|
*/
|
|
97
96
|
static async region(options = {}) {
|
|
98
|
-
var _a;
|
|
99
97
|
const profile = options.profile || process.env.AWS_PROFILE || process.env.AWS_DEFAULT_PROFILE || 'default';
|
|
100
98
|
// Defaults inside constructor
|
|
101
99
|
const toCheck = [
|
|
@@ -110,10 +108,10 @@ class AwsCliCompatible {
|
|
|
110
108
|
if (await fs.pathExists(opts.filename)) {
|
|
111
109
|
const configFile = new sdk_ini_file_1.SharedIniFile(opts);
|
|
112
110
|
const section = await configFile.getProfile(opts.profile);
|
|
113
|
-
region = section
|
|
111
|
+
region = section?.region;
|
|
114
112
|
}
|
|
115
113
|
}
|
|
116
|
-
if (!region && (
|
|
114
|
+
if (!region && (options.ec2instance ?? await isEc2Instance())) {
|
|
117
115
|
_env_1.debug('Looking up AWS region in the EC2 Instance Metadata Service (IMDS).');
|
|
118
116
|
const imdsOptions = {
|
|
119
117
|
httpOptions: { timeout: 1000, connectTimeout: 1000 }, maxRetries: 2,
|
|
@@ -316,4 +314,4 @@ async function tokenCodeFn(serialArn, cb) {
|
|
|
316
314
|
cb(err);
|
|
317
315
|
}
|
|
318
316
|
}
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3NjbGktY29tcGF0aWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBK0M7QUFDL0MseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFDckMsaUNBQStCO0FBQy9CLHVEQUFvRTtBQUNwRSxpREFBK0M7QUFFL0M7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFrQyxFQUFFOztRQUN0RSwwRUFBMEU7UUFDMUUsd0JBQXdCO1FBQ3hCLE1BQU0sNkJBQTZCLEVBQUUsQ0FBQztRQUV0QywrRUFBK0U7UUFDL0UsNkVBQTZFO1FBQzdFLGtGQUFrRjtRQUNsRixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7WUFDbkIsT0FBTyxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNyRjtRQUVELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksU0FBUyxDQUFDO1FBRWhHLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO1lBQzNDLEdBQUcsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUM5QyxHQUFHLDBCQUEwQixDQUFDLGVBQWUsQ0FBQztTQUMvQyxDQUFDO1FBRUYsVUFBSSxPQUFPLENBQUMsY0FBYyxtQ0FBSSxpQkFBaUIsRUFBRSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxJ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QUFDLENBQUM7S0FDekQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLFlBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNULE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQWNEOzs7O0dBSUc7QUFDSCxLQUFLLFVBQVUsV0FBVyxDQUFDLFNBQWlCLEVBQUUsRUFBeUM7SUFDckYsWUFBSyxDQUFDLGtDQUFrQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELElBQUk7UUFDRixNQUFNLEtBQUssR0FBVyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLFNBQVMsSUFBSSxFQUFFO1lBQzFFLElBQUksRUFBRSxJQUFJO1lBQ1YsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQUM7UUFDSCxZQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUM5QyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ3RCO0lBQUMsT0FBTyxHQUFHLEVBQUU7UUFDWixZQUFLLENBQUMseUJBQXlCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdEMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ1Q7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2hpbGRfcHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0IHsgZGVidWcgfSBmcm9tICcuL19lbnYnO1xuaW1wb3J0IHsgUGF0Y2hlZFNoYXJlZEluaUZpbGVDcmVkZW50aWFscyB9IGZyb20gJy4vYXdzLXNkay1pbmlmaWxlJztcbmltcG9ydCB7IFNoYXJlZEluaUZpbGUgfSBmcm9tICcuL3Nka19pbmlfZmlsZSc7XG5cbi8qKlxuICogQmVoYXZpb3JzIHRvIG1hdGNoIEFXUyBDTElcbiAqXG4gKiBTZWUgdGhlc2UgbGlua3M6XG4gKlxuICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvdG9waWMvY29uZmlnLXZhcnMuaHRtbFxuICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2NsaS9sYXRlc3QvdXNlcmd1aWRlL2NsaS1jb25maWd1cmUtZW52dmFycy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBBd3NDbGlDb21wYXRpYmxlIHtcbiAgLyoqXG4gICAqIEJ1aWxkIGFuIEFXUyBDTEktY29tcGF0aWJsZSBjcmVkZW50aWFsIGNoYWluIHByb3ZpZGVyXG4gICAqXG4gICAqIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgZGVmYXVsdCBjcmVkZW50aWFsIHByb3ZpZGVyIGNoYWluIGNyZWF0ZWQgYnkgdGhlIFNES1xuICAgKiBleGNlcHQ6XG4gICAqXG4gICAqIDEuIEFjY2VwdHMgcHJvZmlsZSBhcmd1bWVudCBpbiB0aGUgY29uc3RydWN0b3IgKHRoZSBTREsgbXVzdCBoYXZlIGl0IHByZXBvcHVsYXRlZFxuICAgKiAgICBpbiB0aGUgZW52aXJvbm1lbnQpLlxuICAgKiAyLiBDb25kaXRpb25hbGx5IGNoZWNrcyBFQzIgY3JlZGVudGlhbHMsIGJlY2F1c2UgY2hlY2tpbmcgZm9yIEVDMlxuICAgKiAgICBjcmVkZW50aWFscyBvbiBhIG5vbi1FQzIgbWFjaGluZSBtYXkgbGVhZCB0byBsb25nIGRlbGF5cyAoaW4gdGhlIGJlc3QgY2FzZSlcbiAgICogICAgb3IgYW4gZXhjZXB0aW9uIChpbiB0aGUgd29yc3QgY2FzZSkuXG4gICAqIDMuIFJlc3BlY3RzICRBV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUuXG4gICAqIDQuIFJlc3BlY3RzICRBV1NfREVGQVVMVF9QUk9GSUxFIGluIGFkZGl0aW9uIHRvICRBV1NfUFJPRklMRS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgY3JlZGVudGlhbENoYWluKG9wdGlvbnM6IENyZWRlbnRpYWxDaGFpbk9wdGlvbnMgPSB7fSkge1xuICAgIC8vIEZvcmNlIHJlYWRpbmcgdGhlIGBjb25maWdgIGZpbGUgaWYgaXQgZXhpc3RzIGJ5IHNldHRpbmcgdGhlIGFwcHJvcHJpYXRlXG4gICAgLy8gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gICAgYXdhaXQgZm9yY2VTZGtUb1JlYWRDb25maWdJZlByZXNlbnQoKTtcblxuICAgIC8vIFRvIG1hdGNoIEFXUyBDTEkgYmVoYXZpb3IsIGlmIGEgcHJvZmlsZSBpcyBleHBsaWNpdGx5IGdpdmVuIHVzaW5nIC0tcHJvZmlsZSxcbiAgICAvLyB3ZSB1c2UgdGhhdCB0byB0aGUgZXhjbHVzaW9uIG9mIGV2ZXJ5dGhpbmcgZWxzZSAobm90ZTogdGhpcyBkb2VzIG5vdCBhcHBseVxuICAgIC8vIHRvIEFXU19QUk9GSUxFLCBlbnZpcm9ubWVudCBjcmVkZW50aWFscyBzdGlsbCB0YWtlIHByZWNlZGVuY2Ugb3ZlciBBV1NfUFJPRklMRSlcbiAgICBpZiAob3B0aW9ucy5wcm9maWxlKSB7XG4gICAgICByZXR1cm4gbmV3IEFXUy5DcmVkZW50aWFsUHJvdmlkZXJDaGFpbihpbmlGaWxlQ3JlZGVudGlhbEZhY3RvcmllcyhvcHRpb25zLnByb2ZpbGUpKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbXBsaWNpdFByb2ZpbGUgPSBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSB8fCBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9QUk9GSUxFIHx8ICdkZWZhdWx0JztcblxuICAgIGNvbnN0IHNvdXJjZXMgPSBbXG4gICAgICAoKSA9PiBuZXcgQVdTLkVudmlyb25tZW50Q3JlZGVudGlhbHMoJ0FXUycpLFxuICAgICAgKCkgPT4gbmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBTUFaT04nKSxcbiAgICAgIC4uLmluaUZpbGVDcmVkZW50aWFsRmFjdG9yaWVzKGltcGxpY2l0UHJvZmlsZSksXG4gICAgXTtcblxuICAgIGlmIChvcHRpb25zLmNvbnRhaW5lckNyZWRzID8/IGhhc0Vjc0NyZWRlbnRpYWxzKCkpIHtcbiAgICAgIHNvdXJjZXMucHVzaCgoKSA9PiBuZXcgQVdTLkVDU0NyZWRlbnRpYWxzKCkpO1xuICAgIH0gZWxzZSBpZiAoaGFzV2ViSWRlbnRpdHlDcmVkZW50aWFscygpKSB7XG4gICAgICAvLyBlbHNlIGlmOiB3ZSBoYXZlIGZvdW5kIFdlYklkZW50aXR5Q3JlZGVudGlhbHMgYXMgcHJvdmlkZWQgYnkgRUtTIFNlcnZpY2VBY2NvdW50c1xuICAgICAgc291cmNlcy5wdXNoKCgpID0+IG5ldyBBV1MuVG9rZW5GaWxlV2ViSWRlbnRpdHlDcmVkZW50aWFscygpKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZWMyaW5zdGFuY2UgPz8gYXdhaXQgaXNFYzJJbnN0YW5jZSgpKSB7XG4gICAgICAvLyBlbHNlIGlmOiBkb24ndCBnZXQgRUMyIGNyZWRzIGlmIHdlIHNob3VsZCBoYXZlIGdvdHRlbiBFQ1Mgb3IgRUtTIGNyZWRzXG4gICAgICAvLyBFQ1MgYW5kIEVLUyBpbnN0YW5jZXMgYWxzbyBydW4gb24gRUMyIGJveGVzIGJ1dCB0aGUgY3JlZHMgcmVwcmVzZW50IHNvbWV0aGluZyBkaWZmZXJlbnQuXG4gICAgICAvLyBTYW1lIGJlaGF2aW9yIGFzIHVwc3RyZWFtIGNvZGUuXG4gICAgICBzb3VyY2VzLnB1c2goKCkgPT4gbmV3IEFXUy5FQzJNZXRhZGF0YUNyZWRlbnRpYWxzKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQVdTLkNyZWRlbnRpYWxQcm92aWRlckNoYWluKHNvdXJjZXMpO1xuXG4gICAgZnVuY3Rpb24gcHJvZmlsZUNyZWRlbnRpYWxzKHByb2ZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBuZXcgUGF0Y2hlZFNoYXJlZEluaUZpbGVDcmVkZW50aWFscyh7XG4gICAgICAgIHByb2ZpbGU6IHByb2ZpbGVOYW1lLFxuICAgICAgICBmaWxlbmFtZTogY3JlZGVudGlhbHNGaWxlTmFtZSgpLFxuICAgICAgICBodHRwT3B0aW9uczogb3B0aW9ucy5odHRwT3B0aW9ucyxcbiAgICAgICAgdG9rZW5Db2RlRm4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmlGaWxlQ3JlZGVudGlhbEZhY3Rvcmllcyh0aGVQcm9maWxlOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICgpID0+IHByb2ZpbGVDcmVkZW50aWFscyh0aGVQcm9maWxlKSxcbiAgICAgICAgKCkgPT4gbmV3IEFXUy5Tc29DcmVkZW50aWFscyh7IHByb2ZpbGU6IHRoZVByb2ZpbGUgfSksXG4gICAgICAgICgpID0+IG5ldyBBV1MuUHJvY2Vzc0NyZWRlbnRpYWxzKHsgcHJvZmlsZTogdGhlUHJvZmlsZSB9KSxcbiAgICAgIF07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgZGVmYXVsdCByZWdpb24gaW4gYSBDTEktY29tcGF0aWJsZSB3YXlcbiAgICpcbiAgICogTW9zdGx5IGNvcGllZCBmcm9tIG5vZGVfbG9hZGVyLmpzLCBidXQgd2l0aCB0aGUgZm9sbG93aW5nIGRpZmZlcmVuY2VzIHRvIG1ha2UgaXRcbiAgICogQVdTIENMSSBjb21wYXRpYmxlOlxuICAgKlxuICAgKiAxLiBUYWtlcyBhIHByb2ZpbGUgbmFtZSBhcyBhbiBhcmd1bWVudCAoaW5zdGVhZCBvZiBmb3JjaW5nIGl0IHRvIGJlIHRha2VuIGZyb20gJEFXU19QUk9GSUxFKS5cbiAgICogICAgVGhpcyByZXF1aXJlcyBoYXZpbmcgbWFkZSBhIGNvcHkgb2YgdGhlIFNESydzIGBTaGFyZWRJbmlGaWxlYCAodGhlIG9yaWdpbmFsXG4gICAqICAgIGRvZXMgbm90IHRha2UgYW4gYXJndW1lbnQpLlxuICAgKiAyLiAkQVdTX0RFRkFVTFRfUFJPRklMRSBhbmQgJEFXU19ERUZBVUxUX1JFR0lPTiBhcmUgYWxzbyByZXNwZWN0ZWQuXG4gICAqXG4gICAqIExhbWJkYSBhbmQgQ29kZUJ1aWxkIHNldCB0aGUgJEFXU19SRUdJT04gdmFyaWFibGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIHJlZ2lvbihvcHRpb25zOiBSZWdpb25PcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHByb2ZpbGUgPSBvcHRpb25zLnByb2ZpbGUgfHwgcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUFJPRklMRSB8fCAnZGVmYXVsdCc7XG5cbiAgICAvLyBEZWZhdWx0cyBpbnNpZGUgY29uc3RydWN0b3JcbiAgICBjb25zdCB0b0NoZWNrID0gW1xuICAgICAgeyBmaWxlbmFtZTogY3JlZGVudGlhbHNGaWxlTmFtZSgpLCBwcm9maWxlIH0sXG4gICAgICB7IGlzQ29uZmlnOiB0cnVlLCBmaWxlbmFtZTogY29uZmlnRmlsZU5hbWUoKSwgcHJvZmlsZSB9LFxuICAgICAgeyBpc0NvbmZpZzogdHJ1ZSwgZmlsZW5hbWU6IGNvbmZpZ0ZpbGVOYW1lKCksIHByb2ZpbGU6ICdkZWZhdWx0JyB9LFxuICAgIF07XG5cbiAgICBsZXQgcmVnaW9uID0gcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiB8fCBwcm9jZXNzLmVudi5BTUFaT05fUkVHSU9OIHx8XG4gICAgICBwcm9jZXNzLmVudi5BV1NfREVGQVVMVF9SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQU1BWk9OX0RFRkFVTFRfUkVHSU9OO1xuXG4gICAgd2hpbGUgKCFyZWdpb24gJiYgdG9DaGVjay5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBvcHRzID0gdG9DaGVjay5zaGlmdCgpITtcbiAgICAgIGlmIChhd2FpdCBmcy5wYXRoRXhpc3RzKG9wdHMuZmlsZW5hbWUpKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBuZXcgU2hhcmVkSW5pRmlsZShvcHRzKTtcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IGF3YWl0IGNvbmZpZ0ZpbGUuZ2V0UHJvZmlsZShvcHRzLnByb2ZpbGUpO1xuICAgICAgICByZWdpb24gPSBzZWN0aW9uPy5yZWdpb247XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZWdpb24gJiYgKG9wdGlvbnMuZWMyaW5zdGFuY2UgPz8gYXdhaXQgaXNFYzJJbnN0YW5jZSgpKSkge1xuICAgICAgZGVidWcoJ0xvb2tpbmcgdXAgQVdTIHJlZ2lvbiBpbiB0aGUgRUMyIEluc3RhbmNlIE1ldGFkYXRhIFNlcnZpY2UgKElNRFMpLicpO1xuICAgICAgY29uc3QgaW1kc09wdGlvbnMgPSB7XG4gICAgICAgIGh0dHBPcHRpb25zOiB7IHRpbWVvdXQ6IDEwMDAsIGNvbm5lY3RUaW1lb3V0OiAxMDAwIH0sIG1heFJldHJpZXM6IDIsXG4gICAgICB9O1xuICAgICAgY29uc3QgbWV0YWRhdGFTZXJ2aWNlID0gbmV3IEFXUy5NZXRhZGF0YVNlcnZpY2UoaW1kc09wdGlvbnMpO1xuXG4gICAgICBsZXQgdG9rZW47XG4gICAgICB0cnkge1xuICAgICAgICB0b2tlbiA9IGF3YWl0IGdldEltZHNWMlRva2VuKG1ldGFkYXRhU2VydmljZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnKGBObyBJTURTdjIgdG9rZW46ICR7ZX1gKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVnaW9uID0gYXdhaXQgZ2V0UmVnaW9uRnJvbUltZHMobWV0YWRhdGFTZXJ2aWNlLCB0b2tlbik7XG4gICAgICAgIGRlYnVnKGBBV1MgcmVnaW9uIGZyb20gSU1EUzogJHtyZWdpb259YCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlYnVnKGBVbmFibGUgdG8gcmV0cmlldmUgQVdTIHJlZ2lvbiBmcm9tIElNRFM6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJlZ2lvbikge1xuICAgICAgY29uc3QgdXNlZFByb2ZpbGUgPSAhcHJvZmlsZSA/ICcnIDogYCAocHJvZmlsZTogXCIke3Byb2ZpbGV9XCIpYDtcbiAgICAgIHJlZ2lvbiA9ICd1cy1lYXN0LTEnOyAvLyBUaGlzIGlzIHdoYXQgdGhlIEFXUyBDTEkgZG9lc1xuICAgICAgZGVidWcoYFVuYWJsZSB0byBkZXRlcm1pbmUgQVdTIHJlZ2lvbiBmcm9tIGVudmlyb25tZW50IG9yIEFXUyBjb25maWd1cmF0aW9uJHt1c2VkUHJvZmlsZX0sIGRlZmF1bHRpbmcgdG8gJyR7cmVnaW9ufSdgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVnaW9uO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgaXQgbG9va3MgbGlrZSB3ZSdsbCBoYXZlIEVDUyBjcmVkZW50aWFscyBhdmFpbGFibGVcbiAqL1xuZnVuY3Rpb24gaGFzRWNzQ3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XG4gIHJldHVybiAoQVdTLkVDU0NyZWRlbnRpYWxzLnByb3RvdHlwZSBhcyBhbnkpLmlzQ29uZmlndXJlZEZvckVjc0NyZWRlbnRpYWxzKCk7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgaXQgbG9va3MgbGlrZSB3ZSdsbCBoYXZlIFdlYklkZW50aXR5Q3JlZGVudGlhbHMgKHRoYXQncyB3aGF0IEVLUyB1c2VzKSBhdmFpbGFibGVcbiAqIE5vIGNoZWNrIGxpa2UgaGFzRWNzQ3JlZGVudGlhbHMgYXZhaWxhYmxlLCBzbyBoYXZlIHRvIGltcGxlbWVudCBvdXIgb3duLlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1zZGstanMvYmxvYi8zY2NmZDk0ZGEwNzIzNGFlODcwMzdmNTVjMTM4MzkyZjM4YjY4ODFkL2xpYi9jcmVkZW50aWFscy90b2tlbl9maWxlX3dlYl9pZGVudGl0eV9jcmVkZW50aWFscy5qcyNMNTlcbiAqL1xuZnVuY3Rpb24gaGFzV2ViSWRlbnRpdHlDcmVkZW50aWFscygpOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4ocHJvY2Vzcy5lbnYuQVdTX1JPTEVfQVJOICYmIHByb2Nlc3MuZW52LkFXU19XRUJfSURFTlRJVFlfVE9LRU5fRklMRSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgd2UncmUgb24gYW4gRUMyIGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGlzRWMySW5zdGFuY2UoKSB7XG4gIGlmIChpc0VjMkluc3RhbmNlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgIGRlYnVnKFwiRGV0ZXJtaW5pbmcgaWYgd2UncmUgb24gYW4gRUMyIGluc3RhbmNlLlwiKTtcbiAgICBsZXQgaW5zdGFuY2UgPSBmYWxzZTtcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvV2luZG93c0d1aWRlL2lkZW50aWZ5X2VjMl9pbnN0YW5jZXMuaHRtbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdXRpbC5wcm9taXNpZnkoY2hpbGRfcHJvY2Vzcy5leGVjKSgnd21pYyBwYXRoIHdpbjMyX2NvbXB1dGVyc3lzdGVtcHJvZHVjdCBnZXQgdXVpZCcsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgICAgIC8vIG91dHB1dCBsb29rcyBsaWtlXG4gICAgICAgIC8vICBVVUlEXG4gICAgICAgIC8vICBFQzJBRTE0NS1EMURDLTEzQjItOTRFRC0wMTIzNEFCQ0RFRlxuICAgICAgICBjb25zdCBsaW5lcyA9IHJlc3VsdC5zdGRvdXQudG9TdHJpbmcoKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGluc3RhbmNlID0gbGluZXMuc29tZSh4ID0+IG1hdGNoZXNSZWdleCgvXmVjMi9pLCB4KSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIE1vZGVybiBtYWNoaW5lcyBtYXkgbm90IGhhdmUgd21pYy5leGUgaW5zdGFsbGVkLiBObyByZWFzb24gdG8gZmFpbCwganVzdCBhc3N1bWUgaXQncyBub3QgYW4gRUMyIGluc3RhbmNlLlxuICAgICAgICBkZWJ1ZyhgQ2hlY2tpbmcgdXNpbmcgV01JQyBmYWlsZWQsIGFzc3VtaW5nIE5PVCBhbiBFQzIgaW5zdGFuY2U6ICR7ZS5tZXNzYWdlfSAocGFzcyAtLWVjMmNyZWRzIHRvIGZvcmNlKWApO1xuICAgICAgICBpbnN0YW5jZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvaWRlbnRpZnlfZWMyX2luc3RhbmNlcy5odG1sXG4gICAgICBjb25zdCBmaWxlczogQXJyYXk8W3N0cmluZywgUmVnRXhwXT4gPSBbXG4gICAgICAgIC8vIFRoaXMgcmVjb2duaXplcyB0aGUgWGVuIGh5cGVydmlzb3IgYmFzZWQgaW5zdGFuY2VzIChwcmUtNXRoIGdlbilcbiAgICAgICAgWycvc3lzL2h5cGVydmlzb3IvdXVpZCcsIC9eZWMyL2ldLFxuXG4gICAgICAgIC8vIFRoaXMgcmVjb2duaXplcyB0aGUgbmV3IEh5cGVydmlzb3IgKDV0aC1nZW4gaW5zdGFuY2VzIGFuZCBoaWdoZXIpXG4gICAgICAgIC8vIENhbid0IHVzZSB0aGUgYWR2ZXJ0aXNlZCBmaWxlICcvc3lzL2RldmljZXMvdmlydHVhbC9kbWkvaWQvcHJvZHVjdF91dWlkJyBiZWNhdXNlIGl0IHJlcXVpcmVzIHJvb3QgdG8gcmVhZC5cbiAgICAgICAgLy8gSW5zdGVhZCwgc3lzX3ZlbmRvciBjb250YWlucyBzb21ldGhpbmcgbGlrZSAnQW1hem9uIEVDMicuXG4gICAgICAgIFsnL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3N5c192ZW5kb3InLCAvZWMyL2ldLFxuICAgICAgXTtcbiAgICAgIGZvciAoY29uc3QgW2ZpbGUsIHJlXSBvZiBmaWxlcykge1xuICAgICAgICBpZiAobWF0Y2hlc1JlZ2V4KHJlLCByZWFkSWZQb3NzaWJsZShmaWxlKSkpIHtcbiAgICAgICAgICBpbnN0YW5jZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZGVidWcoaW5zdGFuY2UgPyAnTG9va3MgbGlrZSBhbiBFQzIgaW5zdGFuY2UuJyA6ICdEb2VzIG5vdCBsb29rIGxpa2UgYW4gRUMyIGluc3RhbmNlLicpO1xuICAgIGlzRWMySW5zdGFuY2VDYWNoZSA9IGluc3RhbmNlO1xuICB9XG4gIHJldHVybiBpc0VjMkluc3RhbmNlQ2FjaGU7XG59XG5cblxubGV0IGlzRWMySW5zdGFuY2VDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBBdHRlbXB0cyB0byBnZXQgYSBJbnN0YW5jZSBNZXRhZGF0YSBTZXJ2aWNlIFYyIHRva2VuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldEltZHNWMlRva2VuKG1ldGFkYXRhU2VydmljZTogQVdTLk1ldGFkYXRhU2VydmljZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGRlYnVnKCdBdHRlbXB0aW5nIHRvIHJldHJpZXZlIGFuIElNRFN2MiB0b2tlbi4nKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBtZXRhZGF0YVNlcnZpY2UucmVxdWVzdChcbiAgICAgICcvbGF0ZXN0L2FwaS90b2tlbicsXG4gICAgICB7XG4gICAgICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgICAgIGhlYWRlcnM6IHsgJ3gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbi10dGwtc2Vjb25kcyc6ICc2MCcgfSxcbiAgICAgIH0sXG4gICAgICAoZXJyOiBBV1MuQVdTRXJyb3IsIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0b2tlbikge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0lNRFMgZGlkIG5vdCByZXR1cm4gYSB0b2tlbi4nKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZSh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBnZXQgdGhlIHJlZ2lvbiBmcm9tIHRoZSBJbnN0YW5jZSBNZXRhZGF0YSBTZXJ2aWNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFJlZ2lvbkZyb21JbWRzKG1ldGFkYXRhU2VydmljZTogQVdTLk1ldGFkYXRhU2VydmljZSwgdG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGRlYnVnKCdSZXRyaWV2aW5nIHRoZSBBV1MgcmVnaW9uIGZyb20gdGhlIElNRFMuJyk7XG4gIGxldCBvcHRpb25zOiB7IG1ldGhvZD86IHN0cmluZyB8IHVuZGVmaW5lZDsgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nOyB9IHwgdW5kZWZpbmVkOyB9ID0ge307XG4gIGlmICh0b2tlbikge1xuICAgIG9wdGlvbnMgPSB7IGhlYWRlcnM6IHsgJ3gtYXdzLWVjMi1tZXRhZGF0YS10b2tlbic6IHRva2VuIH0gfTtcbiAgfVxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG1ldGFkYXRhU2VydmljZS5yZXF1ZXN0KFxuICAgICAgJy9sYXRlc3QvZHluYW1pYy9pbnN0YW5jZS1pZGVudGl0eS9kb2N1bWVudCcsXG4gICAgICBvcHRpb25zLFxuICAgICAgKGVycjogQVdTLkFXU0Vycm9yLCBpbnN0YW5jZUlkZW50aXR5RG9jdW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWluc3RhbmNlSWRlbnRpdHlEb2N1bWVudCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0lNRFMgZGlkIG5vdCByZXR1cm4gYW4gSW5zdGFuY2UgSWRlbnRpdHkgRG9jdW1lbnQuJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UoaW5zdGFuY2VJZGVudGl0eURvY3VtZW50KS5yZWdpb24pO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaG9tZURpcigpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52LkhPTUUgfHwgcHJvY2Vzcy5lbnYuVVNFUlBST0ZJTEVcbiAgICB8fCAocHJvY2Vzcy5lbnYuSE9NRVBBVEggPyAoKHByb2Nlc3MuZW52LkhPTUVEUklWRSB8fCAnQzovJykgKyBwcm9jZXNzLmVudi5IT01FUEFUSCkgOiBudWxsKSB8fCBvcy5ob21lZGlyKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWRlbnRpYWxzRmlsZU5hbWUoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgfHwgcGF0aC5qb2luKGhvbWVEaXIoKSwgJy5hd3MnLCAnY3JlZGVudGlhbHMnKTtcbn1cblxuZnVuY3Rpb24gY29uZmlnRmlsZU5hbWUoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5BV1NfQ09ORklHX0ZJTEUgfHwgcGF0aC5qb2luKGhvbWVEaXIoKSwgJy5hd3MnLCAnY29uZmlnJyk7XG59XG5cbi8qKlxuICogRm9yY2UgdGhlIEpTIFNESyB0byBob25vciB0aGUgfi8uYXdzL2NvbmZpZyBmaWxlIChhbmQgdmFyaW91cyBzZXR0aW5ncyB0aGVyZWluKVxuICpcbiAqIEZvciBleGFtcGxlLCB0aGVyZSBpcyBqdXN0ICpOTyogd2F5IHRvIGRvIEFzc3VtZVJvbGUgY3JlZGVudGlhbHMgYXMgbG9uZyBhcyBBV1NfU0RLX0xPQURfQ09ORklHIGlzIG5vdCBzZXQsXG4gKiBvciByZWFkIGNyZWRlbnRpYWxzIGZyb20gdGhhdCBmaWxlLlxuICpcbiAqIFRoZSBTREsgY3Jhc2hlcyBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGJ1dCB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgc28gY29uZGl0aW9uYWxseSBzZXQgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvcmNlU2RrVG9SZWFkQ29uZmlnSWZQcmVzZW50KCkge1xuICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhjb25maWdGaWxlTmFtZSgpKSkge1xuICAgIHByb2Nlc3MuZW52LkFXU19TREtfTE9BRF9DT05GSUcgPSAnMSc7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hlc1JlZ2V4KHJlOiBSZWdFeHAsIHM6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gcyAhPT0gdW5kZWZpbmVkICYmIHJlLmV4ZWMocykgIT09IG51bGw7XG59XG5cbi8qKlxuICogUmVhZCBhIGZpbGUgaWYgaXQgZXhpc3RzLCBvciByZXR1cm4gdW5kZWZpbmVkXG4gKlxuICogTm90IGFzeW5jIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiB0aGUgY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gcmVhZElmUG9zc2libGUoZmlsZW5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgaWYgKCFmcy5wYXRoRXhpc3RzU3luYyhmaWxlbmFtZSkpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBkZWJ1ZyhlKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlZGVudGlhbENoYWluT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVjMmluc3RhbmNlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgY29udGFpbmVyQ3JlZHM/OiBib29sZWFuO1xuICByZWFkb25seSBodHRwT3B0aW9ucz86IEFXUy5IVFRQT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWdpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcbiAgcmVhZG9ubHkgZWMyaW5zdGFuY2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEFzayB1c2VyIGZvciBNRkEgdG9rZW4gZm9yIGdpdmVuIHNlcmlhbFxuICpcbiAqIFJlc3VsdCBpcyBzZW5kIHRvIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBTREsgdG8gYXV0aG9yaXplIHRoZSByZXF1ZXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHRva2VuQ29kZUZuKHNlcmlhbEFybjogc3RyaW5nLCBjYjogKGVycj86IEVycm9yLCB0b2tlbj86IHN0cmluZykgPT4gdm9pZCk6IFByb21pc2U8dm9pZD4ge1xuICBkZWJ1ZygnUmVxdWlyZSBNRkEgdG9rZW4gZm9yIHNlcmlhbCBBUk4nLCBzZXJpYWxBcm4pO1xuICB0cnkge1xuICAgIGNvbnN0IHRva2VuOiBzdHJpbmcgPSBhd2FpdCBwcm9tcHRseS5wcm9tcHQoYE1GQSB0b2tlbiBmb3IgJHtzZXJpYWxBcm59OiBgLCB7XG4gICAgICB0cmltOiB0cnVlLFxuICAgICAgZGVmYXVsdDogJycsXG4gICAgfSk7XG4gICAgZGVidWcoJ1N1Y2Nlc3NmdWxseSBnb3QgTUZBIHRva2VuIGZyb20gdXNlcicpO1xuICAgIGNiKHVuZGVmaW5lZCwgdG9rZW4pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBkZWJ1ZygnRmFpbGVkIHRvIGdldCBNRkEgdG9rZW4nLCBlcnIpO1xuICAgIGNiKGVycik7XG4gIH1cbn1cblxuIl19
|
|
317
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2xpLWNvbXBhdGlibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhd3NjbGktY29tcGF0aWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBK0M7QUFDL0MseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3Qiw2QkFBNkI7QUFDN0IsK0JBQStCO0FBQy9CLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFDckMsaUNBQStCO0FBQy9CLHVEQUFvRTtBQUNwRSxpREFBK0M7QUFFL0M7Ozs7Ozs7R0FPRztBQUNILE1BQWEsZ0JBQWdCO0lBQzNCOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUFrQyxFQUFFO1FBQ3RFLDBFQUEwRTtRQUMxRSx3QkFBd0I7UUFDeEIsTUFBTSw2QkFBNkIsRUFBRSxDQUFDO1FBRXRDLCtFQUErRTtRQUMvRSw2RUFBNkU7UUFDN0Usa0ZBQWtGO1FBQ2xGLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixPQUFPLElBQUksR0FBRyxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3JGO1FBRUQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsSUFBSSxTQUFTLENBQUM7UUFFaEcsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUM7WUFDM0MsR0FBRyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQzlDLEdBQUcsMEJBQTBCLENBQUMsZUFBZSxDQUFDO1NBQy9DLENBQUM7UUFFRixJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksaUJBQWlCLEVBQUUsRUFBRTtZQUNqRCxPQUFPLENBQUMsSUFB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QUFDLEVBQUU7UUFDVixZQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDVCxPQUFPLFNBQVMsQ0FBQztLQUNsQjtBQUNILENBQUM7QUFjRDs7OztHQUlHO0FBQ0gsS0FBSyxVQUFVLFdBQVcsQ0FBQyxTQUFpQixFQUFFLEVBQXlDO0lBQ3JGLFlBQUssQ0FBQyxrQ0FBa0MsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRCxJQUFJO1FBQ0YsTUFBTSxLQUFLLEdBQVcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixTQUFTLElBQUksRUFBRTtZQUMxRSxJQUFJLEVBQUUsSUFBSTtZQUNWLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsWUFBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDOUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUN0QjtJQUFDLE9BQU8sR0FBRyxFQUFFO1FBQ1osWUFBSyxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNUO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoaWxkX3Byb2Nlc3MgZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCAqIGFzIHByb21wdGx5IGZyb20gJ3Byb21wdGx5JztcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSAnLi9fZW52JztcbmltcG9ydCB7IFBhdGNoZWRTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMgfSBmcm9tICcuL2F3cy1zZGstaW5pZmlsZSc7XG5pbXBvcnQgeyBTaGFyZWRJbmlGaWxlIH0gZnJvbSAnLi9zZGtfaW5pX2ZpbGUnO1xuXG4vKipcbiAqIEJlaGF2aW9ycyB0byBtYXRjaCBBV1MgQ0xJXG4gKlxuICogU2VlIHRoZXNlIGxpbmtzOlxuICpcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3RvcGljL2NvbmZpZy12YXJzLmh0bWxcbiAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jbGkvbGF0ZXN0L3VzZXJndWlkZS9jbGktY29uZmlndXJlLWVudnZhcnMuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgQXdzQ2xpQ29tcGF0aWJsZSB7XG4gIC8qKlxuICAgKiBCdWlsZCBhbiBBV1MgQ0xJLWNvbXBhdGlibGUgY3JlZGVudGlhbCBjaGFpbiBwcm92aWRlclxuICAgKlxuICAgKiBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGRlZmF1bHQgY3JlZGVudGlhbCBwcm92aWRlciBjaGFpbiBjcmVhdGVkIGJ5IHRoZSBTREtcbiAgICogZXhjZXB0OlxuICAgKlxuICAgKiAxLiBBY2NlcHRzIHByb2ZpbGUgYXJndW1lbnQgaW4gdGhlIGNvbnN0cnVjdG9yICh0aGUgU0RLIG11c3QgaGF2ZSBpdCBwcmVwb3B1bGF0ZWRcbiAgICogICAgaW4gdGhlIGVudmlyb25tZW50KS5cbiAgICogMi4gQ29uZGl0aW9uYWxseSBjaGVja3MgRUMyIGNyZWRlbnRpYWxzLCBiZWNhdXNlIGNoZWNraW5nIGZvciBFQzJcbiAgICogICAgY3JlZGVudGlhbHMgb24gYSBub24tRUMyIG1hY2hpbmUgbWF5IGxlYWQgdG8gbG9uZyBkZWxheXMgKGluIHRoZSBiZXN0IGNhc2UpXG4gICAqICAgIG9yIGFuIGV4Y2VwdGlvbiAoaW4gdGhlIHdvcnN0IGNhc2UpLlxuICAgKiAzLiBSZXNwZWN0cyAkQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFLlxuICAgKiA0LiBSZXNwZWN0cyAkQVdTX0RFRkFVTFRfUFJPRklMRSBpbiBhZGRpdGlvbiB0byAkQVdTX1BST0ZJTEUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGNyZWRlbnRpYWxDaGFpbihvcHRpb25zOiBDcmVkZW50aWFsQ2hhaW5PcHRpb25zID0ge30pIHtcbiAgICAvLyBGb3JjZSByZWFkaW5nIHRoZSBgY29uZmlnYCBmaWxlIGlmIGl0IGV4aXN0cyBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZVxuICAgIC8vIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgIGF3YWl0IGZvcmNlU2RrVG9SZWFkQ29uZmlnSWZQcmVzZW50KCk7XG5cbiAgICAvLyBUbyBtYXRjaCBBV1MgQ0xJIGJlaGF2aW9yLCBpZiBhIHByb2ZpbGUgaXMgZXhwbGljaXRseSBnaXZlbiB1c2luZyAtLXByb2ZpbGUsXG4gICAgLy8gd2UgdXNlIHRoYXQgdG8gdGhlIGV4Y2x1c2lvbiBvZiBldmVyeXRoaW5nIGVsc2UgKG5vdGU6IHRoaXMgZG9lcyBub3QgYXBwbHlcbiAgICAvLyB0byBBV1NfUFJPRklMRSwgZW52aXJvbm1lbnQgY3JlZGVudGlhbHMgc3RpbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgQVdTX1BST0ZJTEUpXG4gICAgaWYgKG9wdGlvbnMucHJvZmlsZSkge1xuICAgICAgcmV0dXJuIG5ldyBBV1MuQ3JlZGVudGlhbFByb3ZpZGVyQ2hhaW4oaW5pRmlsZUNyZWRlbnRpYWxGYWN0b3JpZXMob3B0aW9ucy5wcm9maWxlKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1wbGljaXRQcm9maWxlID0gcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUFJPRklMRSB8fCAnZGVmYXVsdCc7XG5cbiAgICBjb25zdCBzb3VyY2VzID0gW1xuICAgICAgKCkgPT4gbmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBV1MnKSxcbiAgICAgICgpID0+IG5ldyBBV1MuRW52aXJvbm1lbnRDcmVkZW50aWFscygnQU1BWk9OJyksXG4gICAgICAuLi5pbmlGaWxlQ3JlZGVudGlhbEZhY3RvcmllcyhpbXBsaWNpdFByb2ZpbGUpLFxuICAgIF07XG5cbiAgICBpZiAob3B0aW9ucy5jb250YWluZXJDcmVkcyA/PyBoYXNFY3NDcmVkZW50aWFscygpKSB7XG4gICAgICBzb3VyY2VzLnB1c2goKCkgPT4gbmV3IEFXUy5FQ1NDcmVkZW50aWFscygpKTtcbiAgICB9IGVsc2UgaWYgKGhhc1dlYklkZW50aXR5Q3JlZGVudGlhbHMoKSkge1xuICAgICAgLy8gZWxzZSBpZjogd2UgaGF2ZSBmb3VuZCBXZWJJZGVudGl0eUNyZWRlbnRpYWxzIGFzIHByb3ZpZGVkIGJ5IEVLUyBTZXJ2aWNlQWNjb3VudHNcbiAgICAgIHNvdXJjZXMucHVzaCgoKSA9PiBuZXcgQVdTLlRva2VuRmlsZVdlYklkZW50aXR5Q3JlZGVudGlhbHMoKSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmVjMmluc3RhbmNlID8/IGF3YWl0IGlzRWMySW5zdGFuY2UoKSkge1xuICAgICAgLy8gZWxzZSBpZjogZG9uJ3QgZ2V0IEVDMiBjcmVkcyBpZiB3ZSBzaG91bGQgaGF2ZSBnb3R0ZW4gRUNTIG9yIEVLUyBjcmVkc1xuICAgICAgLy8gRUNTIGFuZCBFS1MgaW5zdGFuY2VzIGFsc28gcnVuIG9uIEVDMiBib3hlcyBidXQgdGhlIGNyZWRzIHJlcHJlc2VudCBzb21ldGhpbmcgZGlmZmVyZW50LlxuICAgICAgLy8gU2FtZSBiZWhhdmlvciBhcyB1cHN0cmVhbSBjb2RlLlxuICAgICAgc291cmNlcy5wdXNoKCgpID0+IG5ldyBBV1MuRUMyTWV0YWRhdGFDcmVkZW50aWFscygpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFXUy5DcmVkZW50aWFsUHJvdmlkZXJDaGFpbihzb3VyY2VzKTtcblxuICAgIGZ1bmN0aW9uIHByb2ZpbGVDcmVkZW50aWFscyhwcm9maWxlTmFtZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gbmV3IFBhdGNoZWRTaGFyZWRJbmlGaWxlQ3JlZGVudGlhbHMoe1xuICAgICAgICBwcm9maWxlOiBwcm9maWxlTmFtZSxcbiAgICAgICAgZmlsZW5hbWU6IGNyZWRlbnRpYWxzRmlsZU5hbWUoKSxcbiAgICAgICAgaHR0cE9wdGlvbnM6IG9wdGlvbnMuaHR0cE9wdGlvbnMsXG4gICAgICAgIHRva2VuQ29kZUZuLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pRmlsZUNyZWRlbnRpYWxGYWN0b3JpZXModGhlUHJvZmlsZTogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAoKSA9PiBwcm9maWxlQ3JlZGVudGlhbHModGhlUHJvZmlsZSksXG4gICAgICAgICgpID0+IG5ldyBBV1MuU3NvQ3JlZGVudGlhbHMoeyBwcm9maWxlOiB0aGVQcm9maWxlIH0pLFxuICAgICAgICAoKSA9PiBuZXcgQVdTLlByb2Nlc3NDcmVkZW50aWFscyh7IHByb2ZpbGU6IHRoZVByb2ZpbGUgfSksXG4gICAgICBdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRlZmF1bHQgcmVnaW9uIGluIGEgQ0xJLWNvbXBhdGlibGUgd2F5XG4gICAqXG4gICAqIE1vc3RseSBjb3BpZWQgZnJvbSBub2RlX2xvYWRlci5qcywgYnV0IHdpdGggdGhlIGZvbGxvd2luZyBkaWZmZXJlbmNlcyB0byBtYWtlIGl0XG4gICAqIEFXUyBDTEkgY29tcGF0aWJsZTpcbiAgICpcbiAgICogMS4gVGFrZXMgYSBwcm9maWxlIG5hbWUgYXMgYW4gYXJndW1lbnQgKGluc3RlYWQgb2YgZm9yY2luZyBpdCB0byBiZSB0YWtlbiBmcm9tICRBV1NfUFJPRklMRSkuXG4gICAqICAgIFRoaXMgcmVxdWlyZXMgaGF2aW5nIG1hZGUgYSBjb3B5IG9mIHRoZSBTREsncyBgU2hhcmVkSW5pRmlsZWAgKHRoZSBvcmlnaW5hbFxuICAgKiAgICBkb2VzIG5vdCB0YWtlIGFuIGFyZ3VtZW50KS5cbiAgICogMi4gJEFXU19ERUZBVUxUX1BST0ZJTEUgYW5kICRBV1NfREVGQVVMVF9SRUdJT04gYXJlIGFsc28gcmVzcGVjdGVkLlxuICAgKlxuICAgKiBMYW1iZGEgYW5kIENvZGVCdWlsZCBzZXQgdGhlICRBV1NfUkVHSU9OIHZhcmlhYmxlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhc3luYyByZWdpb24ob3B0aW9uczogUmVnaW9uT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwcm9maWxlID0gb3B0aW9ucy5wcm9maWxlIHx8IHByb2Nlc3MuZW52LkFXU19QUk9GSUxFIHx8IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1BST0ZJTEUgfHwgJ2RlZmF1bHQnO1xuXG4gICAgLy8gRGVmYXVsdHMgaW5zaWRlIGNvbnN0cnVjdG9yXG4gICAgY29uc3QgdG9DaGVjayA9IFtcbiAgICAgIHsgZmlsZW5hbWU6IGNyZWRlbnRpYWxzRmlsZU5hbWUoKSwgcHJvZmlsZSB9LFxuICAgICAgeyBpc0NvbmZpZzogdHJ1ZSwgZmlsZW5hbWU6IGNvbmZpZ0ZpbGVOYW1lKCksIHByb2ZpbGUgfSxcbiAgICAgIHsgaXNDb25maWc6IHRydWUsIGZpbGVuYW1lOiBjb25maWdGaWxlTmFtZSgpLCBwcm9maWxlOiAnZGVmYXVsdCcgfSxcbiAgICBdO1xuXG4gICAgbGV0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgcHJvY2Vzcy5lbnYuQU1BWk9OX1JFR0lPTiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OIHx8IHByb2Nlc3MuZW52LkFNQVpPTl9ERUZBVUxUX1JFR0lPTjtcblxuICAgIHdoaWxlICghcmVnaW9uICYmIHRvQ2hlY2subGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgb3B0cyA9IHRvQ2hlY2suc2hpZnQoKSE7XG4gICAgICBpZiAoYXdhaXQgZnMucGF0aEV4aXN0cyhvcHRzLmZpbGVuYW1lKSkge1xuICAgICAgICBjb25zdCBjb25maWdGaWxlID0gbmV3IFNoYXJlZEluaUZpbGUob3B0cyk7XG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBhd2FpdCBjb25maWdGaWxlLmdldFByb2ZpbGUob3B0cy5wcm9maWxlKTtcbiAgICAgICAgcmVnaW9uID0gc2VjdGlvbj8ucmVnaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghcmVnaW9uICYmIChvcHRpb25zLmVjMmluc3RhbmNlID8/IGF3YWl0IGlzRWMySW5zdGFuY2UoKSkpIHtcbiAgICAgIGRlYnVnKCdMb29raW5nIHVwIEFXUyByZWdpb24gaW4gdGhlIEVDMiBJbnN0YW5jZSBNZXRhZGF0YSBTZXJ2aWNlIChJTURTKS4nKTtcbiAgICAgIGNvbnN0IGltZHNPcHRpb25zID0ge1xuICAgICAgICBodHRwT3B0aW9uczogeyB0aW1lb3V0OiAxMDAwLCBjb25uZWN0VGltZW91dDogMTAwMCB9LCBtYXhSZXRyaWVzOiAyLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG1ldGFkYXRhU2VydmljZSA9IG5ldyBBV1MuTWV0YWRhdGFTZXJ2aWNlKGltZHNPcHRpb25zKTtcblxuICAgICAgbGV0IHRva2VuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdG9rZW4gPSBhd2FpdCBnZXRJbWRzVjJUb2tlbihtZXRhZGF0YVNlcnZpY2UpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZyhgTm8gSU1EU3YyIHRva2VuOiAke2V9YCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlZ2lvbiA9IGF3YWl0IGdldFJlZ2lvbkZyb21JbWRzKG1ldGFkYXRhU2VydmljZSwgdG9rZW4pO1xuICAgICAgICBkZWJ1ZyhgQVdTIHJlZ2lvbiBmcm9tIElNRFM6ICR7cmVnaW9ufWApO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBkZWJ1ZyhgVW5hYmxlIHRvIHJldHJpZXZlIEFXUyByZWdpb24gZnJvbSBJTURTOiAke2V9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFyZWdpb24pIHtcbiAgICAgIGNvbnN0IHVzZWRQcm9maWxlID0gIXByb2ZpbGUgPyAnJyA6IGAgKHByb2ZpbGU6IFwiJHtwcm9maWxlfVwiKWA7XG4gICAgICByZWdpb24gPSAndXMtZWFzdC0xJzsgLy8gVGhpcyBpcyB3aGF0IHRoZSBBV1MgQ0xJIGRvZXNcbiAgICAgIGRlYnVnKGBVbmFibGUgdG8gZGV0ZXJtaW5lIEFXUyByZWdpb24gZnJvbSBlbnZpcm9ubWVudCBvciBBV1MgY29uZmlndXJhdGlvbiR7dXNlZFByb2ZpbGV9LCBkZWZhdWx0aW5nIHRvICcke3JlZ2lvbn0nYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2lvbjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGl0IGxvb2tzIGxpa2Ugd2UnbGwgaGF2ZSBFQ1MgY3JlZGVudGlhbHMgYXZhaWxhYmxlXG4gKi9cbmZ1bmN0aW9uIGhhc0Vjc0NyZWRlbnRpYWxzKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKEFXUy5FQ1NDcmVkZW50aWFscy5wcm90b3R5cGUgYXMgYW55KS5pc0NvbmZpZ3VyZWRGb3JFY3NDcmVkZW50aWFscygpO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIGl0IGxvb2tzIGxpa2Ugd2UnbGwgaGF2ZSBXZWJJZGVudGl0eUNyZWRlbnRpYWxzICh0aGF0J3Mgd2hhdCBFS1MgdXNlcykgYXZhaWxhYmxlXG4gKiBObyBjaGVjayBsaWtlIGhhc0Vjc0NyZWRlbnRpYWxzIGF2YWlsYWJsZSwgc28gaGF2ZSB0byBpbXBsZW1lbnQgb3VyIG93bi5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLWpzL2Jsb2IvM2NjZmQ5NGRhMDcyMzRhZTg3MDM3ZjU1YzEzODM5MmYzOGI2ODgxZC9saWIvY3JlZGVudGlhbHMvdG9rZW5fZmlsZV93ZWJfaWRlbnRpdHlfY3JlZGVudGlhbHMuanMjTDU5XG4gKi9cbmZ1bmN0aW9uIGhhc1dlYklkZW50aXR5Q3JlZGVudGlhbHMoKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKHByb2Nlc3MuZW52LkFXU19ST0xFX0FSTiAmJiBwcm9jZXNzLmVudi5BV1NfV0VCX0lERU5USVRZX1RPS0VOX0ZJTEUpO1xufVxuXG4vKipcbiAqIFJldHVybiB3aGV0aGVyIHdlJ3JlIG9uIGFuIEVDMiBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBpc0VjMkluc3RhbmNlKCkge1xuICBpZiAoaXNFYzJJbnN0YW5jZUNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICBkZWJ1ZyhcIkRldGVybWluaW5nIGlmIHdlJ3JlIG9uIGFuIEVDMiBpbnN0YW5jZS5cIik7XG4gICAgbGV0IGluc3RhbmNlID0gZmFsc2U7XG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1dpbmRvd3NHdWlkZS9pZGVudGlmeV9lYzJfaW5zdGFuY2VzLmh0bWxcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWwucHJvbWlzaWZ5KGNoaWxkX3Byb2Nlc3MuZXhlYykoJ3dtaWMgcGF0aCB3aW4zMl9jb21wdXRlcnN5c3RlbXByb2R1Y3QgZ2V0IHV1aWQnLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgICAgICAvLyBvdXRwdXQgbG9va3MgbGlrZVxuICAgICAgICAvLyAgVVVJRFxuICAgICAgICAvLyAgRUMyQUUxNDUtRDFEQy0xM0IyLTk0RUQtMDEyMzRBQkNERUZcbiAgICAgICAgY29uc3QgbGluZXMgPSByZXN1bHQuc3Rkb3V0LnRvU3RyaW5nKCkuc3BsaXQoJ1xcbicpO1xuICAgICAgICBpbnN0YW5jZSA9IGxpbmVzLnNvbWUoeCA9PiBtYXRjaGVzUmVnZXgoL15lYzIvaSwgeCkpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBNb2Rlcm4gbWFjaGluZXMgbWF5IG5vdCBoYXZlIHdtaWMuZXhlIGluc3RhbGxlZC4gTm8gcmVhc29uIHRvIGZhaWwsIGp1c3QgYXNzdW1lIGl0J3Mgbm90IGFuIEVDMiBpbnN0YW5jZS5cbiAgICAgICAgZGVidWcoYENoZWNraW5nIHVzaW5nIFdNSUMgZmFpbGVkLCBhc3N1bWluZyBOT1QgYW4gRUMyIGluc3RhbmNlOiAke2UubWVzc2FnZX0gKHBhc3MgLS1lYzJjcmVkcyB0byBmb3JjZSlgKTtcbiAgICAgICAgaW5zdGFuY2UgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2lkZW50aWZ5X2VjMl9pbnN0YW5jZXMuaHRtbFxuICAgICAgY29uc3QgZmlsZXM6IEFycmF5PFtzdHJpbmcsIFJlZ0V4cF0+ID0gW1xuICAgICAgICAvLyBUaGlzIHJlY29nbml6ZXMgdGhlIFhlbiBoeXBlcnZpc29yIGJhc2VkIGluc3RhbmNlcyAocHJlLTV0aCBnZW4pXG4gICAgICAgIFsnL3N5cy9oeXBlcnZpc29yL3V1aWQnLCAvXmVjMi9pXSxcblxuICAgICAgICAvLyBUaGlzIHJlY29nbml6ZXMgdGhlIG5ldyBIeXBlcnZpc29yICg1dGgtZ2VuIGluc3RhbmNlcyBhbmQgaGlnaGVyKVxuICAgICAgICAvLyBDYW4ndCB1c2UgdGhlIGFkdmVydGlzZWQgZmlsZSAnL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3Byb2R1Y3RfdXVpZCcgYmVjYXVzZSBpdCByZXF1aXJlcyByb290IHRvIHJlYWQuXG4gICAgICAgIC8vIEluc3RlYWQsIHN5c192ZW5kb3IgY29udGFpbnMgc29tZXRoaW5nIGxpa2UgJ0FtYXpvbiBFQzInLlxuICAgICAgICBbJy9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9zeXNfdmVuZG9yJywgL2VjMi9pXSxcbiAgICAgIF07XG4gICAgICBmb3IgKGNvbnN0IFtmaWxlLCByZV0gb2YgZmlsZXMpIHtcbiAgICAgICAgaWYgKG1hdGNoZXNSZWdleChyZSwgcmVhZElmUG9zc2libGUoZmlsZSkpKSB7XG4gICAgICAgICAgaW5zdGFuY2UgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGRlYnVnKGluc3RhbmNlID8gJ0xvb2tzIGxpa2UgYW4gRUMyIGluc3RhbmNlLicgOiAnRG9lcyBub3QgbG9vayBsaWtlIGFuIEVDMiBpbnN0YW5jZS4nKTtcbiAgICBpc0VjMkluc3RhbmNlQ2FjaGUgPSBpbnN0YW5jZTtcbiAgfVxuICByZXR1cm4gaXNFYzJJbnN0YW5jZUNhY2hlO1xufVxuXG5cbmxldCBpc0VjMkluc3RhbmNlQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZ2V0IGEgSW5zdGFuY2UgTWV0YWRhdGEgU2VydmljZSBWMiB0b2tlblxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRJbWRzVjJUb2tlbihtZXRhZGF0YVNlcnZpY2U6IEFXUy5NZXRhZGF0YVNlcnZpY2UpOiBQcm9taXNlPHN0cmluZz4ge1xuICBkZWJ1ZygnQXR0ZW1wdGluZyB0byByZXRyaWV2ZSBhbiBJTURTdjIgdG9rZW4uJyk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbWV0YWRhdGFTZXJ2aWNlLnJlcXVlc3QoXG4gICAgICAnL2xhdGVzdC9hcGkvdG9rZW4nLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6ICdQVVQnLFxuICAgICAgICBoZWFkZXJzOiB7ICd4LWF3cy1lYzItbWV0YWRhdGEtdG9rZW4tdHRsLXNlY29uZHMnOiAnNjAnIH0sXG4gICAgICB9LFxuICAgICAgKGVycjogQVdTLkFXU0Vycm9yLCB0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfSBlbHNlIGlmICghdG9rZW4pIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdJTURTIGRpZCBub3QgcmV0dXJuIGEgdG9rZW4uJykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUodG9rZW4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gZ2V0IHRoZSByZWdpb24gZnJvbSB0aGUgSW5zdGFuY2UgTWV0YWRhdGEgU2VydmljZVxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRSZWdpb25Gcm9tSW1kcyhtZXRhZGF0YVNlcnZpY2U6IEFXUy5NZXRhZGF0YVNlcnZpY2UsIHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBkZWJ1ZygnUmV0cmlldmluZyB0aGUgQVdTIHJlZ2lvbiBmcm9tIHRoZSBJTURTLicpO1xuICBsZXQgb3B0aW9uczogeyBtZXRob2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7IGhlYWRlcnM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSB8IHVuZGVmaW5lZDsgfSA9IHt9O1xuICBpZiAodG9rZW4pIHtcbiAgICBvcHRpb25zID0geyBoZWFkZXJzOiB7ICd4LWF3cy1lYzItbWV0YWRhdGEtdG9rZW4nOiB0b2tlbiB9IH07XG4gIH1cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBtZXRhZGF0YVNlcnZpY2UucmVxdWVzdChcbiAgICAgICcvbGF0ZXN0L2R5bmFtaWMvaW5zdGFuY2UtaWRlbnRpdHkvZG9jdW1lbnQnLFxuICAgICAgb3B0aW9ucyxcbiAgICAgIChlcnI6IEFXUy5BV1NFcnJvciwgaW5zdGFuY2VJZGVudGl0eURvY3VtZW50OiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpbnN0YW5jZUlkZW50aXR5RG9jdW1lbnQpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdJTURTIGRpZCBub3QgcmV0dXJuIGFuIEluc3RhbmNlIElkZW50aXR5IERvY3VtZW50LicpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKGluc3RhbmNlSWRlbnRpdHlEb2N1bWVudCkucmVnaW9uKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhvbWVEaXIoKSB7XG4gIHJldHVybiBwcm9jZXNzLmVudi5IT01FIHx8IHByb2Nlc3MuZW52LlVTRVJQUk9GSUxFXG4gICAgfHwgKHByb2Nlc3MuZW52LkhPTUVQQVRIID8gKChwcm9jZXNzLmVudi5IT01FRFJJVkUgfHwgJ0M6LycpICsgcHJvY2Vzcy5lbnYuSE9NRVBBVEgpIDogbnVsbCkgfHwgb3MuaG9tZWRpcigpO1xufVxuXG5mdW5jdGlvbiBjcmVkZW50aWFsc0ZpbGVOYW1lKCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFIHx8IHBhdGguam9pbihob21lRGlyKCksICcuYXdzJywgJ2NyZWRlbnRpYWxzJyk7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ0ZpbGVOYW1lKCkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFIHx8IHBhdGguam9pbihob21lRGlyKCksICcuYXdzJywgJ2NvbmZpZycpO1xufVxuXG4vKipcbiAqIEZvcmNlIHRoZSBKUyBTREsgdG8gaG9ub3IgdGhlIH4vLmF3cy9jb25maWcgZmlsZSAoYW5kIHZhcmlvdXMgc2V0dGluZ3MgdGhlcmVpbilcbiAqXG4gKiBGb3IgZXhhbXBsZSwgdGhlcmUgaXMganVzdCAqTk8qIHdheSB0byBkbyBBc3N1bWVSb2xlIGNyZWRlbnRpYWxzIGFzIGxvbmcgYXMgQVdTX1NES19MT0FEX0NPTkZJRyBpcyBub3Qgc2V0LFxuICogb3IgcmVhZCBjcmVkZW50aWFscyBmcm9tIHRoYXQgZmlsZS5cbiAqXG4gKiBUaGUgU0RLIGNyYXNoZXMgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBidXQgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHNvIGNvbmRpdGlvbmFsbHkgc2V0IGl0LlxuICovXG5hc3luYyBmdW5jdGlvbiBmb3JjZVNka1RvUmVhZENvbmZpZ0lmUHJlc2VudCgpIHtcbiAgaWYgKGF3YWl0IGZzLnBhdGhFeGlzdHMoY29uZmlnRmlsZU5hbWUoKSkpIHtcbiAgICBwcm9jZXNzLmVudi5BV1NfU0RLX0xPQURfQ09ORklHID0gJzEnO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXNSZWdleChyZTogUmVnRXhwLCBzOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgcmV0dXJuIHMgIT09IHVuZGVmaW5lZCAmJiByZS5leGVjKHMpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIFJlYWQgYSBmaWxlIGlmIGl0IGV4aXN0cywgb3IgcmV0dXJuIHVuZGVmaW5lZFxuICpcbiAqIE5vdCBhc3luYyBiZWNhdXNlIGl0IGlzIHVzZWQgaW4gdGhlIGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIHJlYWRJZlBvc3NpYmxlKGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGlmICghZnMucGF0aEV4aXN0c1N5bmMoZmlsZW5hbWUpKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgZGVidWcoZSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxDaGFpbk9wdGlvbnMge1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuICByZWFkb25seSBlYzJpbnN0YW5jZT86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGNvbnRhaW5lckNyZWRzPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaHR0cE9wdGlvbnM/OiBBV1MuSFRUUE9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHByb2ZpbGU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVjMmluc3RhbmNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBc2sgdXNlciBmb3IgTUZBIHRva2VuIGZvciBnaXZlbiBzZXJpYWxcbiAqXG4gKiBSZXN1bHQgaXMgc2VuZCB0byBjYWxsYmFjayBmdW5jdGlvbiBmb3IgU0RLIHRvIGF1dGhvcml6ZSB0aGUgcmVxdWVzdFxuICovXG5hc3luYyBmdW5jdGlvbiB0b2tlbkNvZGVGbihzZXJpYWxBcm46IHN0cmluZywgY2I6IChlcnI/OiBFcnJvciwgdG9rZW4/OiBzdHJpbmcpID0+IHZvaWQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZGVidWcoJ1JlcXVpcmUgTUZBIHRva2VuIGZvciBzZXJpYWwgQVJOJywgc2VyaWFsQXJuKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB0b2tlbjogc3RyaW5nID0gYXdhaXQgcHJvbXB0bHkucHJvbXB0KGBNRkEgdG9rZW4gZm9yICR7c2VyaWFsQXJufTogYCwge1xuICAgICAgdHJpbTogdHJ1ZSxcbiAgICAgIGRlZmF1bHQ6ICcnLFxuICAgIH0pO1xuICAgIGRlYnVnKCdTdWNjZXNzZnVsbHkgZ290IE1GQSB0b2tlbiBmcm9tIHVzZXInKTtcbiAgICBjYih1bmRlZmluZWQsIHRva2VuKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZGVidWcoJ0ZhaWxlZCB0byBnZXQgTUZBIHRva2VuJywgZXJyKTtcbiAgICBjYihlcnIpO1xuICB9XG59XG5cbiJdfQ==
|