eoapi-cdk 11.4.0 → 11.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -6216,7 +6216,7 @@
6216
6216
  },
6217
6217
  "locationInModule": {
6218
6218
  "filename": "lib/ingestor-api/index.ts",
6219
- "line": 26
6219
+ "line": 32
6220
6220
  },
6221
6221
  "parameters": [
6222
6222
  {
@@ -6242,17 +6242,32 @@
6242
6242
  "kind": "class",
6243
6243
  "locationInModule": {
6244
6244
  "filename": "lib/ingestor-api/index.ts",
6245
- "line": 22
6245
+ "line": 23
6246
6246
  },
6247
6247
  "name": "StacIngestor",
6248
6248
  "properties": [
6249
+ {
6250
+ "docs": {
6251
+ "stability": "experimental",
6252
+ "summary": "URL of the Ingestor API."
6253
+ },
6254
+ "immutable": true,
6255
+ "locationInModule": {
6256
+ "filename": "lib/ingestor-api/index.ts",
6257
+ "line": 30
6258
+ },
6259
+ "name": "url",
6260
+ "type": {
6261
+ "primitive": "string"
6262
+ }
6263
+ },
6249
6264
  {
6250
6265
  "docs": {
6251
6266
  "stability": "experimental"
6252
6267
  },
6253
6268
  "locationInModule": {
6254
6269
  "filename": "lib/ingestor-api/index.ts",
6255
- "line": 24
6270
+ "line": 25
6256
6271
  },
6257
6272
  "name": "handlerRole",
6258
6273
  "type": {
@@ -6265,7 +6280,7 @@
6265
6280
  },
6266
6281
  "locationInModule": {
6267
6282
  "filename": "lib/ingestor-api/index.ts",
6268
- "line": 23
6283
+ "line": 24
6269
6284
  },
6270
6285
  "name": "table",
6271
6286
  "type": {
@@ -6285,7 +6300,7 @@
6285
6300
  "kind": "interface",
6286
6301
  "locationInModule": {
6287
6302
  "filename": "lib/ingestor-api/index.ts",
6288
- "line": 282
6303
+ "line": 295
6289
6304
  },
6290
6305
  "name": "StacIngestorProps",
6291
6306
  "properties": [
@@ -6298,7 +6313,7 @@
6298
6313
  "immutable": true,
6299
6314
  "locationInModule": {
6300
6315
  "filename": "lib/ingestor-api/index.ts",
6301
- "line": 286
6316
+ "line": 299
6302
6317
  },
6303
6318
  "name": "dataAccessRole",
6304
6319
  "type": {
@@ -6314,7 +6329,7 @@
6314
6329
  "immutable": true,
6315
6330
  "locationInModule": {
6316
6331
  "filename": "lib/ingestor-api/index.ts",
6317
- "line": 301
6332
+ "line": 314
6318
6333
  },
6319
6334
  "name": "stacDbSecret",
6320
6335
  "type": {
@@ -6330,7 +6345,7 @@
6330
6345
  "immutable": true,
6331
6346
  "locationInModule": {
6332
6347
  "filename": "lib/ingestor-api/index.ts",
6333
- "line": 311
6348
+ "line": 324
6334
6349
  },
6335
6350
  "name": "stacDbSecurityGroup",
6336
6351
  "type": {
@@ -6346,7 +6361,7 @@
6346
6361
  "immutable": true,
6347
6362
  "locationInModule": {
6348
6363
  "filename": "lib/ingestor-api/index.ts",
6349
- "line": 291
6364
+ "line": 304
6350
6365
  },
6351
6366
  "name": "stacUrl",
6352
6367
  "type": {
@@ -6362,7 +6377,7 @@
6362
6377
  "immutable": true,
6363
6378
  "locationInModule": {
6364
6379
  "filename": "lib/ingestor-api/index.ts",
6365
- "line": 296
6380
+ "line": 309
6366
6381
  },
6367
6382
  "name": "stage",
6368
6383
  "type": {
@@ -6378,7 +6393,7 @@
6378
6393
  "immutable": true,
6379
6394
  "locationInModule": {
6380
6395
  "filename": "lib/ingestor-api/index.ts",
6381
- "line": 326
6396
+ "line": 339
6382
6397
  },
6383
6398
  "name": "apiEndpointConfiguration",
6384
6399
  "optional": true,
@@ -6395,7 +6410,7 @@
6395
6410
  "immutable": true,
6396
6411
  "locationInModule": {
6397
6412
  "filename": "lib/ingestor-api/index.ts",
6398
- "line": 321
6413
+ "line": 334
6399
6414
  },
6400
6415
  "name": "apiEnv",
6401
6416
  "optional": true,
@@ -6418,7 +6433,7 @@
6418
6433
  "immutable": true,
6419
6434
  "locationInModule": {
6420
6435
  "filename": "lib/ingestor-api/index.ts",
6421
- "line": 343
6436
+ "line": 356
6422
6437
  },
6423
6438
  "name": "apiLambdaFunctionOptions",
6424
6439
  "optional": true,
@@ -6435,7 +6450,7 @@
6435
6450
  "immutable": true,
6436
6451
  "locationInModule": {
6437
6452
  "filename": "lib/ingestor-api/index.ts",
6438
- "line": 331
6453
+ "line": 344
6439
6454
  },
6440
6455
  "name": "apiPolicy",
6441
6456
  "optional": true,
@@ -6452,7 +6467,7 @@
6452
6467
  "immutable": true,
6453
6468
  "locationInModule": {
6454
6469
  "filename": "lib/ingestor-api/index.ts",
6455
- "line": 336
6470
+ "line": 349
6456
6471
  },
6457
6472
  "name": "ingestorDomainNameOptions",
6458
6473
  "optional": true,
@@ -6470,7 +6485,7 @@
6470
6485
  "immutable": true,
6471
6486
  "locationInModule": {
6472
6487
  "filename": "lib/ingestor-api/index.ts",
6473
- "line": 350
6488
+ "line": 363
6474
6489
  },
6475
6490
  "name": "ingestorLambdaFunctionOptions",
6476
6491
  "optional": true,
@@ -6488,7 +6503,7 @@
6488
6503
  "immutable": true,
6489
6504
  "locationInModule": {
6490
6505
  "filename": "lib/ingestor-api/index.ts",
6491
- "line": 357
6506
+ "line": 370
6492
6507
  },
6493
6508
  "name": "pgstacVersion",
6494
6509
  "optional": true,
@@ -6505,7 +6520,7 @@
6505
6520
  "immutable": true,
6506
6521
  "locationInModule": {
6507
6522
  "filename": "lib/ingestor-api/index.ts",
6508
- "line": 316
6523
+ "line": 329
6509
6524
  },
6510
6525
  "name": "subnetSelection",
6511
6526
  "optional": true,
@@ -6522,7 +6537,7 @@
6522
6537
  "immutable": true,
6523
6538
  "locationInModule": {
6524
6539
  "filename": "lib/ingestor-api/index.ts",
6525
- "line": 306
6540
+ "line": 319
6526
6541
  },
6527
6542
  "name": "vpc",
6528
6543
  "optional": true,
@@ -8000,6 +8015,6 @@
8000
8015
  "symbolId": "lib/titiler-pgstac-api/index:TitilerPgstacApiLambdaRuntimeProps"
8001
8016
  }
8002
8017
  },
8003
- "version": "11.4.0",
8004
- "fingerprint": "XAgc9qDybKGNxcDQS+Srt8N+/5AJbD+nSQHWHr6Q12o="
8018
+ "version": "11.5.0",
8019
+ "fingerprint": "XsLmoGgYK/c4rj7NzXYJipHbGokY1h5qTscUkSxDqtA="
8005
8020
  }
@@ -158,5 +158,5 @@ class BastionHost extends constructs_1.Construct {
158
158
  }
159
159
  exports.BastionHost = BastionHost;
160
160
  _a = JSII_RTTI_SYMBOL_1;
161
- BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "11.4.0" };
161
+ BastionHost[_a] = { fqn: "eoapi-cdk.BastionHost", version: "11.5.0" };
162
162
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU1xQjtBQUNyQiwyQ0FBdUM7QUFFdkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpR0c7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQUd4QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUkscUJBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUNyRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUscUJBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ2pELFlBQVksRUFBRSxHQUFHLFNBQVMsZUFBZTtZQUN6QyxZQUFZLEVBQUUscUJBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMvQixxQkFBRyxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsRUFDckMscUJBQUcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN0QjtZQUNELFlBQVksRUFBRSxxQkFBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDL0MsVUFBVSxFQUFFLHFCQUFHLENBQUMscUJBQXFCLENBQUMsY0FBYztnQkFDcEQsT0FBTyxFQUFFLHFCQUFHLENBQUMsa0JBQWtCLENBQUMsTUFBTTthQUN2QyxDQUFDO1lBQ0YsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLHlCQUF5QixFQUFFLElBQUk7U0FDaEMsQ0FBQyxDQUFDO1FBRUgsb0JBQW9CO1FBQ3BCLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNsQyxJQUFJLHFCQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7Z0JBQ3pCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Z0JBQ3BDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7YUFDMUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQy9CLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFDdEMscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUNsQixvQ0FBb0MsQ0FDckMsQ0FBQztRQUVGLGtDQUFrQztRQUNsQyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ2pDLHFCQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDbkIscUJBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQ2pDLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUVELHFCQUFxQjtRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FDM0IsSUFBSSxxQkFBRyxDQUFDLGVBQWUsQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1AsZUFBZTtnQkFDZiwrQkFBK0I7Z0JBQy9CLGVBQWU7YUFDaEI7WUFDRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7WUFDL0IsVUFBVSxFQUFFLEdBQUcsU0FBUyxjQUFjO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDL0MsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCO1lBQ3JDLFVBQVUsRUFBRSxHQUFHLFNBQVMscUJBQXFCO1NBQzlDLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsaUNBQWlDLEVBQUU7WUFDckQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMscUJBQXFCO1lBQzFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsa0JBQWtCO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBekVILGtDQTBFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFN0YWNrLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19yZHMgYXMgcmRzLFxuICBDZm5PdXRwdXQsXG59IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBUaGUgZGF0YWJhc2UgaXMgbG9jYXRlZCBpbiBhbiBpc29sYXRlZCBzdWJuZXQsIG1lYW5pbmcgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZSBmcm9tIHRoZSBwdWJsaWMgaW50ZXJuZXQuIEFzIHN1Y2gsIHRvIGludGVyYWN0IHdpdGggdGhlIGRhdGFiYXNlIGRpcmVjdGx5LCBhIHVzZXIgbXVzdCB0dW5uZWwgdGhyb3VnaCBhIGJhc3Rpb24gaG9zdC5cbiAqXG4gKiAjIyMgQ29uZmlndXJpbmdcbiAqXG4gKiBUaGlzIGNvZGViYXNlIGNvbnRyb2xzIF93aG9fIGlzIGFsbG93ZWQgdG8gY29ubmVjdCB0byB0aGUgYmFzdGlvbiBob3N0LiBUaGlzIHJlcXVpcmVzIHR3byBzdGVwczpcbiAqXG4gKiAxLiBBZGRpbmcgdGhlIElQIGFkZHJlc3MgZnJvbSB3aGljaCB5b3UgYXJlIGNvbm5lY3RpbmcgdG8gdGhlIGBpcHY0QWxsb3dsaXN0YCBhcnJheVxuICogMS4gQ3JlYXRpbmcgYSBiYXN0aW9uIGhvc3Qgc3lzdGVtIHVzZXIgYnkgYWRkaW5nIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBpbmZvcm0gdG8gYHVzZXJkYXRhLnlhbWxgXG4gKlxuICogIyMjIyBBZGRpbmcgYW4gSVAgYWRkcmVzcyB0byB0aGUgYGlwdjRBbGxvd2xpc3RgIGFycmF5XG4gKlxuICogVGhlIGBCYXN0aW9uSG9zdGAgY29uc3RydWN0IHRha2VzIGluIGFuIGBpcHY0QWxsb3dsaXN0YCBhcnJheSBhcyBhbiBhcmd1bWVudC4gRmluZCB5b3VyIElQIGFkZHJlc3MgKGVnIGBjdXJsIGFwaS5pcGlmeS5vcmdgKSBhbmQgYWRkIHRoYXQgdG8gdGhlIGFycmF5IGFsb25nIHdpdGggdGhlIHRyYWlsaW5nIENJRFIgYmxvY2sgKGxpa2VseSBgLzMyYCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBhcmUgYWRkaW5nIGEgc2luZ2xlIElQIGFkZHJlc3MpLlxuICpcbiAqICMjIyMgQ3JlYXRpbmcgYSB1c2VyIHZpYSBgdXNlcmRhdGEueWFtbGBcbiAqXG4gKiBBZGQgYW4gZW50cnkgdG8gdGhlIGB1c2Vyc2AgYXJyYXkgd2l0aCBhIHVzZXJuYW1lIChsaWtlbHkgbWF0Y2hpbmcgeW91ciBsb2NhbCBzeXN0ZW1zIHVzZXJuYW1lLCB3aGljaCB5b3UgY2FuIGdldCBieSBydW5uaW5nIHRoZSBgd2hvYW1pYCBjb21tYW5kIGluIHlvdXIgdGVybWluYWwpIGFuZCBhIHB1YmxpYyBrZXkgKGxpa2VseSB5b3VyIGRlZmF1bHQgcHVibGljIGtleSwgd2hpY2ggeW91IGNhbiBnZXQgYnkgcnVubmluZyBgY2F0IH4vLnNzaC9pZF8qLnB1YmAgaW4geW91ciB0ZXJtaW5hbCkuXG4gKlxuICogIyMjIyBUaXBzICYgVHJpY2tzIHdoZW4gdXNpbmcgdGhlIEJhc3Rpb24gSG9zdFxuICpcbiAqICoqQ29ubmVjdGluZyB0byBSRFMgSW5zdGFuY2UgdmlhIFNTTSoqXG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgXFxcbiAqIC0tZG9jdW1lbnQtbmFtZSBBV1MtU3RhcnRQb3J0Rm9yd2FyZGluZ1Nlc3Npb25Ub1JlbW90ZUhvc3QgXFxcbiAqIC0tcGFyYW1ldGVycyAne1xuICogXCJob3N0XCI6IFtcbiAqIFwiZXhhbXBsZS1kYi5jNWFiY2RlZmdoaWoudXMtd2VzdC0yLnJkcy5hbWF6b25hd3MuY29tXCJcbiAqIF0sXG4gKiBcInBvcnROdW1iZXJcIjogW1xuICogXCI1NDMyXCJcbiAqIF0sXG4gKiBcImxvY2FsUG9ydE51bWJlclwiOiBbXG4gKiBcIjk5OTlcIlxuICogXVxuICogfScgXFxcbiAqIC0tcHJvZmlsZSAkQVdTX1BST0ZJTEVcbiAqIGBgYFxuICpcbiAqIGBgYHNoXG4gKiBwc3FsIC1oIGxvY2FsaG9zdCAtcCA5OTk5ICMgY29udGludWUgYWRkaW5nIHVzZXJuYW1lICgtVSkgYW5kIGRiICgtZCkgaGVyZS4uLlxuICogYGBgXG4gKlxuICogQ29ubmVjdCBkaXJlY3RseSB0byBCYXN0aW9uIEhvc3Q6XG4gKlxuICogYGBgc2hcbiAqIGF3cyBzc20gc3RhcnQtc2Vzc2lvbiAtLXRhcmdldCAkSU5TVEFOQ0VfSUQgLS1wcm9maWxlICRBV1NfUFJPRklMRVxuICogYGBgXG4gKlxuICogKipTZXR0aW5nIHVwIGFuIFNTSCB0dW5uZWwqKlxuICpcbiAqIEluIHlvdXIgYH4vLnNzaC9jb25maWdgIGZpbGUsIGFkZCBhbiBlbnRyeSBsaWtlOlxuICpcbiAqIGBgYFxuICogSG9zdCBkYi10dW5uZWxcbiAqIEhvc3RuYW1lIHt0aGUtYmFzdGlvbi1ob3N0LWFkZHJlc3N9XG4gKiBMb2NhbEZvcndhcmQgOTk5OSB7dGhlLWRiLWhvc3RuYW1lfTo1NDMyXG4gKiBgYGBcbiAqXG4gKiBUaGVuIGEgdHVubmVsIGNhbiBiZSBvcGVuZWQgdmlhOlxuICpcbiAqIGBgYFxuICogc3NoIC1OIGRiLXR1bm5lbFxuICogYGBgXG4gKlxuICogQW5kIGEgY29ubmVjdGlvbiB0byB0aGUgREIgY2FuIGJlIG1hZGUgdmlhOlxuICpcbiAqIGBgYFxuICogcHNxbCAtaCAxMjcuMC4wLjEgLXAgOTk5OSAtVSB7dXNlcm5hbWV9IC1kIHtkYXRhYmFzZX1cbiAqIGBgYFxuICpcbiAqICoqSGFuZGxpbmcgYFJFTU9URSBIT1NUIElERU5USUZJQ0FUSU9OIEhBUyBDSEFOR0VEIWAgZXJyb3IqKlxuICpcbiAqIElmIHlvdSd2ZSByZWRlcGxveWVkIGEgYmFzdGlvbiBob3N0IHRoYXQgeW91J3ZlIHByZXZpb3VzbHkgY29ubmVjdGVkIHRvLCB5b3UgbWF5IHNlZSBhbiBlcnJvciBsaWtlOlxuICpcbiAqIGBgYFxuICogQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBcbiAqIEAgICAgV0FSTklORzogUkVNT1RFIEhPU1QgSURFTlRJRklDQVRJT04gSEFTIENIQU5HRUQhICAgICBAXG4gKiBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFxuICogSVQgSVMgUE9TU0lCTEUgVEhBVCBTT01FT05FIElTIERPSU5HIFNPTUVUSElORyBOQVNUWSFcbiAqIFNvbWVvbmUgY291bGQgYmUgZWF2ZXNkcm9wcGluZyBvbiB5b3UgcmlnaHQgbm93IChtYW4taW4tdGhlLW1pZGRsZSBhdHRhY2spIVxuICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0aGF0IGEgaG9zdCBrZXkgaGFzIGp1c3QgYmVlbiBjaGFuZ2VkLlxuICogVGhlIGZpbmdlcnByaW50IGZvciB0aGUgRUNEU0Ega2V5IHNlbnQgYnkgdGhlIHJlbW90ZSBob3N0IGlzXG4gKiBTSEEyNTY6bVBueEFPWFRwYjA2UEZnSTFRYzhUTVEyZTliN2dvVTh5Mk5kUzVoeklyOC5cbiAqIFBsZWFzZSBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuXG4gKiBBZGQgY29ycmVjdCBob3N0IGtleSBpbiAvVXNlcnMvdXNlcm5hbWUvLnNzaC9rbm93bl9ob3N0cyB0byBnZXQgcmlkIG9mIHRoaXMgbWVzc2FnZS5cbiAqIE9mZmVuZGluZyBFQ0RTQSBrZXkgaW4gL1VzZXJzL3VzZXJuYW1lLy5zc2gva25vd25faG9zdHM6MjhcbiAqIEVDRFNBIGhvc3Qga2V5IGZvciBlYzItMTItMzQtNTYtNzg5LnVzLXdlc3QtMi5jb21wdXRlLmFtYXpvbmF3cy5jb20gaGFzIGNoYW5nZWQgYW5kIHlvdSBoYXZlIHJlcXVlc3RlZCBzdHJpY3QgY2hlY2tpbmcuXG4gKiBIb3N0IGtleSB2ZXJpZmljYXRpb24gZmFpbGVkLlxuICogYGBgXG4gKlxuICogVGhpcyBpcyBkdWUgdG8gdGhlIHNlcnZlcidzIGZpbmdlcnByaW50IGNoYW5naW5nLiBXZSBjYW4gc2NydWIgdGhlIGZpbmdlcnByaW50IGZyb20gb3VyIHN5c3RlbSB3aXRoIGEgY29tbWFuZCBsaWtlOlxuICpcbiAqIGBgYFxuICogc3NoLWtleWdlbiAtUiAxMi4zNC41Ni43ODlcbiAqIGBgYFxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEJhc3Rpb25Ib3N0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzdGlvbkhvc3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IHN0YWNrTmFtZSB9ID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICAvLyBCdWlsZCBlYzIgaW5zdGFuY2VcbiAgICB0aGlzLmluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcImJhc3Rpb24taG9zdFwiLCB7XG4gICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFVCTElDIH0sXG4gICAgICBpbnN0YW5jZU5hbWU6IGAke3N0YWNrTmFtZX0gYmFzdGlvbiBob3N0YCxcbiAgICAgIGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZS5vZihcbiAgICAgICAgZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFNF9HUkFWSVRPTixcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5OQU5PXG4gICAgICApLFxuICAgICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4KHtcbiAgICAgICAgZ2VuZXJhdGlvbjogZWMyLkFtYXpvbkxpbnV4R2VuZXJhdGlvbi5BTUFaT05fTElOVVhfMixcbiAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBwcm9wcy51c2VyRGF0YSxcbiAgICAgIHVzZXJEYXRhQ2F1c2VzUmVwbGFjZW1lbnQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICAvLyBBc3NpZ24gZWxhc3RpYyBJUFxuICAgIGlmIChwcm9wcy5jcmVhdGVFbGFzdGljSXAgPz8gdHJ1ZSkge1xuICAgICAgbmV3IGVjMi5DZm5FSVAodGhpcywgXCJJUFwiLCB7XG4gICAgICAgIGluc3RhbmNlSWQ6IHRoaXMuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgdGFnczogW3sga2V5OiBcIk5hbWVcIiwgdmFsdWU6IHN0YWNrTmFtZSB9XSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFsbG93IGJhc3Rpb24gaG9zdCB0byBjb25uZWN0IHRvIGRiXG4gICAgdGhpcy5pbnN0YW5jZS5jb25uZWN0aW9ucy5hbGxvd1RvKFxuICAgICAgcHJvcHMuZGIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICBlYzIuUG9ydC50Y3AoNTQzMiksXG4gICAgICBcIkFsbG93IGNvbm5lY3Rpb24gZnJvbSBiYXN0aW9uIGhvc3RcIlxuICAgICk7XG5cbiAgICAvLyBBbGxvdyBJUCBhY2Nlc3MgdG8gYmFzdGlvbiBob3N0XG4gICAgZm9yIChjb25zdCBpcHY0IG9mIHByb3BzLmlwdjRBbGxvd2xpc3QpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2UuY29ubmVjdGlvbnMuYWxsb3dGcm9tKFxuICAgICAgICBlYzIuUGVlci5pcHY0KGlwdjQpLFxuICAgICAgICBlYzIuUG9ydC50Y3AocHJvcHMuc3NoUG9ydCB8fCAyMiksXG4gICAgICAgIFwiU1NIIEFjY2Vzc1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEludGVncmF0ZSB3aXRoIFNTTVxuICAgIHRoaXMuaW5zdGFuY2UuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJzc21tZXNzYWdlczoqXCIsXG4gICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgIFwiZWMybWVzc2FnZXM6KlwiLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtaWQtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlSWQsXG4gICAgICBleHBvcnROYW1lOiBgJHtzdGFja05hbWV9LWluc3RhbmNlLWlkYCxcbiAgICB9KTtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIFwiaW5zdGFuY2UtcHVibGljLWlwLW91dHB1dFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0lwLFxuICAgICAgZXhwb3J0TmFtZTogYCR7c3RhY2tOYW1lfS1pbnN0YW5jZS1wdWJsaWMtaXBgLFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgXCJpbnN0YW5jZS1wdWJsaWMtZG5zLW5hbWUtb3V0cHV0XCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZSxcbiAgICAgIGV4cG9ydE5hbWU6IGAke3N0YWNrTmFtZX0tcHVibGljLWRucy1uYW1lYCxcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc3Rpb25Ib3N0UHJvcHMge1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBkYjogcmRzLklEYXRhYmFzZUluc3RhbmNlO1xuICByZWFkb25seSB1c2VyRGF0YTogZWMyLlVzZXJEYXRhO1xuICByZWFkb25seSBpcHY0QWxsb3dsaXN0OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgc3NoUG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgYW4gZWxhc3RpYyBJUCBzaG91bGQgYmUgY3JlYXRlZCBmb3IgdGhlIGJhc3Rpb24gaG9zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUVsYXN0aWNJcD86IGJvb2xlYW47XG59XG4iXX0=
@@ -130,7 +130,6 @@ def update_user_permissions(cursor, db_name: str, username: str) -> None:
130
130
  "GRANT pgstac_read TO {username};"
131
131
  "GRANT pgstac_ingest TO {username};"
132
132
  "GRANT pgstac_admin TO {username};"
133
- "ALTER USER {username} SET search_path TO pgstac, public;" # add pgstac to search_path by default
134
133
  ).format(
135
134
  db_name=sql.Identifier(db_name),
136
135
  username=sql.Identifier(username),
@@ -252,6 +251,27 @@ def unregister_pg_cron(cursor) -> None:
252
251
  )
253
252
 
254
253
 
254
+ def set_database_search_path(cursor, db_name: str) -> None:
255
+ """Set the default search_path for all connections to the pgSTAC database.
256
+
257
+ Uses ``ALTER DATABASE`` so the setting applies to every session (including
258
+ pg_cron background workers, which start with no ``search_path``). This is
259
+ preferred over per-user or per-connection settings because it is a single
260
+ authoritative place.
261
+
262
+ The cursor must be connected as a superuser (the RDS admin user).
263
+
264
+ Args:
265
+ cursor: Database cursor connected as a superuser.
266
+ db_name: Name of the pgSTAC database to configure.
267
+ """
268
+ cursor.execute(
269
+ sql.SQL("ALTER DATABASE {db_name} SET search_path TO pgstac, public;").format(
270
+ db_name=sql.Identifier(db_name),
271
+ )
272
+ )
273
+
274
+
255
275
  def register_pg_cron(cursor, db_name: str, schedule: str) -> None:
256
276
  """Install the pg_cron extension and schedule run_queued_queries.
257
277
 
@@ -263,23 +283,12 @@ def register_pg_cron(cursor, db_name: str, schedule: str) -> None:
263
283
  pg_cron must be listed in ``shared_preload_libraries`` in the RDS parameter
264
284
  group before this will succeed.
265
285
 
266
- Side effect: sets ``search_path = pgstac, public`` as the default for all
267
- connections to ``db_name`` via ``ALTER DATABASE``. This is required because
268
- pg_cron background worker sessions start with no ``search_path``, and
269
- prepending ``SET search_path`` to the cron command would open a transaction
270
- that prevents ``run_queued_queries()`` from issuing its own ``COMMIT``.
271
-
272
286
  Args:
273
287
  cursor: Database cursor connected to the ``postgres`` database as a superuser.
274
288
  db_name: Name of the pgSTAC database where run_queued_queries will run.
275
289
  schedule: Cron schedule expression (e.g. ``"*/5 * * * *"``).
276
290
  """
277
291
  cursor.execute(sql.SQL("CREATE EXTENSION IF NOT EXISTS pg_cron;"))
278
- cursor.execute(
279
- sql.SQL("ALTER DATABASE {db_name} SET search_path TO pgstac, public;").format(
280
- db_name=sql.Identifier(db_name),
281
- )
282
- )
283
292
  cursor.execute(
284
293
  sql.SQL(
285
294
  "SELECT cron.schedule_in_database({job_name}, {schedule}, 'CALL pgstac.run_queued_queries();', {db_name});"
@@ -337,6 +346,14 @@ def handler(event, context):
337
346
  password=eoapi_params["password"],
338
347
  )
339
348
 
349
+ print(
350
+ f"Setting default search_path for '{eoapi_params['dbname']}' database..."
351
+ )
352
+ set_database_search_path(
353
+ cursor=cur,
354
+ db_name=eoapi_params["dbname"],
355
+ )
356
+
340
357
  if "use_queue" in params:
341
358
  if _is_enabled(params, "use_queue"):
342
359
  schedule = params.get(
@@ -271,5 +271,5 @@ class PgStacDatabase extends constructs_1.Construct {
271
271
  }
272
272
  exports.PgStacDatabase = PgStacDatabase;
273
273
  _a = JSII_RTTI_SYMBOL_1;
274
- PgStacDatabase[_a] = { fqn: "eoapi-cdk.PgStacDatabase", version: "11.4.0" };
274
+ PgStacDatabase[_a] = { fqn: "eoapi-cdk.PgStacDatabase", version: "11.5.0" };
275
275
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQVdxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBSWtCO0FBQ2xCLDJDQUF3QztBQUN4QyxpREFBOEM7QUFDOUMsaUNBQWlDO0FBQ2pDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFFN0IsTUFBTSxhQUFhLEdBQTJCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBRWhGLElBQUksMEJBQTBCLEdBQTJCO0lBQ3ZELFlBQVksRUFBRSxNQUFNO0NBQ3JCLENBQUM7QUFFRixTQUFTLE1BQU0sQ0FDYixRQUFzRDtJQUV0RCxPQUFRLFFBQWlDLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxTQUFTLHFCQUFxQixDQUM1QixRQUFnQixFQUNoQixTQUFvQztJQUVwQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXpDLDBCQUEwQjtJQUMxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUUvQyxvQkFBb0I7SUFDcEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztJQUMzRSxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUV6Qyx1REFBdUQ7SUFDdkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDdEMsSUFBSSxFQUFFO1NBQ04sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztTQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDYixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUV2QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFhLGNBQWUsU0FBUSxzQkFBUztJQVkzQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUMxQyxLQUFLLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLFVBQVUsRUFDNUMsS0FBSyxDQUFDLFVBQVUsQ0FDakIsQ0FBQztRQUVGLE1BQU0sY0FBYyxHQUFHLElBQUkscUJBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3BFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixVQUFVLEVBQUU7Z0JBQ1YsZUFBZSxFQUFFLGlCQUFpQixDQUFDLGNBQWM7Z0JBQ2pELGNBQWMsRUFBRSxpQkFBaUIsQ0FBQyxhQUFhO2dCQUMvQyxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQzFELFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO2dCQUNuQyxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQyxrQkFBa0I7Z0JBQzFELHlCQUF5QixFQUFFLGlCQUFpQixDQUFDLHNCQUFzQjtnQkFDbkUsWUFBWSxFQUFFLGlCQUFpQixDQUFDLFdBQVc7Z0JBQzNDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXO2dCQUM1QyxnQkFBZ0IsRUFBRSxpQkFBaUIsQ0FBQyxjQUFjO2dCQUNsRCxHQUFHLEtBQUssQ0FBQyxVQUFVO2FBQ3BCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDdEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLHFCQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUM3QyxrQkFBa0IsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTO1lBQzVDLGNBQWM7WUFDZCxHQUFHLE9BQU87U0FDWCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLElBQUksOEJBQXNCLENBQUM7UUFFbkUsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUM3QyxLQUFLLENBQUMsaUNBQWlDLElBQUksRUFBRSxDQUFDO1FBRWhELHdDQUF3QztRQUN4QyxNQUFNLFNBQVMsR0FBRztZQUNoQixjQUFjLEVBQUUsTUFBTTtZQUN0QixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbkMsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksd0JBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUN0RCxXQUFXO1lBQ1gsT0FBTyxFQUFFLHdCQUFVLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDdkMsT0FBTyxFQUFFLGlCQUFpQjtZQUMxQixVQUFVLEVBQUUsR0FBRztZQUNmLFlBQVksRUFBRSxzQkFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRO1lBQzdDLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxFQUFFLElBQUEseUJBQWlCLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRTtnQkFDM0MsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsU0FBUyxFQUFFLFNBQVM7YUFDckIsQ0FBQztZQUNGLEdBQUcsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDOUMsaUJBQWlCLEVBQUUsSUFBSTtZQUN2QixrRUFBa0U7WUFDbEUsR0FBRyxrQkFBa0I7U0FDdEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGdDQUFjLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RSxVQUFVLEVBQUU7Z0JBQ1YsS0FBSyxDQUFDLGFBQWEsSUFBSSxRQUFRO2dCQUMvQixFQUFFO2dCQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDWCxvQkFBb0IsRUFBRTtnQkFDcEIsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztvQkFDbkMsTUFBTSxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksUUFBUTtvQkFDdEMsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLElBQUksRUFBRSxJQUFJO29CQUNWLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVE7b0JBQ3ZDLFFBQVEsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLGFBQWE7aUJBQ2hELENBQUM7Z0JBQ0YsaUJBQWlCLEVBQUUsVUFBVTtnQkFDN0Isa0JBQWtCLEVBQUUsSUFBSTthQUN6QjtZQUNELFdBQVcsRUFBRSxtQ0FDWCxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUNqQixFQUFFO1NBQ0gsQ0FBQyxDQUFDO1FBRUgscUJBQXFCO1FBQ3JCLHVCQUF1QjtRQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyQyx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHFCQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTNELElBQUksd0JBQXdCLEdBQzFCLEtBQUssQ0FBQyx3QkFBd0I7WUFDNUIsQ0FBQyxDQUFDLEVBQUUsR0FBRywwQkFBMEIsRUFBRSxHQUFHLEtBQUssQ0FBQyx3QkFBd0IsRUFBRTtZQUN0RSxDQUFDLENBQUMsMEJBQTBCLENBQUM7UUFFakMsb0JBQW9CO1FBQ3BCLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3hFLHdCQUF3QixDQUFDLHFCQUFxQixDQUFDO1lBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBRTlCLGlIQUFpSDtRQUNqSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFFaEUsZ0dBQWdHO1lBQ2hHLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxHQUFHLHFCQUFxQixDQUMzRCxTQUFTLEVBQ1QsU0FBUyxDQUNWLENBQUM7UUFDSixDQUFDO1FBRUQsOEhBQThIO1FBQzlILElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkUsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLElBQUksNEJBQWMsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQzVELFlBQVksRUFBRSxPQUFPLENBQUMsV0FBVztZQUNqQyxVQUFVLEVBQUUsd0JBQXdCO1lBQ3BDLGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU0sRUFBRSxrRkFBa0Y7U0FDeEgsQ0FBQyxDQUFDO1FBRUgsaUVBQWlFO1FBQ2pFLE1BQU0sNkJBQTZCLEdBQStCO1lBQ2hFLFlBQVksRUFBRSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsWUFBWTtZQUNyRCxZQUFZLEVBQUUscUJBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUMvQixxQkFBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQ3BCLHFCQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FDdkI7U0FDRixDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7UUFDaEQsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxxQkFBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ3ZELGFBQWEsRUFBRTtvQkFDYixHQUFHLDZCQUE2QjtvQkFDaEMsR0FBRyxLQUFLLENBQUMsc0JBQXNCO2lCQUNoQztnQkFDRCxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ2QsUUFBUSxFQUFFO29CQUNSLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVc7b0JBQ2hDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWTtpQkFDMUI7Z0JBQ0QsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztnQkFDNUQsZUFBZSxFQUNiLENBQUMsS0FBSyxDQUFDLFVBQVU7b0JBQ2pCLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxLQUFLLHFCQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07Z0JBQ3ZELGVBQWUsRUFBRTtvQkFDZixRQUFRLEVBQUUsYUFBYTtvQkFDdkIsYUFBYSxFQUFFLElBQUk7b0JBQ25CLGVBQWUsRUFBRSxFQUFFO29CQUNuQixXQUFXLEVBQUUsRUFBRTtvQkFDZixlQUFlLEVBQUUsQ0FBQztvQkFDbEIsa0JBQWtCLEVBQUUsQ0FBQztpQkFDdEI7Z0JBQ0Qsd0JBQXdCLEVBQUUsS0FBSyxDQUFDLHdCQUF3QjthQUN6RCxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUV2RCxpREFBaUQ7WUFDakQsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUM7WUFDdEQsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSwyQkFBWSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLFVBQVU7b0JBQ3JELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxpQkFBaUI7aUJBQzNDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7WUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7WUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDO1lBQ3pELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUM7WUFDckUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDOUQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3ZFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFTSxhQUFhLENBQ2xCLFlBQW9CLEVBQ3BCLFVBQTZDO1FBRTdDLG9FQUFvRTtRQUNwRSxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBRXhELGtGQUFrRjtRQUNsRixrRkFBa0Y7UUFDbEYsK0NBQStDO1FBQy9DLE1BQU0sY0FBYyxHQUFHLFVBQVUsRUFBRSxjQUFjO1lBQy9DLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUM7WUFDNUMsQ0FBQyxDQUFDLG9HQUFvRztnQkFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sYUFBYSxHQUFHLFVBQVUsRUFBRSxZQUFZO1lBQzVDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBRXBDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFDM0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQztRQUU1RCxNQUFNLFdBQVcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO1FBQy9CLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN0QixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUM7UUFFM0IsT0FBTztZQUNMLGNBQWMsRUFBRSxHQUFHLGNBQWMsRUFBRTtZQUNuQyxhQUFhLEVBQUUsR0FBRyxhQUFhLEdBQUcsQ0FBQyxFQUFFLEVBQUUsNEJBQTRCO1lBQ25FLGtCQUFrQixFQUFFLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsNEJBQTRCO1lBQzdFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRTtZQUNyQixrQkFBa0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFO1lBQzNDLHNCQUFzQixFQUFFLE1BQU07WUFDOUIsV0FBVyxFQUFFLEdBQUcsV0FBVyxHQUFHLENBQUMsRUFBRSxFQUFFLDRCQUE0QjtZQUMvRCxXQUFXLEVBQUUsR0FBRyxXQUFXLEVBQUU7WUFDN0IsY0FBYyxFQUFFLEdBQUcsY0FBYyxFQUFFO1NBQ3BDLENBQUM7SUFDSixDQUFDOztBQW5PSCx3Q0FvT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDdXN0b21SZXNvdXJjZSxcbiAgRHVyYXRpb24sXG4gIFJlbW92YWxQb2xpY3ksXG4gIFN0YWNrLFxuICBhd3NfbGFtYmRhLFxuICBhd3NfbG9ncyxcbiAgYXdzX2VjMiBhcyBlYzIsXG4gIGF3c19yZHMgYXMgcmRzLFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG4gIGF3c19zc20gYXMgc3NtLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzLFxuICBERUZBVUxUX1BHU1RBQ19WRVJTSU9OLFxuICByZXNvbHZlTGFtYmRhQ29kZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBQZ0JvdW5jZXIgfSBmcm9tIFwiLi9QZ0JvdW5jZXJcIjtcbmltcG9ydCB7IFBhdGNoTWFuYWdlciB9IGZyb20gXCIuL1BhdGNoTWFuYWdlclwiO1xuaW1wb3J0ICogYXMgY3J5cHRvIGZyb20gXCJjcnlwdG9cIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5jb25zdCBpbnN0YW5jZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0gcmVxdWlyZShcIi4vaW5zdGFuY2UtbWVtb3J5Lmpzb25cIik7XG5cbmxldCBkZWZhdWx0UGdTVEFDQ3VzdG9tT3B0aW9uczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHtcbiAgbW9zYWljX2luZGV4OiBcIlRSVUVcIixcbn07XG5cbmZ1bmN0aW9uIGhhc1ZwYyhcbiAgaW5zdGFuY2U6IHJkcy5EYXRhYmFzZUluc3RhbmNlIHwgcmRzLklEYXRhYmFzZUluc3RhbmNlLFxuKTogaW5zdGFuY2UgaXMgcmRzLkRhdGFiYXNlSW5zdGFuY2Uge1xuICByZXR1cm4gKGluc3RhbmNlIGFzIHJkcy5EYXRhYmFzZUluc3RhbmNlKS52cGMgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyBhIGNvbnRlbnQtYmFzZWQgaGFzaCBmb3IgTGFtYmRhIERvY2tlciBidWlsZCBhc3NldHMuXG4gKlxuICogVGhpcyBoYXNoIGluY2x1ZGVzOlxuICogLSBEb2NrZXJmaWxlIGNvbnRlbnRcbiAqIC0gSGFuZGxlciBjb2RlIGNvbnRlbnRcbiAqIC0gQnVpbGQgYXJndW1lbnRzIChQR1NUQUNfVkVSU0lPTiwgUFlUSE9OX1ZFUlNJT04pXG4gKlxuICogQHBhcmFtIGJhc2VQYXRoIC0gQmFzZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgYm9vdHN0cmFwcGVyX3J1bnRpbWUgZm9sZGVyXG4gKiBAcGFyYW0gYnVpbGRBcmdzIC0gRG9ja2VyIGJ1aWxkIGFyZ3VtZW50cyB0aGF0IGFmZmVjdCB0aGUgTGFtYmRhXG4gKiBAcmV0dXJucyBTSEEyNTYgaGFzaCBhcyBoZXggc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVMYW1iZGFDb2RlSGFzaChcbiAgYmFzZVBhdGg6IHN0cmluZyxcbiAgYnVpbGRBcmdzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcbiAgY29uc3QgaGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKFwic2hhMjU2XCIpO1xuXG4gIC8vIEhhc2ggRG9ja2VyZmlsZSBjb250ZW50XG4gIGNvbnN0IGRvY2tlcmZpbGVQYXRoID0gcGF0aC5qb2luKGJhc2VQYXRoLCBcImJvb3RzdHJhcHBlcl9ydW50aW1lL0RvY2tlcmZpbGVcIik7XG4gIGNvbnN0IGRvY2tlcmZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGRvY2tlcmZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIGhhc2gudXBkYXRlKGBEb2NrZXJmaWxlOiR7ZG9ja2VyZmlsZUNvbnRlbnR9YCk7XG5cbiAgLy8gSGFzaCBoYW5kbGVyIGNvZGVcbiAgY29uc3QgaGFuZGxlclBhdGggPSBwYXRoLmpvaW4oYmFzZVBhdGgsIFwiYm9vdHN0cmFwcGVyX3J1bnRpbWUvaGFuZGxlci5weVwiKTtcbiAgY29uc3QgaGFuZGxlckNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoaGFuZGxlclBhdGgsIFwidXRmOFwiKTtcbiAgaGFzaC51cGRhdGUoYGhhbmRsZXI6JHtoYW5kbGVyQ29udGVudH1gKTtcblxuICAvLyBIYXNoIGJ1aWxkIGFyZ3VtZW50cyBpbiBzb3J0ZWQgb3JkZXIgZm9yIGNvbnNpc3RlbmN5XG4gIGNvbnN0IHNvcnRlZEFyZ3MgPSBPYmplY3Qua2V5cyhidWlsZEFyZ3MpXG4gICAgLnNvcnQoKVxuICAgIC5tYXAoKGtleSkgPT4gYCR7a2V5fT0ke2J1aWxkQXJnc1trZXldfWApXG4gICAgLmpvaW4oXCIsXCIpO1xuICBoYXNoLnVwZGF0ZShgYnVpbGRBcmdzOiR7c29ydGVkQXJnc31gKTtcblxuICByZXR1cm4gaGFzaC5kaWdlc3QoXCJoZXhcIik7XG59XG5cbi8qKlxuICogQW4gUkRTIGluc3RhbmNlIHdpdGggcGdTVEFDIGluc3RhbGxlZCBhbmQgUGdCb3VuY2VyIGNvbm5lY3Rpb24gcG9vbGluZy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBjcmVhdGVzIGFuIG9wdGltaXplZCBwZ1NUQUMgZGF0YWJhc2Ugc2V0dXAgdGhhdCBpbmNsdWRlczpcbiAqIC0gUkRTIFBvc3RncmVTUUwgaW5zdGFuY2Ugd2l0aCBwZ1NUQUMgZXh0ZW5zaW9uXG4gKiAtIFBnQm91bmNlciBjb25uZWN0aW9uIHBvb2xlciAoZW5hYmxlZCBieSBkZWZhdWx0KVxuICogLSBBdXRvbWF0ZWQgaGVhbHRoIG1vbml0b3Jpbmcgc3lzdGVtXG4gKiAtIE9wdGltaXplZCBkYXRhYmFzZSBwYXJhbWV0ZXJzIGZvciB0aGUgc2VsZWN0ZWQgaW5zdGFuY2UgdHlwZVxuICpcbiAqICMjIENvbm5lY3Rpb24gUG9vbGluZyB3aXRoIFBnQm91bmNlclxuICpcbiAqIEJ5IGRlZmF1bHQsIHRoaXMgY29uc3RydWN0IGRlcGxveXMgUGdCb3VuY2VyIGFzIGEgY29ubmVjdGlvbiBwb29sZXIgcnVubmluZyBvblxuICogYSBkZWRpY2F0ZWQgRUMyIGluc3RhbmNlLiBQZ0JvdW5jZXIgcHJvdmlkZXMgc2V2ZXJhbCBiZW5lZml0czpcbiAqXG4gKiAtICoqQ29ubmVjdGlvbiBNYW5hZ2VtZW50Kio6IFBvb2xzIGFuZCByZXVzZXMgZGF0YWJhc2UgY29ubmVjdGlvbnMgdG8gcmVkdWNlIG92ZXJoZWFkXG4gKiAtICoqUGVyZm9ybWFuY2UqKjogT3B0aW1pemVzIGNvbm5lY3Rpb24gaGFuZGxpbmcgZm9yIGhpZ2gtdHJhZmZpYyBhcHBsaWNhdGlvbnNcbiAqIC0gKipTY2FsYWJpbGl0eSoqOiBBbGxvd3MgbW9yZSBjb25jdXJyZW50IGNvbm5lY3Rpb25zIHRoYW4gdGhlIFJEUyBpbnN0YW5jZSBhbG9uZVxuICogLSAqKkhlYWx0aCBNb25pdG9yaW5nKio6IEluY2x1ZGVzIGNvbXByZWhlbnNpdmUgaGVhbHRoIGNoZWNrcyB0byBlbnN1cmUgYXZhaWxhYmlsaXR5XG4gKlxuICogIyMjIFBnQm91bmNlciBDb25maWd1cmF0aW9uXG4gKiAtIFBvb2wgbW9kZTogVHJhbnNhY3Rpb24tbGV2ZWwgcG9vbGluZyAoZGVmYXVsdClcbiAqIC0gTWF4aW11bSBjbGllbnQgY29ubmVjdGlvbnM6IDEwMDBcbiAqIC0gRGVmYXVsdCBwb29sIHNpemU6IDIwIGNvbm5lY3Rpb25zIHBlciBkYXRhYmFzZS91c2VyIGNvbWJpbmF0aW9uXG4gKiAtIEluc3RhbmNlIHR5cGU6IHQzLm1pY3JvIEVDMiBpbnN0YW5jZVxuICpcbiAqICMjIyBIZWFsdGggQ2hlY2sgU3lzdGVtXG4gKiBUaGUgY29uc3RydWN0IGluY2x1ZGVzIGFuIGF1dG9tYXRlZCBoZWFsdGggY2hlY2sgc3lzdGVtIHRoYXQgdmFsaWRhdGVzOlxuICogLSBQZ0JvdW5jZXIgc2VydmljZSBpcyBydW5uaW5nIGFuZCBsaXN0ZW5pbmcgb24gcG9ydCA1NDMyXG4gKiAtIENvbm5lY3Rpb24gdGVzdHMgdG8gZW5zdXJlIGFjY2Vzc2liaWxpdHlcbiAqIC0gQ2xvdWQtaW5pdCBzZXR1cCBjb21wbGV0aW9uIGJlZm9yZSB2YWxpZGF0aW9uXG4gKiAtIERldGFpbGVkIGRpYWdub3N0aWNzIGZvciB0cm91Ymxlc2hvb3RpbmdcbiAqXG4gKiAjIyMgQ29ubmVjdGlvbiBEZXRhaWxzXG4gKiBXaGVuIFBnQm91bmNlciBpcyBlbmFibGVkLCBhcHBsaWNhdGlvbnMgY29ubmVjdCB0aHJvdWdoIHRoZSBQZ0JvdW5jZXIgaW5zdGFuY2VcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHRvIFJEUy4gVGhlIGBwZ3N0YWNTZWNyZXRgIGNvbnRhaW5zIGNvbm5lY3Rpb24gaW5mb3JtYXRpb25cbiAqIHBvaW50aW5nIHRvIFBnQm91bmNlciwgYW5kIHRoZSBgY29ubmVjdGlvblRhcmdldGAgcHJvcGVydHkgcmVmZXJzIHRvIHRoZVxuICogUGdCb3VuY2VyIEVDMiBpbnN0YW5jZS5cbiAqXG4gKiBUbyBkaXNhYmxlIFBnQm91bmNlciBhbmQgY29ubmVjdCBkaXJlY3RseSB0byBSRFMsIHNldCBgYWRkUGdib3VuY2VyOiBmYWxzZWAuXG4gKlxuICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBgcmRzLkRhdGFiYXNlSW5zdGFuY2VgIGhpZ2hlci1sZXZlbCBjb25zdHJ1Y3RcbiAqIG1ha2luZyB1c2Ugb2YgdGhlIEJvb3RzdHJhcFBnU3RhYyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQZ1N0YWNEYXRhYmFzZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGRiOiByZHMuRGF0YWJhc2VJbnN0YW5jZTtcbiAgcGdzdGFjU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICBwcml2YXRlIF9wZ0JvdW5jZXJTZXJ2ZXI/OiBQZ0JvdW5jZXI7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBnc3RhY1ZlcnNpb246IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGNvbm5lY3Rpb25UYXJnZXQ6IHJkcy5JRGF0YWJhc2VJbnN0YW5jZSB8IGVjMi5JbnN0YW5jZTtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXA/OiBlYzIuU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIHJlYWRvbmx5IHNlY3JldEJvb3RzdHJhcHBlcj86IEN1c3RvbVJlc291cmNlO1xuICBwdWJsaWMgcmVhZG9ubHkgcGdib3VuY2VySGVhbHRoQ2hlY2s/OiBDdXN0b21SZXNvdXJjZTtcbiAgcHVibGljIHJlYWRvbmx5IHBnYm91bmNlckluc3RhbmNlSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFBnU3RhY0RhdGFiYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgZGVmYXVsdFBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlcnMoXG4gICAgICBwcm9wcy5pbnN0YW5jZVR5cGU/LnRvU3RyaW5nKCkgfHwgXCJtNS5sYXJnZVwiLFxuICAgICAgcHJvcHMucGFyYW1ldGVycyxcbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBuZXcgcmRzLlBhcmFtZXRlckdyb3VwKHRoaXMsIFwicGFyYW1ldGVyR3JvdXBcIiwge1xuICAgICAgZW5naW5lOiBwcm9wcy5lbmdpbmUsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIG1heF9jb25uZWN0aW9uczogZGVmYXVsdFBhcmFtZXRlcnMubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgIHNoYXJlZF9idWZmZXJzOiBkZWZhdWx0UGFyYW1ldGVycy5zaGFyZWRCdWZmZXJzLFxuICAgICAgICBlZmZlY3RpdmVfY2FjaGVfc2l6ZTogZGVmYXVsdFBhcmFtZXRlcnMuZWZmZWN0aXZlQ2FjaGVTaXplLFxuICAgICAgICB3b3JrX21lbTogZGVmYXVsdFBhcmFtZXRlcnMud29ya01lbSxcbiAgICAgICAgbWFpbnRlbmFuY2Vfd29ya19tZW06IGRlZmF1bHRQYXJhbWV0ZXJzLm1haW50ZW5hbmNlV29ya01lbSxcbiAgICAgICAgbWF4X2xvY2tzX3Blcl90cmFuc2FjdGlvbjogZGVmYXVsdFBhcmFtZXRlcnMubWF4TG9ja3NQZXJUcmFuc2FjdGlvbixcbiAgICAgICAgdGVtcF9idWZmZXJzOiBkZWZhdWx0UGFyYW1ldGVycy50ZW1wQnVmZmVycyxcbiAgICAgICAgc2VxX3BhZ2VfY29zdDogZGVmYXVsdFBhcmFtZXRlcnMuc2VxUGFnZUNvc3QsXG4gICAgICAgIHJhbmRvbV9wYWdlX2Nvc3Q6IGRlZmF1bHRQYXJhbWV0ZXJzLnJhbmRvbVBhZ2VDb3N0LFxuICAgICAgICAuLi5wcm9wcy5wYXJhbWV0ZXJzLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcGFyYW1ldGVyczogX3BhcmFtZXRlcnMsIC4uLmRiUHJvcHMgfSA9IHByb3BzO1xuICAgIHRoaXMuZGIgPSBuZXcgcmRzLkRhdGFiYXNlSW5zdGFuY2UodGhpcywgXCJkYlwiLCB7XG4gICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgLi4uZGJQcm9wcyxcbiAgICB9KTtcblxuICAgIHRoaXMucGdzdGFjVmVyc2lvbiA9IHByb3BzLnBnc3RhY1ZlcnNpb24gfHwgREVGQVVMVF9QR1NUQUNfVkVSU0lPTjtcblxuICAgIGNvbnN0IHsgY29kZTogdXNlckNvZGUsIC4uLm90aGVyTGFtYmRhT3B0aW9ucyB9ID1cbiAgICAgIHByb3BzLmJvb3RzdHJhcHBlckxhbWJkYUZ1bmN0aW9uT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIFN0b3JlIGJ1aWxkIGFyZ3MgZm9yIGhhc2ggY29tcHV0YXRpb25cbiAgICBjb25zdCBidWlsZEFyZ3MgPSB7XG4gICAgICBQWVRIT05fVkVSU0lPTjogXCIzLjEyXCIsXG4gICAgICBQR1NUQUNfVkVSU0lPTjogdGhpcy5wZ3N0YWNWZXJzaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IGF3c19sYW1iZGEuRnVuY3Rpb24odGhpcywgXCJsYW1iZGFcIiwge1xuICAgICAgLy8gZGVmYXVsdHNcbiAgICAgIHJ1bnRpbWU6IGF3c19sYW1iZGEuUnVudGltZS5QWVRIT05fM18xMixcbiAgICAgIGhhbmRsZXI6IFwiaGFuZGxlci5oYW5kbGVyXCIsXG4gICAgICBtZW1vcnlTaXplOiAxMjgsXG4gICAgICBsb2dSZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICAgIGNvZGU6IHJlc29sdmVMYW1iZGFDb2RlKHVzZXJDb2RlLCBfX2Rpcm5hbWUsIHtcbiAgICAgICAgZmlsZTogXCJib290c3RyYXBwZXJfcnVudGltZS9Eb2NrZXJmaWxlXCIsXG4gICAgICAgIGJ1aWxkQXJnczogYnVpbGRBcmdzLFxuICAgICAgfSksXG4gICAgICB2cGM6IGhhc1ZwYyh0aGlzLmRiKSA/IHRoaXMuZGIudnBjIDogcHJvcHMudnBjLFxuICAgICAgYWxsb3dQdWJsaWNTdWJuZXQ6IHRydWUsXG4gICAgICAvLyBvdmVyd3JpdGVzIGRlZmF1bHRzIHdpdGggdXNlci1wcm92aWRlZCBjb25maWd1cmFibGUgcHJvcGVydGllcyxcbiAgICAgIC4uLm90aGVyTGFtYmRhT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMucGdzdGFjU2VjcmV0ID0gbmV3IHNlY3JldHNtYW5hZ2VyLlNlY3JldCh0aGlzLCBcImJvb3RzdHJhcHBlcnNlY3JldFwiLCB7XG4gICAgICBzZWNyZXROYW1lOiBbXG4gICAgICAgIHByb3BzLnNlY3JldHNQcmVmaXggfHwgXCJwZ3N0YWNcIixcbiAgICAgICAgaWQsXG4gICAgICAgIHRoaXMubm9kZS5hZGRyLnNsaWNlKC04KSxcbiAgICAgIF0uam9pbihcIi9cIiksXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRibmFtZTogcHJvcHMucGdzdGFjRGJOYW1lIHx8IFwicGdzdGFjXCIsXG4gICAgICAgICAgZW5naW5lOiBcInBvc3RncmVzXCIsXG4gICAgICAgICAgcG9ydDogNTQzMixcbiAgICAgICAgICBob3N0OiB0aGlzLmRiLmluc3RhbmNlRW5kcG9pbnQuaG9zdG5hbWUsXG4gICAgICAgICAgdXNlcm5hbWU6IHByb3BzLnBnc3RhY1VzZXJuYW1lIHx8IFwicGdzdGFjX3VzZXJcIixcbiAgICAgICAgfSksXG4gICAgICAgIGdlbmVyYXRlU3RyaW5nS2V5OiBcInBhc3N3b3JkXCIsXG4gICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYFBnU1RBQyBkYXRhYmFzZSBib290c3RyYXBwZWQgYnkgJHtcbiAgICAgICAgU3RhY2sub2YodGhpcykuc3RhY2tOYW1lXG4gICAgICB9YCxcbiAgICB9KTtcblxuICAgIC8vIEFsbG93IGxhbWJkYSB0by4uLlxuICAgIC8vIHJlYWQgbmV3IHVzZXIgc2VjcmV0XG4gICAgdGhpcy5wZ3N0YWNTZWNyZXQuZ3JhbnRSZWFkKGhhbmRsZXIpO1xuICAgIC8vIHJlYWQgZGF0YWJhc2Ugc2VjcmV0XG4gICAgdGhpcy5kYi5zZWNyZXQhLmdyYW50UmVhZChoYW5kbGVyKTtcbiAgICAvLyBjb25uZWN0IHRvIGRhdGFiYXNlXG4gICAgdGhpcy5kYi5jb25uZWN0aW9ucy5hbGxvd0Zyb20oaGFuZGxlciwgZWMyLlBvcnQudGNwKDU0MzIpKTtcblxuICAgIGxldCBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPVxuICAgICAgcHJvcHMuY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzXG4gICAgICAgID8geyAuLi5kZWZhdWx0UGdTVEFDQ3VzdG9tT3B0aW9ucywgLi4ucHJvcHMuY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzIH1cbiAgICAgICAgOiBkZWZhdWx0UGdTVEFDQ3VzdG9tT3B0aW9ucztcblxuICAgIC8vIHVwZGF0ZSBwcm9wZXJ0aWVzXG4gICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wiY29ubl9zZWNyZXRfYXJuXCJdID0gdGhpcy5kYi5zZWNyZXQhLnNlY3JldEFybjtcbiAgICBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNbXCJuZXdfdXNlcl9zZWNyZXRfYXJuXCJdID1cbiAgICAgIHRoaXMucGdzdGFjU2VjcmV0LnNlY3JldEFybjtcblxuICAgIC8vIGlmIHByb3BzLmxhbWJkYUZ1bmN0aW9uT3B0aW9ucyBkb2Vzbid0IGhhdmUgJ2NvZGUnIGRlZmluZWQsIHVwZGF0ZSBwZ3N0YWNfdmVyc2lvbiAobmVlZGVkIGZvciBkZWZhdWx0IHJ1bnRpbWUpXG4gICAgaWYgKCF1c2VyQ29kZSkge1xuICAgICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wicGdzdGFjX3ZlcnNpb25cIl0gPSB0aGlzLnBnc3RhY1ZlcnNpb247XG5cbiAgICAgIC8vIEFkZCBjb250ZW50LWJhc2VkIGhhc2ggdG8gZW5zdXJlIHRoZSBMYW1iZGEgZ2V0cyByZS1leGVjdXRlZCBvbmx5IHdoZW4gY29kZSBvciBjb25maWcgY2hhbmdlc1xuICAgICAgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzW1wiY29kZV9oYXNoXCJdID0gY29tcHV0ZUxhbWJkYUNvZGVIYXNoKFxuICAgICAgICBfX2Rpcm5hbWUsXG4gICAgICAgIGJ1aWxkQXJncyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZm9yY2UgdGhlIGJvb3RzdHJhcCBwcm9jZXNzIHRvIHJ1biBieSBhZGRpbmcgYSB0aW1lc3RhbXAgd2hpY2ggd2lsbCBlbnN1cmUgdGhlIGN1c3RvbSByZXNvdXJjZSBleGVjdXRlcyB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAgaWYgKHByb3BzLmZvcmNlQm9vdHN0cmFwKSB7XG4gICAgICBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNbXCJ0aW1lc3RhbXBcIl0gPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9vdHN0cmFwcGVyID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIFwiYm9vdHN0cmFwcGVyXCIsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogaGFuZGxlci5mdW5jdGlvbkFybixcbiAgICAgIHByb3BlcnRpZXM6IGN1c3RvbVJlc291cmNlUHJvcGVydGllcyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuUkVUQUlOLCAvLyBUaGlzIHJldGFpbnMgdGhlIGN1c3RvbSByZXNvdXJjZSAod2hpY2ggZG9lc24ndCByZWFsbHkgZXhpc3QpLCBub3QgdGhlIGRhdGFiYXNlXG4gICAgfSk7XG5cbiAgICAvLyBQZ0JvdW5jZXI6IGNvbm5lY3Rpb24gcG9vbGVyY3VzdG9tcmVzb3VyY2UgdHJpZ2dlciBvbiByZWRlcGxveVxuICAgIGNvbnN0IGRlZmF1bHRQZ2JvdW5jZXJJbnN0YW5jZVByb3BzOiBQYXJ0aWFsPGVjMi5JbnN0YW5jZVByb3BzPiA9IHtcbiAgICAgIGluc3RhbmNlTmFtZTogYCR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS1wZ2JvdW5jZXJgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlLm9mKFxuICAgICAgICBlYzIuSW5zdGFuY2VDbGFzcy5UMyxcbiAgICAgICAgZWMyLkluc3RhbmNlU2l6ZS5NSUNSTyxcbiAgICAgICksXG4gICAgfTtcbiAgICBjb25zdCBhZGRQZ2JvdW5jZXIgPSBwcm9wcy5hZGRQZ2JvdW5jZXIgPz8gdHJ1ZTtcbiAgICBpZiAoYWRkUGdib3VuY2VyKSB7XG4gICAgICB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIgPSBuZXcgUGdCb3VuY2VyKHRoaXMsIFwicGdib3VuY2VyXCIsIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wczoge1xuICAgICAgICAgIC4uLmRlZmF1bHRQZ2JvdW5jZXJJbnN0YW5jZVByb3BzLFxuICAgICAgICAgIC4uLnByb3BzLnBnYm91bmNlckluc3RhbmNlUHJvcHMsXG4gICAgICAgIH0sXG4gICAgICAgIHZwYzogcHJvcHMudnBjLFxuICAgICAgICBkYXRhYmFzZToge1xuICAgICAgICAgIGNvbm5lY3Rpb25zOiB0aGlzLmRiLmNvbm5lY3Rpb25zLFxuICAgICAgICAgIHNlY3JldDogdGhpcy5wZ3N0YWNTZWNyZXQsXG4gICAgICAgIH0sXG4gICAgICAgIGRiTWF4Q29ubmVjdGlvbnM6IHBhcnNlSW50KGRlZmF1bHRQYXJhbWV0ZXJzLm1heENvbm5lY3Rpb25zKSxcbiAgICAgICAgdXNlUHVibGljU3VibmV0OlxuICAgICAgICAgICFwcm9wcy52cGNTdWJuZXRzIHx8XG4gICAgICAgICAgcHJvcHMudnBjU3VibmV0cy5zdWJuZXRUeXBlID09PSBlYzIuU3VibmV0VHlwZS5QVUJMSUMsXG4gICAgICAgIHBnQm91bmNlckNvbmZpZzoge1xuICAgICAgICAgIHBvb2xNb2RlOiBcInRyYW5zYWN0aW9uXCIsXG4gICAgICAgICAgbWF4Q2xpZW50Q29ubjogMTAwMCxcbiAgICAgICAgICBkZWZhdWx0UG9vbFNpemU6IDIwLFxuICAgICAgICAgIG1pblBvb2xTaXplOiAxMCxcbiAgICAgICAgICByZXNlcnZlUG9vbFNpemU6IDUsXG4gICAgICAgICAgcmVzZXJ2ZVBvb2xUaW1lb3V0OiA1LFxuICAgICAgICB9LFxuICAgICAgICBtYWNoaW5lSW1hZ2VTc21QYXJhbWV0ZXI6IHByb3BzLnBnYm91bmNlckFtaVNzbVBhcmFtZXRlcixcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIubm9kZS5hZGREZXBlbmRlbmN5KGJvb3RzdHJhcHBlcik7XG5cbiAgICAgIC8vIFBhdGNoaW5nIGluZnJhc3RydWN0dXJlIGZvciBQZ0JvdW5jZXIgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGFkZFBhdGNoTWFuYWdlciA9IHByb3BzLmFkZFBhdGNoTWFuYWdlciA/PyB0cnVlO1xuICAgICAgaWYgKGFkZFBhdGNoTWFuYWdlcikge1xuICAgICAgICBuZXcgUGF0Y2hNYW5hZ2VyKHRoaXMsIFwiUGF0Y2hNYW5hZ2VyXCIsIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuaW5zdGFuY2UuaW5zdGFuY2VJZCxcbiAgICAgICAgICBtYWludGVuYW5jZVdpbmRvdzogcHJvcHMubWFpbnRlbmFuY2VXaW5kb3csXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBnc3RhY1NlY3JldCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5wZ2JvdW5jZXJTZWNyZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25UYXJnZXQgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuaW5zdGFuY2U7XG4gICAgICB0aGlzLnNlY3VyaXR5R3JvdXAgPSB0aGlzLl9wZ0JvdW5jZXJTZXJ2ZXIuc2VjdXJpdHlHcm91cDtcbiAgICAgIHRoaXMuc2VjcmV0Qm9vdHN0cmFwcGVyID0gdGhpcy5fcGdCb3VuY2VyU2VydmVyLnNlY3JldFVwZGF0ZUNvbXBsZXRlO1xuICAgICAgdGhpcy5wZ2JvdW5jZXJIZWFsdGhDaGVjayA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5oZWFsdGhDaGVjaztcbiAgICAgIHRoaXMucGdib3VuY2VySW5zdGFuY2VJZCA9IHRoaXMuX3BnQm91bmNlclNlcnZlci5pbnN0YW5jZS5pbnN0YW5jZUlkO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb25UYXJnZXQgPSB0aGlzLmRiO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRQYXJhbWV0ZXJzKFxuICAgIGluc3RhbmNlVHlwZTogc3RyaW5nLFxuICAgIHBhcmFtZXRlcnM6IFBnU3RhY0RhdGFiYXNlUHJvcHNbXCJwYXJhbWV0ZXJzXCJdLFxuICApOiBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNsaS9pc3N1ZXMvMTI3OSNpc3N1ZWNvbW1lbnQtOTA5MzE4MjM2XG4gICAgY29uc3QgbWVtb3J5X2luX2tiID0gaW5zdGFuY2VTaXplc1tpbnN0YW5jZVR5cGVdICogMTAyNDtcblxuICAgIC8vIEl0J3Mgb25seSBuZWNlc3NhcnkgdG8gY29uc2lkZXIgcGFzc2VkIGluIHBhcmFtZXRlcnMgZm9yIGFueSB2YWx1ZSB0aGF0IHVzZWQgdG9cbiAgICAvLyBkZXJpdmUgc3Vic2VxdWVudCB2YWx1ZXMuIFZhbHVlcyB0aGF0IGRvbid0IGhhdmUgZGVwZW5kZW5jaWVzIHdpbGwgYmUgb3ZlcnJpZGVuXG4gICAgLy8gd2hlbiB3ZSB1bnBhY2sgdGhlIHBhc3NlZC1pbiB1c2VyIHBhcmFtZXRlcnNcbiAgICBjb25zdCBtYXhDb25uZWN0aW9ucyA9IHBhcmFtZXRlcnM/Lm1heENvbm5lY3Rpb25zXG4gICAgICA/IE51bWJlci5wYXJzZUludChwYXJhbWV0ZXJzLm1heENvbm5lY3Rpb25zKVxuICAgICAgOiAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUkRTL2xhdGVzdC9Vc2VyR3VpZGUvQ0hBUF9MaW1pdHMuaHRtbCNSRFNfTGltaXRzLk1heENvbm5lY3Rpb25zXG4gICAgICAgIE1hdGgubWluKE1hdGgucm91bmQoKG1lbW9yeV9pbl9rYiAqIDEwMjQpIC8gOTUzMTM5MiksIDUwMDApO1xuICAgIGNvbnN0IHNoYXJlZEJ1ZmZlcnMgPSBwYXJhbWV0ZXJzPy5zaGFyZWRCdWZlcnNcbiAgICAgID8gTnVtYmVyLnBhcnNlSW50KHBhcmFtZXRlcnMuc2hhcmVkQnVmZXJzKVxuICAgICAgOiBNYXRoLnJvdW5kKDAuMjUgKiBtZW1vcnlfaW5fa2IpO1xuXG4gICAgY29uc3QgZWZmZWN0aXZlQ2FjaGVTaXplID0gTWF0aC5yb3VuZCgwLjc1ICogbWVtb3J5X2luX2tiKTtcbiAgICBjb25zdCB3b3JrTWVtID0gTWF0aC5mbG9vcihzaGFyZWRCdWZmZXJzIC8gbWF4Q29ubmVjdGlvbnMpO1xuICAgIGNvbnN0IG1haW50ZW5hbmNlV29ya01lbSA9IE1hdGgucm91bmQoMC4yNSAqIHNoYXJlZEJ1ZmZlcnMpO1xuXG4gICAgY29uc3QgdGVtcEJ1ZmZlcnMgPSAxMjggKiAxMDI0O1xuICAgIGNvbnN0IHNlcVBhZ2VDb3N0ID0gMTtcbiAgICBjb25zdCByYW5kb21QYWdlQ29zdCA9IDEuMTtcblxuICAgIHJldHVybiB7XG4gICAgICBtYXhDb25uZWN0aW9uczogYCR7bWF4Q29ubmVjdGlvbnN9YCxcbiAgICAgIHNoYXJlZEJ1ZmZlcnM6IGAke3NoYXJlZEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIGVmZmVjdGl2ZUNhY2hlU2l6ZTogYCR7ZWZmZWN0aXZlQ2FjaGVTaXplIC8gOH1gLCAvLyBSZXByZXNlbnRlZCBpbiA4a2IgYmxvY2tzXG4gICAgICB3b3JrTWVtOiBgJHt3b3JrTWVtfWAsXG4gICAgICBtYWludGVuYW5jZVdvcmtNZW06IGAke21haW50ZW5hbmNlV29ya01lbX1gLFxuICAgICAgbWF4TG9ja3NQZXJUcmFuc2FjdGlvbjogXCIxMDI0XCIsXG4gICAgICB0ZW1wQnVmZmVyczogYCR7dGVtcEJ1ZmZlcnMgLyA4fWAsIC8vIFJlcHJlc2VudGVkIGluIDhrYiBibG9ja3NcbiAgICAgIHNlcVBhZ2VDb3N0OiBgJHtzZXFQYWdlQ29zdH1gLFxuICAgICAgcmFuZG9tUGFnZUNvc3Q6IGAke3JhbmRvbVBhZ2VDb3N0fWAsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBnU3RhY0RhdGFiYXNlUHJvcHMgZXh0ZW5kcyByZHMuRGF0YWJhc2VJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgZGF0YWJhc2UgdGhhdCBpcyB0byBiZSBjcmVhdGVkIGFuZCBvbnRvIHdoaWNoIHBnU1RBQyB3aWxsIGJlIGluc3RhbGxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjXG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNEYk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcGdzdGFjIHRvIGluc3RhbGwgb24gdGhlIGRhdGFiYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IDAuOC41XG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmVmaXggdG8gYXNzaWduIHRvIHRoZSBnZW5lcmF0ZWQgYHNlY3JldHNfbWFuYWdlci5TZWNyZXRgXG4gICAqXG4gICAqIEBkZWZhdWx0IHBnc3RhY1xuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0c1ByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBvZiB1c2VyIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGNvbm5lY3RpbmcgdG8gdGhlIHBnU1RBQyBkYXRhYmFzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgcGdzdGFjX3VzZXJcbiAgICovXG4gIHJlYWRvbmx5IHBnc3RhY1VzZXJuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGQgcGdib3VuY2VyIGluc3RhbmNlIGZvciBtYW5hZ2luZyB0cmFmZmljIHRvIHRoZSBwZ1NUQUMgZGF0YWJhc2VcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkUGdib3VuY2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgdGhlIHBnYm91bmNlciBlYzIgaW5zdGFuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IHBnYm91bmNlckluc3RhbmNlUHJvcHM/OiBlYzIuSW5zdGFuY2VQcm9wcyB8IGFueTtcblxuICAvKipcbiAgICogU1NNIHBhcmFtZXRlciBwYXRoIGZvciB0aGUgUGdCb3VuY2VyIEVDMiBpbnN0YW5jZSBtYWNoaW5lIGltYWdlIChBTUkpLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0aGUgbGF0ZXN0IFVidW50dSBOb2JsZSBBTUkgKGBjdXJyZW50YCkuIEZvciBzdGFibGUgZGVwbG95bWVudHNcbiAgICogd2hlcmUgRUMyIHJlcGxhY2VtZW50IHNob3VsZCBvbmx5IGhhcHBlbiBvbiBleHBsaWNpdCBpbnRlbnQsIHBpbiB0aGlzIHRvIGFcbiAgICogc3BlY2lmaWMgZGF0ZS12ZXJzaW9uZWQgcGF0aDpcbiAgICogICAvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvbm9ibGUvc3RhYmxlL1lZWVlNTURELlgvYW1kNjQvaHZtL2Vicy1ncDMvYW1pLWlkXG4gICAqXG4gICAqIFRvIGxpc3QgYXZhaWxhYmxlIGRhdGUtdmVyc2lvbmVkIHBhdGhzIGluIHlvdXIgcmVnaW9uOlxuICAgKiAgIGF3cyBzc20gZ2V0LXBhcmFtZXRlcnMtYnktcGF0aCAtLXBhdGggXCIvYXdzL3NlcnZpY2UvY2Fub25pY2FsL3VidW50dS9zZXJ2ZXIvbm9ibGUvc3RhYmxlL1wiIC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzWz9lbmRzX3dpdGgoTmFtZSwgJ2FtZDY0L2h2bS9lYnMtZ3AzL2FtaS1pZCcpXS5OYW1lXCJcbiAgICpcbiAgICogU2VlOiBodHRwczovL2RvY3VtZW50YXRpb24udWJ1bnR1LmNvbS9hd3MvYXdzLWhvdy10by9pbnN0YW5jZXMvZmluZC11YnVudHUtaW1hZ2VzL1xuICAgKlxuICAgKiBXaXRoIGFkZFBhdGNoTWFuYWdlcjogdHJ1ZSAoZGVmYXVsdCksIFNTTSBQYXRjaCBNYW5hZ2VyIGhhbmRsZXMgT1Mgc2VjdXJpdHlcbiAgICogdXBkYXRlcyB3aXRob3V0IHJlcXVpcmluZyBpbnN0YW5jZSByZXBsYWNlbWVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgL2F3cy9zZXJ2aWNlL2Nhbm9uaWNhbC91YnVudHUvc2VydmVyL25vYmxlL3N0YWJsZS8yMDI2MDIxOC9hbWQ2NC9odm0vZWJzLWdwMy9hbWktaWRcbiAgICovXG4gIHJlYWRvbmx5IHBnYm91bmNlckFtaVNzbVBhcmFtZXRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkIHBhdGNoaW5nIHN5c3RlbSB1c2luZyBBV1MgU1NNIGZvciBwZ2JvdW5jZXIgaW5zdGFuY2UgbWFpbnRlbmFuY2VcbiAgICogYGFkZFBnYm91bmNlcmAgbXVzdCBiZSB0cnVlIGZvciB0aGlzIHRvIGhhdmUgYW4gZWZmZWN0XG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFkZFBhdGNoTWFuYWdlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBtYWludGVuYW5jZSB3aW5kb3cgZm9yIHBhdGNoaW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSBuZXcgbWFpbnRlbmFuY2Ugd2luZG93IHdpbGwgYmUgY3JlYXRlZCwgZGVmaW5lZCBpbiBjb25zdHJ1Y3RcbiAgICovXG4gIHJlYWRvbmx5IG1haW50ZW5hbmNlV2luZG93Pzogc3NtLkNmbk1haW50ZW5hbmNlV2luZG93O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHByb3BlcnRpZXMgcGFzc2VkIHRvIHRoZSBib290c3RyYXBwZXIgTGFtYmRhIGFzIENsb3VkRm9ybWF0aW9uXG4gICAqIEN1c3RvbSBSZXNvdXJjZSBwcm9wZXJ0aWVzLiBUaGVzZSBhcmUgbWVyZ2VkIHdpdGggdGhlIGRlZmF1bHRzIGFuZCBmb3J3YXJkZWRcbiAgICogdG8gdGhlIGhhbmRsZXIgYXMgYGV2ZW50W1wiUmVzb3VyY2VQcm9wZXJ0aWVzXCJdYC5cbiAgICpcbiAgICogIyMgU3VwcG9ydGVkIHBnU1RBQyBzZXR0aW5nc1xuICAgKlxuICAgKiBFYWNoIHNldHRpbmcgZm9sbG93cyBob25lc3QgYm9vbGVhbiBzZW1hbnRpY3M6IGBcIlRSVUVcImAgZW5hYmxlcywgYFwiRkFMU0VcImBcbiAgICogZGlzYWJsZXMgKHJldmVydHMgdG8gcGdTVEFDJ3MgYnVpbHQtaW4gZGVmYXVsdCksIGFuZCBvbWl0dGluZyB0aGUga2V5XG4gICAqIGVudGlyZWx5IGlzIGEgbm8tb3Ag4oCUIHRoZSBkYXRhYmFzZSBpcyBsZWZ0IGFzLWlzLiBUaGlzIG1lYW5zIHVwZ3JhZGluZ1xuICAgKiB3aXRob3V0IGNoYW5naW5nIGNvbmZpZyBuZXZlciBzaWxlbnRseSBhbHRlcnMgYSBtYW51YWxseS1tYW5hZ2VkIHNldHRpbmcuXG4gICAqXG4gICAqIHwgUHJvcGVydHkgICAgICAgICAgICAgICAgICAgfCBEZWZhdWx0ICB8IERlc2NyaXB0aW9uIHxcbiAgICogfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfFxuICAgKiB8IGBjb250ZXh0YCAgICAgICAgICAgICAgICAgIHwgKHVuc2V0KSAgfCBFbmFibGUgYENPTlRFWFQ9T05gIGluIHBnU1RBQyAoaXRlbSBjb3VudCBvbiBzZWFyY2gpLiB8XG4gICAqIHwgYG1vc2FpY19pbmRleGAgICAgICAgICAgICAgfCBgXCJUUlVFXCJgIHwgQ3JlYXRlIGEgcGFydGlhbCBpbmRleCBvbiBzZWFyY2hlcyBvZiB0eXBlIGBtb3NhaWNgLiBTZXQgYFwiRkFMU0VcImAgdG8gZHJvcCBpdC4gfFxuICAgKiB8IGB1cGRhdGVfY29sbGVjdGlvbl9leHRlbnRgIHwgKHVuc2V0KSAgfCBBdXRvbWF0aWNhbGx5IHVwZGF0ZSBjb2xsZWN0aW9uIHNwYXRpYWwvdGVtcG9yYWwgZXh0ZW50cyBvbiBpdGVtIGluZ2VzdC4gQ29tYmluZSB3aXRoIGB1c2VfcXVldWVgIHRvIHJlZHVjZSBwZXItdHJhbnNhY3Rpb24gb3ZlcmhlYWQuIHxcbiAgICogfCBgdXNlX3F1ZXVlYCAgICAgICAgICAgICAgICB8ICh1bnNldCkgIHwgUHJvY2VzcyBleHRlbnQgdXBkYXRlcyBhc3luY2hyb25vdXNseSB2aWEgYW4gaW50ZXJuYWwgcXVldWUuIGBcIlRSVUVcImAgaW5zdGFsbHMgcGdfY3JvbiBhbmQgc2NoZWR1bGVzIHRoZSBkcmFpbiBqb2I7IGBcIkZBTFNFXCJgIHJlbW92ZXMgdGhlIGpvYi4gUmVxdWlyZXMgYHBnX2Nyb25gIChzZWUgYmVsb3cpLiB8XG4gICAqIHwgYHBnX2Nyb25fc2NoZWR1bGVgICAgICAgICAgfCBgXCIqXFwvMTAgKiAqICogKlwiYCB8IENyb24gc2NoZWR1bGUgZm9yIGBDQUxMIHJ1bl9xdWV1ZWRfcXVlcmllcygpYC4gT25seSB1c2VkIHdoZW4gYHVzZV9xdWV1ZWAgaXMgYFwiVFJVRVwiYC4gfFxuICAgKlxuICAgKiAjIyBwZ19jcm9uIHJlcXVpcmVtZW50XG4gICAqXG4gICAqIFdoZW4gYHVzZV9xdWV1ZWAgaXMgYFwiVFJVRVwiYCwgdGhlIGJvb3RzdHJhcHBlciBpbnN0YWxscyB0aGUgYHBnX2Nyb25gXG4gICAqIGV4dGVuc2lvbiBhbmQgc2NoZWR1bGVzIGEgam9iIHRvIHBlcmlvZGljYWxseSBkcmFpbiB0aGUgcXVldWUuXG4gICAqIGBwZ19jcm9uYCBtdXN0IGJlIHByZXNlbnQgaW4gYHNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc2AgKipiZWZvcmUqKlxuICAgKiBkZXBsb3ltZW50IG9yIHRoZSBib290c3RyYXAgd2lsbCBmYWlsLiBBZGQgaXQgdmlhIGBwcm9wcy5wYXJhbWV0ZXJzYDpcbiAgICpcbiAgICogYGBgXG4gICAqIHBhcmFtZXRlcnM6IHsgc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVzOiBcInBnX2Nyb25cIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICogICB1cGRhdGVfY29sbGVjdGlvbl9leHRlbnQ6IFwiVFJVRVwiLFxuICAgKiAgIHVzZV9xdWV1ZTogXCJUUlVFXCIsXG4gICAqICAgcGdfY3Jvbl9zY2hlZHVsZTogXCIqXFwvMTAgKiAqICogKlwiLFxuICAgKiB9XG4gICAqL1xuICByZWFkb25seSBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICB9O1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBwZXJMYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xuXG4gIC8qKlxuICAgKiBGb3JjZSByZWRlcGxveW1lbnQgb2YgdGhlIGRhdGFiYXNlIGJvb3RzdHJhcHBlciBMYW1iZGEgb24gZXZlcnkgZGVwbG95LlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgYXBwbGljYWJsZSB3aGVuIHVzaW5nIGN1c3RvbSBMYW1iZGEgY29kZSB2aWEgYm9vdHN0cmFwcGVyTGFtYmRhRnVuY3Rpb25PcHRpb25zLlxuICAgKiBXaGVuIGVuYWJsZWQsIGEgdGltZXN0YW1wIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGN1c3RvbSByZXNvdXJjZSBwcm9wZXJ0aWVzIHRvIGVuc3VyZVxuICAgKiB0aGUgYm9vdHN0cmFwcGVyIExhbWJkYSBydW5zIG9uIGV2ZXJ5IGRlcGxveW1lbnQuXG4gICAqXG4gICAqIEZvciB0aGUgZGVmYXVsdCBEb2NrZXItYmFzZWQgYm9vdHN0cmFwIGNvZGUsIHRoaXMgZmxhZyBpcyBpZ25vcmVkIGFuZCBhIGNvbnRlbnQtYmFzZWRcbiAgICogaGFzaCBpcyB1c2VkIGluc3RlYWQgKHdoaWNoIGF1dG9tYXRpY2FsbHkgdHJpZ2dlcnMgcmVkZXBsb3ltZW50IHdoZW4gY29kZSBjaGFuZ2VzKS5cbiAgICpcbiAgICogKipBbHRlcm5hdGl2ZSBhcHByb2FjaDoqKiBJbnN0ZWFkIG9mIHVzaW5nIHRoaXMgZmxhZywgeW91IGNhbiB0cmlnZ2VyIGJvb3RzdHJhcCBieVxuICAgKiBtb2RpZnlpbmcgYW55IHByb3BlcnR5IGluIGBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXNgIChlLmcuLCBpbmNyZW1lbnQgYHBnc3RhY192ZXJzaW9uYFxuICAgKiBvciBhZGQgYSBgcmVidWlsZF90cmlnZ2VyYCBwcm9wZXJ0eSB3aXRoIGEgbmV3IHZhbHVlKS4gVGhpcyBnaXZlcyB5b3UgbW9yZSBncmFudWxhclxuICAgKiBjb250cm9sIG92ZXIgd2hlbiByZWRlcGxveW1lbnQgaGFwcGVucy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGZvcmNlQm9vdHN0cmFwPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZVBhcmFtZXRlcnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBMRUFTVCh7REJJbnN0YW5jZUNsYXNzTWVtb3J5Lzk1MzEzOTJ9LCA1MDAwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM6IHN0cmluZztcblxuICAvKipcbiAgICogTm90ZTogVGhpcyB2YWx1ZSBpcyBtZWFzdXJlZCBpbiA4S0IgYmxvY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAne0RCSW5zdGFuY2VDbGFzc01lbW9yeS8zMjc2OH0nIDI1JSBvZiBpbnN0YW5jZSBtZW1vcnksIGllIGB7KERCSW5zdGFuY2VDbGFzc01lbW9yeS8oMTAyNCo4KSkgKiAwLjI1fWBcbiAgICovXG4gIHJlYWRvbmx5IHNoYXJlZEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSA3NSUgb2YgaW5zdGFuY2UgbWVtb3J5XG4gICAqL1xuICByZWFkb25seSBlZmZlY3RpdmVDYWNoZVNpemU6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBzaGFyZWQgYnVmZmVycyBkaXZpZGVkIGJ5IG1heCBjb25uZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya01lbTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIDI1JSBvZiBzaGFyZWQgYnVmZmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRlbmFuY2VXb3JrTWVtOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IDEwMjRcbiAgICovXG4gIHJlYWRvbmx5IG1heExvY2tzUGVyVHJhbnNhY3Rpb246IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMTMxMTcyICgxMjggKiAxMDI0KVxuICAgKi9cbiAgcmVhZG9ubHkgdGVtcEJ1ZmZlcnM6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMVxuICAgKi9cbiAgcmVhZG9ubHkgc2VxUGFnZUNvc3Q6IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgMS4xXG4gICAqL1xuICByZWFkb25seSByYW5kb21QYWdlQ29zdDogc3RyaW5nO1xufVxuIl19
@@ -4,6 +4,10 @@ import { CustomLambdaFunctionProps } from "../utils";
4
4
  export declare class StacIngestor extends Construct {
5
5
  table: dynamodb.Table;
6
6
  handlerRole: iam.Role;
7
+ /**
8
+ * URL of the Ingestor API.
9
+ */
10
+ readonly url: string;
7
11
  constructor(scope: Construct, id: string, props: StacIngestorProps);
8
12
  private buildTable;
9
13
  private buildApiLambda;
@@ -38,13 +38,18 @@ class StacIngestor extends constructs_1.Construct {
38
38
  lambdaFunctionOptions: props.apiLambdaFunctionOptions,
39
39
  pgstacVersion: props.pgstacVersion,
40
40
  });
41
- this.buildApiEndpoint({
41
+ const api = this.buildApiEndpoint({
42
42
  handler,
43
43
  stage: props.stage,
44
44
  endpointConfiguration: props.apiEndpointConfiguration,
45
45
  policy: props.apiPolicy,
46
46
  ingestorDomainNameOptions: props.ingestorDomainNameOptions,
47
47
  });
48
+ this.url = api.url;
49
+ new aws_cdk_lib_1.CfnOutput(this, "ingestor-api-output", {
50
+ exportName: `${aws_cdk_lib_1.Stack.of(this).stackName}-ingestor-url`,
51
+ value: this.url,
52
+ });
48
53
  this.buildIngestor({
49
54
  table: this.table,
50
55
  env: env,
@@ -181,5 +186,5 @@ class StacIngestor extends constructs_1.Construct {
181
186
  }
182
187
  exports.StacIngestor = StacIngestor;
183
188
  _a = JSII_RTTI_SYMBOL_1;
184
- StacIngestor[_a] = { fqn: "eoapi-cdk.StacIngestor", version: "11.4.0" };
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQWFxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBSWtCO0FBRWxCLE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBSXpDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixNQUFNLEdBQUcsR0FBMkI7WUFDbEMsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUNwQyxTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzVCLHdCQUF3QixFQUFFLEdBQUc7WUFDN0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3ZCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTztZQUM5QyxHQUFHLEtBQUssQ0FBQyxNQUFNO1NBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3RELFdBQVcsRUFDVCxtSUFBbUk7WUFDckksU0FBUyxFQUFFLElBQUkscUJBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUMzRCxlQUFlLEVBQUU7Z0JBQ2YscUJBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLDBDQUEwQyxDQUMzQztnQkFDRCxxQkFBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsOENBQThDLENBQy9DO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNq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O2dCQUN6QyxDQUFDLENBQUM7b0JBQ0UsVUFBVSxFQUFFLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVO29CQUN0RCxXQUFXLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLFdBQVc7aUJBQ3pEO2dCQUNILENBQUMsQ0FBQyxTQUFTO1NBQ2QsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLG9CQUFvQixDQUFDLEtBSTVCO1FBQ0MsTUFBTSxrQkFBa0IsR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEQsT0FBTyxJQUFJLHFCQUFHLENBQUMsZUFBZSxDQUM1QixJQUFJLEVBQ0osR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFlBQVksRUFDM0M7WUFDRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsYUFBYSxFQUFFLElBQUksa0JBQWtCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNyRCxXQUFXLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDekIsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7QUFqUUgsb0NBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXdzX2FwaWdhdGV3YXkgYXMgYXBpZ2F0ZXdheSxcbiAgYXdzX2xvZ3MsXG4gIER1cmF0aW9uLFxuICBhd3NfZHluYW1vZGIgYXMgZHluYW1vZGIsXG4gIGF3c19lYzIgYXMgZWMyLFxuICBhd3NfbGFtYmRhX2V2ZW50X3NvdXJjZXMgYXMgZXZlbnRzLFxuICBhd3NfaWFtIGFzIGlhbSxcbiAgYXdzX2xhbWJkYSBhcyBsYW1iZGEsXG4gIFJlbW92YWxQb2xpY3ksXG4gIGF3c19zZWNyZXRzbWFuYWdlciBhcyBzZWNyZXRzbWFuYWdlcixcbiAgYXdzX3NzbSBhcyBzc20sXG4gIFN0YWNrLFxufSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzLFxuICBERUZBVUxUX1BHU1RBQ19WRVJTSU9OLFxuICByZXNvbHZlTGFtYmRhQ29kZSxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBTdGFjSW5nZXN0b3IgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICB0YWJsZTogZHluYW1vZGIuVGFibGU7XG4gIHB1YmxpYyBoYW5kbGVyUm9sZTogaWFtLlJvbGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWNJbmdlc3RvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudGFibGUgPSB0aGlzLmJ1aWxkVGFibGUoKTtcblxuICAgIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIERZTkFNT0RCX1RBQkxFOiB0aGlzLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIFJPT1RfUEFUSDogYC8ke3Byb3BzLnN0YWdlfWAsXG4gICAgICBOT19QWURBTlRJQ19TU01fU0VUVElOR1M6IFwiMVwiLFxuICAgICAgU1RBQ19VUkw6IHByb3BzLnN0YWNVcmwsXG4gICAgICBEQVRBX0FDQ0VTU19ST0xFOiBwcm9wcy5kYXRhQWNjZXNzUm9sZS5yb2xlQXJuLFxuICAgICAgLi4ucHJvcHMuYXBpRW52LFxuICAgIH07XG5cbiAgICB0aGlzLmhhbmRsZXJSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiZXhlY3V0aW9uLXJvbGVcIiwge1xuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiUm9sZSB1c2VkIGJ5IFNUQUMgSW5nZXN0b3IuIE1hbnVhbGx5IGRlZmluZWQgc28gdGhhdCB3ZSBjYW4gY2hvb3NlIGEgbmFtZSB0aGF0IGlzIHN1cHBvcnRlZCBieSB0aGUgZGF0YSBhY2Nlc3Mgcm9sZXMgdHJ1c3QgcG9saWN5XCIsXG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbChcImxhbWJkYS5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBbXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIlxuICAgICAgICApLFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXG4gICAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZVwiXG4gICAgICAgICksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuYnVpbGRBcGlMYW1iZGEoe1xuICAgICAgdGFibGU6IHRoaXMudGFibGUsXG4gICAgICBlbnYsXG4gICAgICBkYXRhQWNjZXNzUm9sZTogcHJvcHMuZGF0YUFjY2Vzc1JvbGUsXG4gICAgICBzdGFnZTogcHJvcHMuc3RhZ2UsXG4gICAgICBkYlNlY3JldDogcHJvcHMuc3RhY0RiU2VjcmV0LFxuICAgICAgZGJWcGM6IHByb3BzLnZwYyxcbiAgICAgIGRiU2VjdXJpdHlHcm91cDogcHJvcHMuc3RhY0RiU2VjdXJpdHlHcm91cCxcbiAgICAgIHN1Ym5ldFNlbGVjdGlvbjogcHJvcHMuc3VibmV0U2VsZWN0aW9uLFxuICAgICAgbGFtYmRhRnVuY3Rpb25PcHRpb25zOiBwcm9wcy5hcGlMYW1iZGFGdW5jdGlvbk9wdGlvbnMsXG4gICAgICBwZ3N0YWNWZXJzaW9uOiBwcm9wcy5wZ3N0YWNWZXJzaW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZEFwaUVuZHBvaW50KHtcbiAgICAgIGhhbmRsZXIsXG4gICAgICBzdGFnZTogcHJvcHMuc3RhZ2UsXG4gICAgICBlbmRwb2ludENvbmZpZ3VyYXRpb246IHByb3BzLmFwaUVuZHBvaW50Q29uZmlndXJhdGlvbixcbiAgICAgIHBvbGljeTogcHJvcHMuYXBpUG9saWN5LFxuICAgICAgaW5nZXN0b3JEb21haW5OYW1lT3B0aW9uczogcHJvcHMuaW5nZXN0b3JEb21haW5OYW1lT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVpbGRJbmdlc3Rvcih7XG4gICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgIGVudjogZW52LFxuICAgICAgZGJTZWNyZXQ6IHByb3BzLnN0YWNEYlNlY3JldCxcbiAgICAgIGRiVnBjOiBwcm9wcy52cGMsXG4gICAgICBkYlNlY3VyaXR5R3JvdXA6IHByb3BzLnN0YWNEYlNlY3VyaXR5R3JvdXAsXG4gICAgICBzdWJuZXRTZWxlY3Rpb246IHByb3BzLnN1Ym5ldFNlbGVjdGlvbixcbiAgICAgIGxhbWJkYUZ1bmN0aW9uT3B0aW9uczogcHJvcHMuaW5nZXN0b3JMYW1iZGFGdW5jdGlvbk9wdGlvbnMsXG4gICAgICBwZ3N0YWNWZXJzaW9uOiBwcm9wcy5wZ3N0YWNWZXJzaW9uLFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3RlclNzbVBhcmFtZXRlcih7XG4gICAgICBuYW1lOiBcImR5bmFtb2RiX3RhYmxlXCIsXG4gICAgICB2YWx1ZTogdGhpcy50YWJsZS50YWJsZU5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogXCJOYW1lIG9mIHRhYmxlIHVzZWQgdG8gc3RvcmUgaW5nZXN0aW9uc1wiLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFRhYmxlKCk6IGR5bmFtb2RiLlRhYmxlIHtcbiAgICBjb25zdCB0YWJsZSA9IG5ldyBkeW5hbW9kYi5UYWJsZSh0aGlzLCBcImluZ2VzdGlvbnMtdGFibGVcIiwge1xuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwiY3JlYXRlZF9ieVwiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcImlkXCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBiaWxsaW5nTW9kZTogZHluYW1vZGIuQmlsbGluZ01vZGUuUEFZX1BFUl9SRVFVRVNULFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgc3RyZWFtOiBkeW5hbW9kYi5TdHJlYW1WaWV3VHlwZS5ORVdfSU1BR0UsXG4gICAgfSk7XG5cbiAgICB0YWJsZS5hZGRHbG9iYWxTZWNvbmRhcnlJbmRleCh7XG4gICAgICBpbmRleE5hbWU6IFwic3RhdHVzXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJzdGF0dXNcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJjcmVhdGVkX2F0XCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFibGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXBpTGFtYmRhKHByb3BzOiB7XG4gICAgdGFibGU6IGR5bmFtb2RiLklUYWJsZTtcbiAgICBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgZGF0YUFjY2Vzc1JvbGU6IGlhbS5JUm9sZTtcbiAgICBzdGFnZTogc3RyaW5nO1xuICAgIGRiU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICAgIGRiVnBjOiB1bmRlZmluZWQgfCBlYzIuSVZwYztcbiAgICBkYlNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgICBzdWJuZXRTZWxlY3Rpb246IHVuZGVmaW5lZCB8IGVjMi5TdWJuZXRTZWxlY3Rpb247XG4gICAgbGFtYmRhRnVuY3Rpb25PcHRpb25zPzogQ3VzdG9tTGFtYmRhRnVuY3Rpb25Qcm9wcztcbiAgICBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xuICB9KTogbGFtYmRhLkZ1bmN0aW9uIHtcbiAgICBjb25zdCB7IGNvZGU6IHVzZXJDb2RlLCAuLi5vdGhlckxhbWJkYU9wdGlvbnMgfSA9XG4gICAgICBwcm9wcy5sYW1iZGFGdW5jdGlvbk9wdGlvbnMgfHwge307XG5cbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcImFwaS1oYW5kbGVyXCIsIHtcbiAgICAgIC8vIGRlZmF1bHRzXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMixcbiAgICAgIGhhbmRsZXI6IFwic3JjLmhhbmRsZXIuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgY29kZTogcmVzb2x2ZUxhbWJkYUNvZGUodXNlckNvZGUsIF9fZGlybmFtZSwge1xuICAgICAgICBmaWxlOiBcInJ1bnRpbWUvRG9ja2VyZmlsZVwiLFxuICAgICAgICBidWlsZEFyZ3M6IHtcbiAgICAgICAgICBQWVRIT05fVkVSU0lPTjogXCIzLjEyXCIsXG4gICAgICAgICAgUEdTVEFDX1ZFUlNJT046IHByb3BzLnBnc3RhY1ZlcnNpb24gfHwgREVGQVVMVF9QR1NUQUNfVkVSU0lPTixcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgYWxsb3dQdWJsaWNTdWJuZXQ6IHRydWUsXG4gICAgICB2cGM6IHByb3BzLmRiVnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMuc3VibmV0U2VsZWN0aW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHsgREJfU0VDUkVUX0FSTjogcHJvcHMuZGJTZWNyZXQuc2VjcmV0QXJuLCAuLi5wcm9wcy5lbnYgfSxcbiAgICAgIHJvbGU6IHRoaXMuaGFuZGxlclJvbGUsXG4gICAgICAvLyBvdmVyd3JpdGVzIGRlZmF1bHRzIHdpdGggdXNlci1wcm92aWRlZCBjb25maWd1cmFibGUgcHJvcGVydGllc1xuICAgICAgLi4ub3RoZXJMYW1iZGFPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gQWxsb3cgaGFuZGxlciB0byByZWFkIERCIHNlY3JldFxuICAgIHByb3BzLmRiU2VjcmV0LmdyYW50UmVhZChoYW5kbGVyKTtcblxuICAgIC8vIEFsbG93IGhhbmRsZXIgdG8gY29ubmVjdCB0byBEQlxuXG4gICAgaWYgKHByb3BzLmRiVnBjKSB7XG4gICAgICBwcm9wcy5kYlNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIGhhbmRsZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICAgIGVjMi5Qb3J0LnRjcCg1NDMyKSxcbiAgICAgICAgXCJBbGxvdyBjb25uZWN0aW9ucyBmcm9tIFNUQUMgSW5nZXN0b3JcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm9wcy50YWJsZS5ncmFudFJlYWRXcml0ZURhdGEoaGFuZGxlcik7XG5cbiAgICByZXR1cm4gaGFuZGxlcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRJbmdlc3Rvcihwcm9wczoge1xuICAgIHRhYmxlOiBkeW5hbW9kYi5JVGFibGU7XG4gICAgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGRiU2VjcmV0OiBzZWNyZXRzbWFuYWdlci5JU2VjcmV0O1xuICAgIGRiVnBjOiB1bmRlZmluZWQgfCBlYzIuSVZwYztcbiAgICBkYlNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cDtcbiAgICBzdWJuZXRTZWxlY3Rpb246IHVuZGVmaW5lZCB8IGVjMi5TdWJuZXRTZWxlY3Rpb247XG4gICAgbGFtYmRhRnVuY3Rpb25PcHRpb25zPzogQ3VzdG9tTGFtYmRhRnVuY3Rpb25Qcm9wcztcbiAgICBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xuICB9KTogbGFtYmRhLkZ1bmN0aW9uIHtcbiAgICBjb25zdCB7IGNvZGU6IHVzZXJDb2RlLCAuLi5vdGhlckxhbWJkYU9wdGlvbnMgfSA9XG4gICAgICBwcm9wcy5sYW1iZGFGdW5jdGlvbk9wdGlvbnMgfHwge307XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgXCJzdGFjLWluZ2VzdG9yXCIsIHtcbiAgICAgIC8vIGRlZmF1bHRzXG4gICAgICBydW50aW1lOiBsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMixcbiAgICAgIGhhbmRsZXI6IFwic3JjLmluZ2VzdG9yLmhhbmRsZXJcIixcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICBsb2dSZXRlbnRpb246IGF3c19sb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDE4MCksXG4gICAgICBjb2RlOiByZXNvbHZlTGFtYmRhQ29kZSh1c2VyQ29kZSwgX19kaXJuYW1lLCB7XG4gICAgICAgIGZpbGU6IFwicnVudGltZS9Eb2NrZXJmaWxlXCIsXG4gICAgICAgIGJ1aWxkQXJnczoge1xuICAgICAgICAgIFBZVEhPTl9WRVJTSU9OOiBcIjMuMTJcIixcbiAgICAgICAgICBQR1NUQUNfVkVSU0lPTjogcHJvcHMucGdzdGFjVmVyc2lvbiB8fCBERUZBVUxUX1BHU1RBQ19WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICB2cGM6IHByb3BzLmRiVnBjLFxuICAgICAgdnBjU3VibmV0czogcHJvcHMuc3VibmV0U2VsZWN0aW9uLFxuICAgICAgYWxsb3dQdWJsaWNTdWJuZXQ6IHRydWUsXG4gICAgICBlbnZpcm9ubWVudDogeyBEQl9TRUNSRVRfQVJOOiBwcm9wcy5kYlNlY3JldC5zZWNyZXRBcm4sIC4uLnByb3BzLmVudiB9LFxuICAgICAgcm9sZTogdGhpcy5oYW5kbGVyUm9sZSxcbiAgICAgIC8vIG92ZXJ3cml0ZXMgZGVmYXVsdHMgd2l0aCB1c2VyLXByb3ZpZGVkIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICAuLi5vdGhlckxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBoYW5kbGVyIHRvIHJlYWQgREIgc2VjcmV0XG4gICAgcHJvcHMuZGJTZWNyZXQuZ3JhbnRSZWFkKGhhbmRsZXIpO1xuXG4gICAgLy8gQWxsb3cgaGFuZGxlciB0byBjb25uZWN0IHRvIERCXG4gICAgaWYgKHByb3BzLmRiVnBjKSB7XG4gICAgICBwcm9wcy5kYlNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAgIGhhbmRsZXIuY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHNbMF0sXG4gICAgICAgIGVjMi5Qb3J0LnRjcCg1NDMyKSxcbiAgICAgICAgXCJBbGxvdyBjb25uZWN0aW9ucyBmcm9tIFNUQUMgSW5nZXN0b3JcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBoYW5kbGVyIHRvIHdyaXRlIHJlc3VsdHMgYmFjayB0byBEQlxuICAgIHByb3BzLnRhYmxlLmdyYW50V3JpdGVEYXRhKGhhbmRsZXIpO1xuXG4gICAgLy8gVHJpZ2dlciBoYW5kbGVyIGZyb20gd3JpdGVzIHRvIER5bmFtb0RCIHRhYmxlXG4gICAgaGFuZGxlci5hZGRFdmVudFNvdXJjZShcbiAgICAgIG5ldyBldmVudHMuRHluYW1vRXZlbnRTb3VyY2UocHJvcHMudGFibGUsIHtcbiAgICAgICAgLy8gUmVhZCB3aGVuIGJhdGNoZXMgcmVhY2ggc2l6ZS4uLlxuICAgICAgICBiYXRjaFNpemU6IDEwMDAsXG4gICAgICAgIC8vIC4uLiBvciB3aGVuIHdpbmRvdyBpcyByZWFjaGVkLlxuICAgICAgICBtYXhCYXRjaGluZ1dpbmRvdzogRHVyYXRpb24uc2Vjb25kcygxMCksXG4gICAgICAgIC8vIFJlYWQgb2xkZXN0IGRhdGEgZmlyc3QuXG4gICAgICAgIHN0YXJ0aW5nUG9zaXRpb246IGxhbWJkYS5TdGFydGluZ1Bvc2l0aW9uLlRSSU1fSE9SSVpPTixcbiAgICAgICAgcmV0cnlBdHRlbXB0czogMSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFwaUVuZHBvaW50KHByb3BzOiB7XG4gICAgaGFuZGxlcjogbGFtYmRhLklGdW5jdGlvbjtcbiAgICBzdGFnZTogc3RyaW5nO1xuICAgIHBvbGljeT86IGlhbS5Qb2xpY3lEb2N1bWVudDtcbiAgICBlbmRwb2ludENvbmZpZ3VyYXRpb24/OiBhcGlnYXRld2F5LkVuZHBvaW50Q29uZmlndXJhdGlvbjtcbiAgICBpbmdlc3RvckRvbWFpbk5hbWVPcHRpb25zPzogYXBpZ2F0ZXdheS5Eb21haW5OYW1lT3B0aW9ucztcbiAgfSk6IGFwaWdhdGV3YXkuTGFtYmRhUmVzdEFwaSB7XG4gICAgcmV0dXJuIG5ldyBhcGlnYXRld2F5LkxhbWJkYVJlc3RBcGkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS1pbmdlc3Rvci1hcGlgLFxuICAgICAge1xuICAgICAgICBoYW5kbGVyOiBwcm9wcy5oYW5kbGVyLFxuICAgICAgICBwcm94eTogdHJ1ZSxcblxuICAgICAgICBjbG91ZFdhdGNoUm9sZTogdHJ1ZSxcbiAgICAgICAgZGVwbG95T3B0aW9uczogeyBzdGFnZU5hbWU6IHByb3BzLnN0YWdlIH0sXG4gICAgICAgIGVuZHBvaW50RXhwb3J0TmFtZTogYCR7U3RhY2sub2YodGhpcyl9LWluZ2VzdG9yLWFwaWAsXG5cbiAgICAgICAgZW5kcG9pbnRDb25maWd1cmF0aW9uOiBwcm9wcy5lbmRwb2ludENvbmZpZ3VyYXRpb24sXG4gICAgICAgIHBvbGljeTogcHJvcHMucG9saWN5LFxuXG4gICAgICAgIGRvbWFpbk5hbWU6IHByb3BzLmluZ2VzdG9yRG9tYWluTmFtZU9wdGlvbnNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuaW5nZXN0b3JEb21haW5OYW1lT3B0aW9ucy5kb21haW5OYW1lLFxuICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZTogcHJvcHMuaW5nZXN0b3JEb21haW5OYW1lT3B0aW9ucy5jZXJ0aWZpY2F0ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlclNzbVBhcmFtZXRlcihwcm9wczoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIH0pOiBzc20uSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZXNwYWNlID0gU3RhY2sub2YodGhpcykuc3RhY2tOYW1lO1xuICAgIHJldHVybiBuZXcgc3NtLlN0cmluZ1BhcmFtZXRlcihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5uYW1lLnJlcGxhY2UoXCJfXCIsIFwiLVwiKX0tcGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBgLyR7cGFyYW1ldGVyTmFtZXNwYWNlfS8ke3Byb3BzLm5hbWV9YCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGFjSW5nZXN0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBBUk4gb2YgQVdTIFJvbGUgdXNlZCB0byB2YWxpZGF0ZSBhY2Nlc3MgdG8gUzMgZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YUFjY2Vzc1JvbGU6IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVVJMIG9mIFNUQUMgQVBJXG4gICAqL1xuICByZWFkb25seSBzdGFjVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0YWdlIG9mIGRlcGxveW1lbnQgKGUuZy4gYGRldmAsIGBwcm9kYClcbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY3JldCBjb250YWluaW5nIHBnU1RBQyBEQiBjb25uZWN0aW9uIGluZm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBzdGFjRGJTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQ7XG5cbiAgLyoqXG4gICAqIFZQQyBydW5uaW5nIHBnU1RBQyBEQlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IEdyb3VwIHVzZWQgYnkgcGdTVEFDIERCXG4gICAqL1xuICByZWFkb25seSBzdGFjRGJTZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG5cbiAgLyoqXG4gICAqIFN1Ym5ldCBpbnRvIHdoaWNoIHRoZSBsYW1iZGEgc2hvdWxkIGJlIGRlcGxveWVkIGlmIHVzaW5nIGEgVlBDXG4gICAqL1xuICByZWFkb25seSBzdWJuZXRTZWxlY3Rpb24/OiBlYzIuU3VibmV0U2VsZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgc2VudCB0byBMYW1iZGEuXG4gICAqL1xuICByZWFkb25seSBhcGlFbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBBUEkgRW5kcG9pbnQgQ29uZmlndXJhdGlvbiwgdXNlZnVsIGZvciBjcmVhdGluZyBwcml2YXRlIEFQSXMuXG4gICAqL1xuICByZWFkb25seSBhcGlFbmRwb2ludENvbmZpZ3VyYXRpb24/OiBhcGlnYXRld2F5LkVuZHBvaW50Q29uZmlndXJhdGlvbjtcblxuICAvKipcbiAgICogQVBJIFBvbGljeSBEb2N1bWVudCwgdXNlZnVsIGZvciBjcmVhdGluZyBwcml2YXRlIEFQSXMuXG4gICAqL1xuICByZWFkb25seSBhcGlQb2xpY3k/OiBpYW0uUG9saWN5RG9jdW1lbnQ7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBEb21haW4gTmFtZSBPcHRpb25zIGZvciBJbmdlc3RvciBBUElcbiAgICovXG4gIHJlYWRvbmx5IGluZ2VzdG9yRG9tYWluTmFtZU9wdGlvbnM/OiBhcGlnYXRld2F5LkRvbWFpbk5hbWVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHNldHRpbmdzIGFyZSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBhcGlMYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsYW1iZGEgZnVuY3Rpb24gcHJvcGVydGllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHNldHRpbmdzIGFyZSBkZWZpbmVkIGluIHRoZSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBpbmdlc3RvckxhbWJkYUZ1bmN0aW9uT3B0aW9ucz86IEN1c3RvbUxhbWJkYUZ1bmN0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIHBnc3RhYyB2ZXJzaW9uIC0gbXVzdCBtYXRjaCB0aGUgdmVyc2lvbiBpbnN0YWxsZWQgb24gdGhlIHBnc3RhYyBkYXRhYmFzZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnN0cnVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcGdzdGFjVmVyc2lvbj86IHN0cmluZztcbn1cbiJdfQ==
189
+ StacIngestor[_a] = { fqn: "eoapi-cdk.StacIngestor", version: "11.5.0" };
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQWNxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsb0NBSWtCO0FBRWxCLE1BQWEsWUFBYSxTQUFRLHNCQUFTO0lBU3pDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUUvQixNQUFNLEdBQUcsR0FBMkI7WUFDbEMsY0FBYyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUNwQyxTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQzVCLHdCQUF3QixFQUFFLEdBQUc7WUFDN0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3ZCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTztZQUM5QyxHQUFHLEtBQUssQ0FBQyxNQUFNO1NBQ2hCLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUkscUJBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ3RELFdBQVcsRUFDVCxtSUFBbUk7WUFDckksU0FBUyxFQUFFLElBQUkscUJBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUMzRCxlQUFlLEVBQUU7Z0JBQ2YscUJBQUcsQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQ3hDLDBDQUEwQyxDQUMzQztnQkFDRCxxQkFBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FDeEMsOENBQThDLENBQy9DO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1lBQ2xDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNq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RUFBRSxJQUFJO1lBQ3BCLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ3pDLGtCQUFrQixFQUFFLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWU7WUFFcEQscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtZQUNsRCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFFcEIsVUFBVSxFQUFFLEtBQUssQ0FBQyx5QkFBeUI7Z0JBQ3pDLENBQUMsQ0FBQztvQkFDRSxVQUFVLEVBQUUsS0FBSyxDQUFDLHlCQUF5QixDQUFDLFVBQVU7b0JBQ3RELFdBQVcsRUFBRSxLQUFLLENBQUMseUJBQXlCLENBQUMsV0FBVztpQkFDekQ7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQUMsS0FJNUI7UUFDQyxNQUFNLGtCQUFrQixHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNwRCxPQUFPLElBQUkscUJBQUcsQ0FBQyxlQUFlLENBQzVCLElBQUksRUFDSixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsWUFBWSxFQUMzQztZQUNFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixhQUFhLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ3JELFdBQVcsRUFBRSxLQUFLLENBQUMsS0FBSztTQUN6QixDQUNGLENBQUM7SUFDSixDQUFDOztBQTdRSCxvQ0E4UUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhd3NfYXBpZ2F0ZXdheSBhcyBhcGlnYXRld2F5LFxuICBhd3NfbG9ncyxcbiAgQ2ZuT3V0cHV0LFxuICBEdXJhdGlvbixcbiAgYXdzX2R5bmFtb2RiIGFzIGR5bmFtb2RiLFxuICBhd3NfZWMyIGFzIGVjMixcbiAgYXdzX2xhbWJkYV9ldmVudF9zb3VyY2VzIGFzIGV2ZW50cyxcbiAgYXdzX2lhbSBhcyBpYW0sXG4gIGF3c19sYW1iZGEgYXMgbGFtYmRhLFxuICBSZW1vdmFsUG9saWN5LFxuICBhd3Nfc2VjcmV0c21hbmFnZXIgYXMgc2VjcmV0c21hbmFnZXIsXG4gIGF3c19zc20gYXMgc3NtLFxuICBTdGFjayxcbn0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQ3VzdG9tTGFtYmRhRnVuY3Rpb25Qcm9wcyxcbiAgREVGQVVMVF9QR1NUQUNfVkVSU0lPTixcbiAgcmVzb2x2ZUxhbWJkYUNvZGUsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgU3RhY0luZ2VzdG9yIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgdGFibGU6IGR5bmFtb2RiLlRhYmxlO1xuICBwdWJsaWMgaGFuZGxlclJvbGU6IGlhbS5Sb2xlO1xuXG4gIC8qKlxuICAgKiBVUkwgb2YgdGhlIEluZ2VzdG9yIEFQSS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhY0luZ2VzdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy50YWJsZSA9IHRoaXMuYnVpbGRUYWJsZSgpO1xuXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgRFlOQU1PREJfVEFCTEU6IHRoaXMudGFibGUudGFibGVOYW1lLFxuICAgICAgUk9PVF9QQVRIOiBgLyR7cHJvcHMuc3RhZ2V9YCxcbiAgICAgIE5PX1BZREFOVElDX1NTTV9TRVRUSU5HUzogXCIxXCIsXG4gICAgICBTVEFDX1VSTDogcHJvcHMuc3RhY1VybCxcbiAgICAgIERBVEFfQUNDRVNTX1JPTEU6IHByb3BzLmRhdGFBY2Nlc3NSb2xlLnJvbGVBcm4sXG4gICAgICAuLi5wcm9wcy5hcGlFbnYsXG4gICAgfTtcblxuICAgIHRoaXMuaGFuZGxlclJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJleGVjdXRpb24tcm9sZVwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJSb2xlIHVzZWQgYnkgU1RBQyBJbmdlc3Rvci4gTWFudWFsbHkgZGVmaW5lZCBzbyB0aGF0IHdlIGNhbiBjaG9vc2UgYSBuYW1lIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBkYXRhIGFjY2VzcyByb2xlcyB0cnVzdCBwb2xpY3lcIixcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwibGFtYmRhLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiXG4gICAgICAgICksXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCJcbiAgICAgICAgKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5idWlsZEFwaUxhbWJkYSh7XG4gICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgIGVudixcbiAgICAgIGRhdGFBY2Nlc3NSb2xlOiBwcm9wcy5kYXRhQWNjZXNzUm9sZSxcbiAgICAgIHN0YWdlOiBwcm9wcy5zdGFnZSxcbiAgICAgIGRiU2VjcmV0OiBwcm9wcy5zdGFjRGJTZWNyZXQsXG4gICAgICBkYlZwYzogcHJvcHMudnBjLFxuICAgICAgZGJTZWN1cml0eUdyb3VwOiBwcm9wcy5zdGFjRGJTZWN1cml0eUdyb3VwLFxuICAgICAgc3VibmV0U2VsZWN0aW9uOiBwcm9wcy5zdWJuZXRTZWxlY3Rpb24sXG4gICAgICBsYW1iZGFGdW5jdGlvbk9wdGlvbnM6IHByb3BzLmFwaUxhbWJkYUZ1bmN0aW9uT3B0aW9ucyxcbiAgICAgIHBnc3RhY1ZlcnNpb246IHByb3BzLnBnc3RhY1ZlcnNpb24sXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcGkgPSB0aGlzLmJ1aWxkQXBpRW5kcG9pbnQoe1xuICAgICAgaGFuZGxlcixcbiAgICAgIHN0YWdlOiBwcm9wcy5zdGFnZSxcbiAgICAgIGVuZHBvaW50Q29uZmlndXJhdGlvbjogcHJvcHMuYXBpRW5kcG9pbnRDb25maWd1cmF0aW9uLFxuICAgICAgcG9saWN5OiBwcm9wcy5hcGlQb2xpY3ksXG4gICAgICBpbmdlc3RvckRvbWFpbk5hbWVPcHRpb25zOiBwcm9wcy5pbmdlc3RvckRvbWFpbk5hbWVPcHRpb25zLFxuICAgIH0pO1xuXG4gICAgdGhpcy51cmwgPSBhcGkudXJsO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBcImluZ2VzdG9yLWFwaS1vdXRwdXRcIiwge1xuICAgICAgZXhwb3J0TmFtZTogYCR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfS1pbmdlc3Rvci11cmxgLFxuICAgICAgdmFsdWU6IHRoaXMudXJsLFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZEluZ2VzdG9yKHtcbiAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxuICAgICAgZW52OiBlbnYsXG4gICAgICBkYlNlY3JldDogcHJvcHMuc3RhY0RiU2VjcmV0LFxuICAgICAgZGJWcGM6IHByb3BzLnZwYyxcbiAgICAgIGRiU2VjdXJpdHlHcm91cDogcHJvcHMuc3RhY0RiU2VjdXJpdHlHcm91cCxcbiAgICAgIHN1Ym5ldFNlbGVjdGlvbjogcHJvcHMuc3VibmV0U2VsZWN0aW9uLFxuICAgICAgbGFtYmRhRnVuY3Rpb25PcHRpb25zOiBwcm9wcy5pbmdlc3RvckxhbWJkYUZ1bmN0aW9uT3B0aW9ucyxcbiAgICAgIHBnc3RhY1ZlcnNpb246IHByb3BzLnBnc3RhY1ZlcnNpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3NtUGFyYW1ldGVyKHtcbiAgICAgIG5hbWU6IFwiZHluYW1vZGJfdGFibGVcIixcbiAgICAgIHZhbHVlOiB0aGlzLnRhYmxlLnRhYmxlTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5hbWUgb2YgdGFibGUgdXNlZCB0byBzdG9yZSBpbmdlc3Rpb25zXCIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVGFibGUoKTogZHluYW1vZGIuVGFibGUge1xuICAgIGNvbnN0IHRhYmxlID0gbmV3IGR5bmFtb2RiLlRhYmxlKHRoaXMsIFwiaW5nZXN0aW9ucy10YWJsZVwiLCB7XG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJjcmVhdGVkX2J5XCIsIHR5cGU6IGR5bmFtb2RiLkF0dHJpYnV0ZVR5cGUuU1RSSU5HIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwiaWRcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICAgIGJpbGxpbmdNb2RlOiBkeW5hbW9kYi5CaWxsaW5nTW9kZS5QQVlfUEVSX1JFUVVFU1QsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICBzdHJlYW06IGR5bmFtb2RiLlN0cmVhbVZpZXdUeXBlLk5FV19JTUFHRSxcbiAgICB9KTtcblxuICAgIHRhYmxlLmFkZEdsb2JhbFNlY29uZGFyeUluZGV4KHtcbiAgICAgIGluZGV4TmFtZTogXCJzdGF0dXNcIixcbiAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcInN0YXR1c1wiLCB0eXBlOiBkeW5hbW9kYi5BdHRyaWJ1dGVUeXBlLlNUUklORyB9LFxuICAgICAgc29ydEtleTogeyBuYW1lOiBcImNyZWF0ZWRfYXRcIiwgdHlwZTogZHluYW1vZGIuQXR0cmlidXRlVHlwZS5TVFJJTkcgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0YWJsZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBcGlMYW1iZGEocHJvcHM6IHtcbiAgICB0YWJsZTogZHluYW1vZGIuSVRhYmxlO1xuICAgIGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBkYXRhQWNjZXNzUm9sZTogaWFtLklSb2xlO1xuICAgIHN0YWdlOiBzdHJpbmc7XG4gICAgZGJTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQ7XG4gICAgZGJWcGM6IHVuZGVmaW5lZCB8IGVjMi5JVnBjO1xuICAgIGRiU2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICAgIHN1Ym5ldFNlbGVjdGlvbjogdW5kZWZpbmVkIHwgZWMyLlN1Ym5ldFNlbGVjdGlvbjtcbiAgICBsYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xuICAgIHBnc3RhY1ZlcnNpb24/OiBzdHJpbmc7XG4gIH0pOiBsYW1iZGEuRnVuY3Rpb24ge1xuICAgIGNvbnN0IHsgY29kZTogdXNlckNvZGUsIC4uLm90aGVyTGFtYmRhT3B0aW9ucyB9ID1cbiAgICAgIHByb3BzLmxhbWJkYUZ1bmN0aW9uT3B0aW9ucyB8fCB7fTtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsIFwiYXBpLWhhbmRsZXJcIiwge1xuICAgICAgLy8gZGVmYXVsdHNcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgaGFuZGxlcjogXCJzcmMuaGFuZGxlci5oYW5kbGVyXCIsXG4gICAgICBtZW1vcnlTaXplOiAyMDQ4LFxuICAgICAgbG9nUmV0ZW50aW9uOiBhd3NfbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgdGltZW91dDogRHVyYXRpb24uc2Vjb25kcygzMCksXG4gICAgICBjb2RlOiByZXNvbHZlTGFtYmRhQ29kZSh1c2VyQ29kZSwgX19kaXJuYW1lLCB7XG4gICAgICAgIGZpbGU6IFwicnVudGltZS9Eb2NrZXJmaWxlXCIsXG4gICAgICAgIGJ1aWxkQXJnczoge1xuICAgICAgICAgIFBZVEhPTl9WRVJTSU9OOiBcIjMuMTJcIixcbiAgICAgICAgICBQR1NUQUNfVkVSU0lPTjogcHJvcHMucGdzdGFjVmVyc2lvbiB8fCBERUZBVUxUX1BHU1RBQ19WRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBhbGxvd1B1YmxpY1N1Ym5ldDogdHJ1ZSxcbiAgICAgIHZwYzogcHJvcHMuZGJWcGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy5zdWJuZXRTZWxlY3Rpb24sXG4gICAgICBlbnZpcm9ubWVudDogeyBEQl9TRUNSRVRfQVJOOiBwcm9wcy5kYlNlY3JldC5zZWNyZXRBcm4sIC4uLnByb3BzLmVudiB9LFxuICAgICAgcm9sZTogdGhpcy5oYW5kbGVyUm9sZSxcbiAgICAgIC8vIG92ZXJ3cml0ZXMgZGVmYXVsdHMgd2l0aCB1c2VyLXByb3ZpZGVkIGNvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICAuLi5vdGhlckxhbWJkYU9wdGlvbnMsXG4gICAgfSk7XG5cbiAgICAvLyBBbGxvdyBoYW5kbGVyIHRvIHJlYWQgREIgc2VjcmV0XG4gICAgcHJvcHMuZGJTZWNyZXQuZ3JhbnRSZWFkKGhhbmRsZXIpO1xuXG4gICAgLy8gQWxsb3cgaGFuZGxlciB0byBjb25uZWN0IHRvIERCXG5cbiAgICBpZiAocHJvcHMuZGJWcGMpIHtcbiAgICAgIHByb3BzLmRiU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgaGFuZGxlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXSxcbiAgICAgICAgZWMyLlBvcnQudGNwKDU0MzIpLFxuICAgICAgICBcIkFsbG93IGNvbm5lY3Rpb25zIGZyb20gU1RBQyBJbmdlc3RvclwiXG4gICAgICApO1xuICAgIH1cblxuICAgIHByb3BzLnRhYmxlLmdyYW50UmVhZFdyaXRlRGF0YShoYW5kbGVyKTtcblxuICAgIHJldHVybiBoYW5kbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEluZ2VzdG9yKHByb3BzOiB7XG4gICAgdGFibGU6IGR5bmFtb2RiLklUYWJsZTtcbiAgICBlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgZGJTZWNyZXQ6IHNlY3JldHNtYW5hZ2VyLklTZWNyZXQ7XG4gICAgZGJWcGM6IHVuZGVmaW5lZCB8IGVjMi5JVnBjO1xuICAgIGRiU2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICAgIHN1Ym5ldFNlbGVjdGlvbjogdW5kZWZpbmVkIHwgZWMyLlN1Ym5ldFNlbGVjdGlvbjtcbiAgICBsYW1iZGFGdW5jdGlvbk9wdGlvbnM/OiBDdXN0b21MYW1iZGFGdW5jdGlvblByb3BzO1xuICAgIHBnc3RhY1ZlcnNpb24/OiBzdHJpbmc7XG4gIH0pOiBsYW1iZGEuRnVuY3Rpb24ge1xuICAgIGNvbnN0IHsgY29kZTogdXNlckNvZGUsIC4uLm90aGVyTGFtYmRhT3B0aW9ucyB9ID1cbiAgICAgIHByb3BzLmxhbWJkYUZ1bmN0aW9uT3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCBcInN0YWMtaW5nZXN0b3JcIiwge1xuICAgICAgLy8gZGVmYXVsdHNcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyLFxuICAgICAgaGFuZGxlcjogXCJzcmMuaW5nZXN0b3IuaGFuZGxlclwiLFxuICAgICAgbWVtb3J5U2l6ZTogMjA0OCxcbiAgICAgIGxvZ1JldGVudGlvbjogYXdzX2xvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMTgwKSxcbiAgICAgIGNvZGU6IHJlc29sdmVMYW1iZGFDb2RlKHVzZXJDb2RlLCBfX2Rpcm5hbWUsIHtcbiAgICAgICAgZmlsZTogXCJydW50aW1lL0RvY2tlcmZpbGVcIixcbiAgICAgICAgYnVpbGRBcmdzOiB7XG4gICAgICAgICAgUFlUSE9OX1ZFUlNJT046IFwiMy4xMlwiLFxuICAgICAgICAgIFBHU1RBQ19WRVJTSU9OOiBwcm9wcy5wZ3N0YWNWZXJzaW9uIHx8IERFRkFVTFRfUEdTVEFDX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIHZwYzogcHJvcHMuZGJWcGMsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy5zdWJuZXRTZWxlY3Rpb24sXG4gICAgICBhbGxvd1B1YmxpY1N1Ym5ldDogdHJ1ZSxcbiAgICAgIGVudmlyb25tZW50OiB7IERCX1NFQ1JFVF9BUk46IHByb3BzLmRiU2VjcmV0LnNlY3JldEFybiwgLi4ucHJvcHMuZW52IH0sXG4gICAgICByb2xlOiB0aGlzLmhhbmRsZXJSb2xlLFxuICAgICAgLy8gb3ZlcndyaXRlcyBkZWZhdWx0cyB3aXRoIHVzZXItcHJvdmlkZWQgY29uZmlndXJhYmxlIHByb3BlcnRpZXNcbiAgICAgIC4uLm90aGVyTGFtYmRhT3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIEFsbG93IGhhbmRsZXIgdG8gcmVhZCBEQiBzZWNyZXRcbiAgICBwcm9wcy5kYlNlY3JldC5ncmFudFJlYWQoaGFuZGxlcik7XG5cbiAgICAvLyBBbGxvdyBoYW5kbGVyIHRvIGNvbm5lY3QgdG8gREJcbiAgICBpZiAocHJvcHMuZGJWcGMpIHtcbiAgICAgIHByb3BzLmRiU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgaGFuZGxlci5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwc1swXSxcbiAgICAgICAgZWMyLlBvcnQudGNwKDU0MzIpLFxuICAgICAgICBcIkFsbG93IGNvbm5lY3Rpb25zIGZyb20gU1RBQyBJbmdlc3RvclwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEFsbG93IGhhbmRsZXIgdG8gd3JpdGUgcmVzdWx0cyBiYWNrIHRvIERCXG4gICAgcHJvcHMudGFibGUuZ3JhbnRXcml0ZURhdGEoaGFuZGxlcik7XG5cbiAgICAvLyBUcmlnZ2VyIGhhbmRsZXIgZnJvbSB3cml0ZXMgdG8gRHluYW1vREIgdGFibGVcbiAgICBoYW5kbGVyLmFkZEV2ZW50U291cmNlKFxuICAgICAgbmV3IGV2ZW50cy5EeW5hbW9FdmVudFNvdXJjZShwcm9wcy50YWJsZSwge1xuICAgICAgICAvLyBSZWFkIHdoZW4gYmF0Y2hlcyByZWFjaCBzaXplLi4uXG4gICAgICAgIGJhdGNoU2l6ZTogMTAwMCxcbiAgICAgICAgLy8gLi4uIG9yIHdoZW4gd2luZG93IGlzIHJlYWNoZWQuXG4gICAgICAgIG1heEJhdGNoaW5nV2luZG93OiBEdXJhdGlvbi5zZWNvbmRzKDEwKSxcbiAgICAgICAgLy8gUmVhZCBvbGRlc3QgZGF0YSBmaXJzdC5cbiAgICAgICAgc3RhcnRpbmdQb3NpdGlvbjogbGFtYmRhLlN0YXJ0aW5nUG9zaXRpb24uVFJJTV9IT1JJWk9OLFxuICAgICAgICByZXRyeUF0dGVtcHRzOiAxLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIGhhbmRsZXI7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXBpRW5kcG9pbnQocHJvcHM6IHtcbiAgICBoYW5kbGVyOiBsYW1iZGEuSUZ1bmN0aW9uO1xuICAgIHN0YWdlOiBzdHJpbmc7XG4gICAgcG9saWN5PzogaWFtLlBvbGljeURvY3VtZW50O1xuICAgIGVuZHBvaW50Q29uZmlndXJhdGlvbj86IGFwaWdhdGV3YXkuRW5kcG9pbnRDb25maWd1cmF0aW9uO1xuICAgIGluZ2VzdG9yRG9tYWluTmFtZU9wdGlvbnM/OiBhcGlnYXRld2F5LkRvbWFpbk5hbWVPcHRpb25zO1xuICB9KTogYXBpZ2F0ZXdheS5MYW1iZGFSZXN0QXBpIHtcbiAgICByZXR1cm4gbmV3IGFwaWdhdGV3YXkuTGFtYmRhUmVzdEFwaShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtTdGFjay5vZih0aGlzKS5zdGFja05hbWV9LWluZ2VzdG9yLWFwaWAsXG4gICAgICB7XG4gICAgICAgIGhhbmRsZXI6IHByb3BzLmhhbmRsZXIsXG4gICAgICAgIHByb3h5OiB0cnVlLFxuXG4gICAgICAgIGNsb3VkV2F0Y2hSb2xlOiB0cnVlLFxuICAgICAgICBkZXBsb3lPcHRpb25zOiB7IHN0YWdlTmFtZTogcHJvcHMuc3RhZ2UgfSxcbiAgICAgICAgZW5kcG9pbnRFeHBvcnROYW1lOiBgJHtTdGFjay5vZih0aGlzKX0taW5nZXN0b3ItYXBpYCxcblxuICAgICAgICBlbmRwb2ludENvbmZpZ3VyYXRpb246IHByb3BzLmVuZHBvaW50Q29uZmlndXJhdGlvbixcbiAgICAgICAgcG9saWN5OiBwcm9wcy5wb2xpY3ksXG5cbiAgICAgICAgZG9tYWluTmFtZTogcHJvcHMuaW5nZXN0b3JEb21haW5OYW1lT3B0aW9uc1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBkb21haW5OYW1lOiBwcm9wcy5pbmdlc3RvckRvbWFpbk5hbWVPcHRpb25zLmRvbWFpbk5hbWUsXG4gICAgICAgICAgICAgIGNlcnRpZmljYXRlOiBwcm9wcy5pbmdlc3RvckRvbWFpbk5hbWVPcHRpb25zLmNlcnRpZmljYXRlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVyU3NtUGFyYW1ldGVyKHByb3BzOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgfSk6IHNzbS5JU3RyaW5nUGFyYW1ldGVyIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lc3BhY2UgPSBTdGFjay5vZih0aGlzKS5zdGFja05hbWU7XG4gICAgcmV0dXJuIG5ldyBzc20uU3RyaW5nUGFyYW1ldGVyKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLm5hbWUucmVwbGFjZShcIl9cIiwgXCItXCIpfS1wYXJhbWV0ZXJgLFxuICAgICAge1xuICAgICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICAgIHBhcmFtZXRlck5hbWU6IGAvJHtwYXJhbWV0ZXJOYW1lc3BhY2V9LyR7cHJvcHMubmFtZX1gLFxuICAgICAgICBzdHJpbmdWYWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YWNJbmdlc3RvclByb3BzIHtcbiAgLyoqXG4gICAqIEFSTiBvZiBBV1MgUm9sZSB1c2VkIHRvIHZhbGlkYXRlIGFjY2VzcyB0byBTMyBkYXRhXG4gICAqL1xuICByZWFkb25seSBkYXRhQWNjZXNzUm9sZTogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBVUkwgb2YgU1RBQyBBUElcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogU3RhZ2Ugb2YgZGVwbG95bWVudCAoZS5nLiBgZGV2YCwgYHByb2RgKVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogU2VjcmV0IGNvbnRhaW5pbmcgcGdTVEFDIERCIGNvbm5lY3Rpb24gaW5mb3JtYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNEYlNlY3JldDogc2VjcmV0c21hbmFnZXIuSVNlY3JldDtcblxuICAvKipcbiAgICogVlBDIHJ1bm5pbmcgcGdTVEFDIERCXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBlYzIuSVZwYztcblxuICAvKipcbiAgICogU2VjdXJpdHkgR3JvdXAgdXNlZCBieSBwZ1NUQUMgREJcbiAgICovXG4gIHJlYWRvbmx5IHN0YWNEYlNlY3VyaXR5R3JvdXA6IGVjMi5JU2VjdXJpdHlHcm91cDtcblxuICAvKipcbiAgICogU3VibmV0IGludG8gd2hpY2ggdGhlIGxhbWJkYSBzaG91bGQgYmUgZGVwbG95ZWQgaWYgdXNpbmcgYSBWUENcbiAgICovXG4gIHJlYWRvbmx5IHN1Ym5ldFNlbGVjdGlvbj86IGVjMi5TdWJuZXRTZWxlY3Rpb247XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBiZSBzZW50IHRvIExhbWJkYS5cbiAgICovXG4gIHJlYWRvbmx5IGFwaUVudj86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIEFQSSBFbmRwb2ludCBDb25maWd1cmF0aW9uLCB1c2VmdWwgZm9yIGNyZWF0aW5nIHByaXZhdGUgQVBJcy5cbiAgICovXG4gIHJlYWRvbmx5IGFwaUVuZHBvaW50Q29uZmlndXJhdGlvbj86IGFwaWdhdGV3YXkuRW5kcG9pbnRDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBUEkgUG9saWN5IERvY3VtZW50LCB1c2VmdWwgZm9yIGNyZWF0aW5nIHByaXZhdGUgQVBJcy5cbiAgICovXG4gIHJlYWRvbmx5IGFwaVBvbGljeT86IGlhbS5Qb2xpY3lEb2N1bWVudDtcblxuICAvKipcbiAgICogQ3VzdG9tIERvbWFpbiBOYW1lIE9wdGlvbnMgZm9yIEluZ2VzdG9yIEFQSVxuICAgKi9cbiAgcmVhZG9ubHkgaW5nZXN0b3JEb21haW5OYW1lT3B0aW9ucz86IGFwaWdhdGV3YXkuRG9tYWluTmFtZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxhbWJkYSBmdW5jdGlvbiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGFwaUxhbWJkYUZ1bmN0aW9uT3B0aW9ucz86IEN1c3RvbUxhbWJkYUZ1bmN0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGxhbWJkYSBmdW5jdGlvbiBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgc2V0dGluZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGluZ2VzdG9yTGFtYmRhRnVuY3Rpb25PcHRpb25zPzogQ3VzdG9tTGFtYmRhRnVuY3Rpb25Qcm9wcztcblxuICAvKipcbiAgICogcGdzdGFjIHZlcnNpb24gLSBtdXN0IG1hdGNoIHRoZSB2ZXJzaW9uIGluc3RhbGxlZCBvbiB0aGUgcGdzdGFjIGRhdGFiYXNlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBzZXR0aW5ncyBhcmUgZGVmaW5lZCBpbiB0aGUgY29uc3RydWN0XG4gICAqL1xuICByZWFkb25seSBwZ3N0YWNWZXJzaW9uPzogc3RyaW5nO1xufVxuIl19
@@ -1,18 +1,22 @@
1
- ARG PYTHON_VERSION
2
-
1
+ ARG PYTHON_VERSION=3.12
3
2
  FROM --platform=linux/amd64 public.ecr.aws/lambda/python:${PYTHON_VERSION}
3
+ COPY --from=ghcr.io/astral-sh/uv:0.10.9 /uv /uvx /bin/
4
4
 
5
5
  WORKDIR /tmp
6
6
 
7
- RUN dnf install -y git
8
-
9
- RUN python -m pip install pip -U
10
-
11
- COPY runtime/requirements.txt requirements.txt
7
+ COPY runtime/pyproject.toml runtime/uv.lock ./
12
8
 
13
9
  ARG PGSTAC_VERSION
14
- RUN echo "pypgstac==${PGSTAC_VERSION}" > constraints.txt
15
- RUN python -m pip install -r requirements.txt -c constraints.txt "mangum>=0.14,<0.15" -t /asset --no-binary pydantic
10
+ RUN <<EOF
11
+ uv add --no-sync pypgstac==${PGSTAC_VERSION}
12
+ uv export --locked --no-editable --no-dev --format requirements.txt -o requirements.txt
13
+ uv pip install \
14
+ --compile-bytecode \
15
+ --target /asset \
16
+ --no-cache-dir \
17
+ --disable-pip-version-check \
18
+ -r requirements.txt
19
+ EOF
16
20
 
17
21
  RUN mkdir -p /asset/src
18
22
  COPY runtime/src/*.py /asset/src/
@@ -0,0 +1,37 @@
1
+ [project]
2
+ name = "ingestor-api"
3
+ version = "0.0.0"
4
+ description = "ingestor-api runtime"
5
+ requires-python = ">=3.12"
6
+ dependencies = [
7
+ "authlib>=1.3",
8
+ "boto3",
9
+ "cachetools>=5.0",
10
+ "fastapi>=0.110",
11
+ "mangum==0.19",
12
+ "orjson>=3.9",
13
+ "psycopg[binary,pool]>=3.0",
14
+ "pydantic>=2.0",
15
+ "pydantic-settings>=2.0",
16
+ "pydantic-ssm-settings>=1.0,<2.0",
17
+ "pypgstac",
18
+ "requests>=2.27",
19
+ "stac-pydantic>=3.0,<4.0",
20
+ ]
21
+
22
+ [dependency-groups]
23
+ dev = [
24
+ "httpx>=0.24",
25
+ "moto[dynamodb,ssm]>=4.0,<5.0",
26
+ "pytest>=7.0",
27
+ ]
28
+
29
+ [tool.hatch.build.targets.wheel]
30
+ packages = ["src"]
31
+
32
+ [build-system]
33
+ requires = ["hatchling"]
34
+ build-backend = "hatchling.build"
35
+
36
+ [tool.pytest.ini_options]
37
+ testpaths = ["tests"]
@@ -7,6 +7,7 @@ from pydantic import (
7
7
  AnyHttpUrl,
8
8
  Field,
9
9
  constr,
10
+ field_validator,
10
11
  )
11
12
  from pydantic_settings import BaseSettings
12
13
  from pydantic_ssm_settings.settings import SsmBaseSettings
@@ -26,6 +27,14 @@ class Settings(BaseSettings):
26
27
  description="URL of JWKS, e.g. https://cognito-idp.{region}.amazonaws.com/{userpool_id}/.well-known/jwks.json", # noqa
27
28
  )
28
29
 
30
+ @field_validator("jwks_url", mode="before")
31
+ @classmethod
32
+ def empty_str_to_none(cls, v):
33
+ """Treat empty string as None so callers can disable auth by setting JWKS_URL=''."""
34
+ if v == "":
35
+ return None
36
+ return v
37
+
29
38
  stac_url: HttpUrlString = Field(description="URL of STAC API")
30
39
 
31
40
  data_access_role: AwsArn = Field(
@@ -42,7 +42,7 @@ def update_dynamodb(
42
42
  with table.batch_writer(overwrite_by_pkeys=["created_by", "id"]) as batch:
43
43
  for ingestion in ingestions:
44
44
  batch.put_item(
45
- Item=ingestion.copy(
45
+ Item=ingestion.model_copy(
46
46
  update={
47
47
  "status": status,
48
48
  "message": message,