From 60f941e95aa138c47e08a4a73d57184f352c9379 Mon Sep 17 00:00:00 2001 From: Tooling Builder Date: Wed, 6 Nov 2024 03:33:21 +0000 Subject: [PATCH] chore: Metadata build (updates to OpenAPI tooling metadata and site rebuild) --- docs/categories/all.html | 652 ++++++------ docs/categories/auto-generators.html | 40 +- docs/categories/code-generators.html | 82 +- docs/categories/converters.html | 54 +- docs/categories/data-validators.html | 52 +- docs/categories/description-validators.html | 30 +- docs/categories/documentation.html | 82 +- docs/categories/dsl.html | 8 +- docs/categories/gateway.html | 12 +- docs/categories/low-level-tooling.html | 20 +- docs/categories/mock.html | 14 +- docs/categories/parsers.html | 178 ++-- docs/categories/sdk.html | 78 +- docs/categories/security.html | 12 +- docs/categories/server-implementations.html | 212 ++-- docs/categories/server.html | 44 +- docs/categories/testing-tools.html | 12 +- docs/categories/testing.html | 52 +- docs/categories/text-editors.html | 10 +- docs/categories/unclassified.html | 4 +- docs/categories/user-interfaces.html | 16 +- src/_data/tools.yaml | 1033 +++++++++---------- 22 files changed, 1348 insertions(+), 1349 deletions(-) diff --git a/docs/categories/all.html b/docs/categories/all.html index 486faab4..b8b54f5b 100644 --- a/docs/categories/all.html +++ b/docs/categories/all.html @@ -234,7 +234,7 @@

No Yes Yes - 4489 + 4490 @@ -357,7 +357,7 @@

Yes Yes Yes - 7052 + 7062 @@ -380,7 +380,7 @@

Yes No No - 1224 + 1226 @@ -403,7 +403,7 @@

No Yes No - 1735 + 1740 @@ -466,7 +466,7 @@

Yes Yes Yes - 23555 + 23564 @@ -529,7 +529,7 @@

Yes Yes Yes - 647 + 648 @@ -552,7 +552,7 @@

No Yes No - 738 + 739 @@ -887,7 +887,7 @@

No Yes Yes - 21769 + 21774 @@ -933,7 +933,7 @@

No Yes Yes - 2937 + 2941 @@ -1091,7 +1091,7 @@

Yes Yes Yes - 8933 + 8935 @@ -1410,7 +1410,7 @@

Yes Yes Yes - 4304 + 4307 @@ -1587,7 +1587,7 @@

Yes Yes Yes - 1285 + 1296 @@ -1702,7 +1702,7 @@

No Yes Yes - 8672 + 8675 @@ -1834,7 +1834,7 @@

No Yes No - 1693 + 1692 @@ -1922,7 +1922,7 @@

No Yes No - 918 + 919 @@ -1989,7 +1989,7 @@

No Yes No - 1663 + 1664 @@ -2033,7 +2033,7 @@

Yes Yes Yes - 2509 + 2512 @@ -2098,7 +2098,7 @@

Yes Yes Yes - 934 + 935 @@ -2142,7 +2142,7 @@

No Yes Yes - 880 + 881 @@ -2318,7 +2318,7 @@

No Yes No - 486 + 488 @@ -2341,7 +2341,7 @@

No Yes Yes - 2616 + 2618 @@ -2490,7 +2490,7 @@

No Yes Yes - 1403 + 1405 @@ -2641,7 +2641,7 @@

No No Yes - 9541 + 9542 @@ -2710,7 +2710,7 @@

No Yes Yes - 6776 + 6779 @@ -2756,7 +2756,7 @@

No Yes Yes - 17016 + 17019 @@ -2777,7 +2777,7 @@

No Yes Yes - 4618 + 4620 @@ -3279,7 +3279,7 @@

No Yes No - 5085 + 5087 @@ -3302,7 +3302,7 @@

No Yes No - 517 + 519 @@ -3415,7 +3415,7 @@

Yes Yes No - 3938 + 3941 @@ -3438,7 +3438,7 @@

No Yes No - 4481 + 4484 @@ -3637,7 +3637,7 @@

No Yes Yes - 12694 + 12698 @@ -3878,7 +3878,7 @@

No Yes No - 28379 + 28384 @@ -4030,7 +4030,7 @@

Yes Yes No - 1329 + 1331 @@ -4053,7 +4053,7 @@

Yes Yes Yes - 1795 + 1793 @@ -4279,7 +4279,7 @@

Yes Yes Yes - 78 + 79 @@ -4369,7 +4369,7 @@

Yes Yes Yes - 611 + 612 @@ -4436,7 +4436,7 @@

Yes Yes Yes - 468 + 469 @@ -4662,7 +4662,7 @@

Yes Yes Yes - 188 + 189 @@ -4727,7 +4727,7 @@

Yes Yes Yes - 59 + 60 @@ -4874,7 +4874,7 @@

No Yes No - 2001 + 2002 @@ -4897,7 +4897,7 @@

Yes Yes Yes - 2667 + 2669 @@ -4987,7 +4987,7 @@

Yes Yes Yes - 120 + 121 @@ -5144,7 +5144,7 @@

Yes Yes No - 2079 + 2082 @@ -5282,7 +5282,7 @@

Yes Yes No - 89 + 91 @@ -5305,7 +5305,7 @@

No Yes No - 77214 + 77246 @@ -5328,7 +5328,7 @@

Yes Yes No - 26545 + 26549 @@ -5351,7 +5351,7 @@

Yes Yes No - 23555 + 23563 @@ -5372,7 +5372,7 @@

No Yes No - 7386 + 7387 @@ -5393,7 +5393,7 @@

No Yes No - 6498 + 6509 @@ -5416,7 +5416,7 @@

No Yes No - 6263 + 6271 @@ -5439,7 +5439,7 @@

Yes Yes Yes - 5832 + 5838 @@ -5460,7 +5460,7 @@

No Yes No - 4128 + 4130 @@ -5481,7 +5481,7 @@

No Yes No - 3871 + 3873 @@ -5504,7 +5504,7 @@

No Yes No - 3282 + 3285 @@ -5525,7 +5525,7 @@

No Yes No - 2705 + 2706 @@ -5567,7 +5567,7 @@

No Yes No - 2386 + 2388 @@ -5588,7 +5588,7 @@

No Yes No - 2382 + 2384 @@ -5611,7 +5611,7 @@

No Yes No - 2282 + 2283 @@ -5632,7 +5632,7 @@

No Yes No - 2097 + 2098 @@ -5674,7 +5674,7 @@

No Yes No - 1448 + 1449 @@ -5718,7 +5718,7 @@

No Yes No - 1414 + 1416 @@ -5739,7 +5739,7 @@

No Yes No - 1173 + 1174 @@ -5760,7 +5760,7 @@

No Yes No - 1034 + 1036 @@ -5802,7 +5802,7 @@

No Yes No - 854 + 856 @@ -5865,7 +5865,7 @@

No Yes No - 705 + 707 @@ -5951,7 +5951,7 @@

Yes Yes No - 656 + 659 @@ -6014,7 +6014,7 @@

No Yes No - 547 + 548 @@ -6035,7 +6035,7 @@

No Yes No - 517 + 522 @@ -6266,7 +6266,7 @@

No Yes No - 404 + 405 @@ -6287,7 +6287,7 @@

No Yes No - 385 + 389 @@ -6457,7 +6457,7 @@

No Yes No - 317 + 320 @@ -6667,7 +6667,7 @@

No Yes No - 258 + 257 @@ -6732,7 +6732,7 @@

No Yes No - 248 + 251 @@ -7058,7 +7058,7 @@

speakeasy - Build APIs your users love ❤️ with Speakeasy. Best in class, robust SDKs, terraform providers and contract tests for your API. OpenAPI first and native. + Build APIs your users love ❤️ with Speakeasy. Polished and type-safe SDKs, terraform providers and contract tests for your API. OpenAPI native. No @@ -7112,7 +7112,7 @@

No Yes No - 193 + 194 @@ -7513,7 +7513,7 @@

Yes Yes No - 120 + 121 @@ -7681,7 +7681,7 @@

No Yes No - 110 + 112 @@ -7702,7 +7702,7 @@

No Yes No - 110 + 111 @@ -7765,7 +7765,7 @@

No Yes No - 108 + 109 @@ -8248,7 +8248,7 @@

Yes Yes No - 68 + 69 @@ -8353,7 +8353,7 @@

No Yes No - 61 + 62 @@ -8542,7 +8542,7 @@

No Yes No - 54 + 55 @@ -9476,7 +9476,7 @@

No Yes No - 33 + 34 @@ -24730,7 +24730,7 @@

Yes Yes No - 2454 + 2456 @@ -24751,7 +24751,7 @@

Yes No No - 65 + 67 @@ -25549,7 +25549,7 @@

No Yes Yes - 3017 + 3022 @@ -27296,7 +27296,7 @@

No Yes No - 27244 + 27270 @@ -31333,7 +31333,7 @@

No No No - 7386 + 7387 @@ -31356,7 +31356,7 @@

No No No - 1403 + 1405 @@ -31669,7 +31669,7 @@

No No No - 3598 + 3601 @@ -32323,7 +32323,7 @@

No Yes No - 4958 + 4957 @@ -32367,7 +32367,7 @@

No Yes Yes - 2601 + 2602 @@ -33490,7 +33490,7 @@

Connexion (link)

Stars - 4489 + 4490 Watchers @@ -33506,7 +33506,7 @@

Connexion (link)

Last Updated - 2024-11-04T22:12:37Z + 2024-11-05T12:41:13Z Archived @@ -33796,7 +33796,7 @@

Scalar (link)

Stars - 7052 + 7062 Watchers @@ -33804,7 +33804,7 @@

Scalar (link)

Forks - 219 + 221 Created @@ -33812,7 +33812,7 @@

Scalar (link)

Last Updated - 2024-11-05T03:04:40Z + 2024-11-06T02:36:01Z Archived @@ -33847,11 +33847,11 @@

Scramble (link)

Stars - 1224 + 1226 Watchers - 15 + 16 Forks @@ -33863,7 +33863,7 @@

Scramble (link)

Last Updated - 2024-11-04T07:10:17Z + 2024-11-06T00:24:29Z Archived @@ -33898,7 +33898,7 @@

Scribe (link)

Stars - 1735 + 1740 Watchers @@ -33906,7 +33906,7 @@

Scribe (link)

Forks - 313 + 314 Created @@ -33914,7 +33914,7 @@

Scribe (link)

Last Updated - 2024-11-04T18:00:20Z + 2024-11-05T21:43:47Z Archived @@ -34051,7 +34051,7 @@

ReDoc (link)

Stars - 23555 + 23564 Watchers @@ -34067,7 +34067,7 @@

ReDoc (link)

Last Updated - 2024-11-04T20:45:52Z + 2024-11-06T03:32:46Z Archived @@ -34204,7 +34204,7 @@

OpenAPI-UI (link)

Stars - 647 + 648 Watchers @@ -34220,7 +34220,7 @@

OpenAPI-UI (link)

Last Updated - 2024-11-01T05:40:54Z + 2024-11-06T01:51:05Z Archived @@ -34255,7 +34255,7 @@

oasdiff (link)

Stars - 738 + 739 Watchers @@ -34271,7 +34271,7 @@

oasdiff (link)

Last Updated - 2024-11-04T15:49:41Z + 2024-11-05T21:26:10Z Archived @@ -35020,7 +35020,7 @@

OpenAPI Generator (link)

Stars - 21769 + 21774 Watchers @@ -35028,7 +35028,7 @@

OpenAPI Generator (link)

Forks - 6565 + 6573 Created @@ -35036,7 +35036,7 @@

OpenAPI Generator (link)

Last Updated - 2024-11-05T01:02:32Z + 2024-11-06T03:08:15Z Archived @@ -35122,7 +35122,7 @@

Kiota Api Client Generator (link)

Stars - 2937 + 2941 Watchers @@ -35138,7 +35138,7 @@

Kiota Api Client Generator (link)

Last Updated - 2024-11-05T02:11:04Z + 2024-11-05T15:14:45Z Archived @@ -35393,7 +35393,7 @@

VSCode OpenAPI Editor (link)

Last Updated - 2024-11-04T15:57:01Z + 2024-11-05T16:34:14Z Archived @@ -35479,7 +35479,7 @@

Swagger Editor (link)

Stars - 8933 + 8935 Watchers @@ -35487,7 +35487,7 @@

Swagger Editor (link)

Forks - 2253 + 2254 Created @@ -35495,7 +35495,7 @@

Swagger Editor (link)

Last Updated - 2024-11-04T17:56:40Z + 2024-11-05T10:09:30Z Archived @@ -36244,7 +36244,7 @@

Prism (link)

Stars - 4304 + 4307 Watchers @@ -36260,7 +36260,7 @@

Prism (link)

Last Updated - 2024-11-02T16:34:10Z + 2024-11-05T16:47:07Z Archived @@ -36617,7 +36617,7 @@

tsoa (link)

Last Updated - 2024-11-04T18:30:10Z + 2024-11-05T21:32:44Z Archived @@ -36652,7 +36652,7 @@

@hey-api/openapi-ts (link)

Stars - 1285 + 1296 Watchers @@ -36668,7 +36668,7 @@

@hey-api/openapi-ts (link)

Last Updated - 2024-11-04T23:29:00Z + 2024-11-06T02:46:25Z Archived @@ -36907,7 +36907,7 @@

API Platform (link)

Stars - 8672 + 8675 Watchers @@ -36923,7 +36923,7 @@

API Platform (link)

Last Updated - 2024-11-04T23:52:02Z + 2024-11-06T02:17:10Z Archived @@ -37213,7 +37213,7 @@

@nestjs/swagger (link)

Stars - 1693 + 1692 Watchers @@ -37229,7 +37229,7 @@

@nestjs/swagger (link)

Last Updated - 2024-11-05T02:04:08Z + 2024-11-05T14:03:37Z Archived @@ -37417,7 +37417,7 @@

express-openapi-validator (link)

Stars - 918 + 919 Watchers @@ -37433,7 +37433,7 @@

express-openapi-validator (link)

Last Updated - 2024-10-31T00:46:29Z + 2024-11-05T10:07:13Z Archived @@ -37535,7 +37535,7 @@

portman (link)

Last Updated - 2024-11-01T17:12:44Z + 2024-11-05T18:55:55Z Archived @@ -37570,7 +37570,7 @@

Step CI (link)

Stars - 1663 + 1664 Watchers @@ -37586,7 +37586,7 @@

Step CI (link)

Last Updated - 2024-11-02T09:00:07Z + 2024-11-05T18:27:15Z Archived @@ -37672,7 +37672,7 @@

Spectral (link)

Stars - 2509 + 2512 Watchers @@ -37688,7 +37688,7 @@

Spectral (link)

Last Updated - 2024-11-04T14:42:45Z + 2024-11-06T02:09:40Z Archived @@ -37790,7 +37790,7 @@

OpenAPI Validator (link)

Last Updated - 2024-10-31T14:39:34Z + 2024-11-05T21:12:50Z Archived @@ -37825,7 +37825,7 @@

Redocly CLI (link)

Stars - 934 + 935 Watchers @@ -37841,7 +37841,7 @@

Redocly CLI (link)

Last Updated - 2024-11-04T13:19:05Z + 2024-11-05T11:24:24Z Archived @@ -37927,7 +37927,7 @@

committee (link)

Stars - 880 + 881 Watchers @@ -37943,7 +37943,7 @@

committee (link)

Last Updated - 2024-10-30T13:21:35Z + 2024-11-05T10:15:38Z Archived @@ -38335,7 +38335,7 @@

OpenAPI-TS (link)

Stars - 486 + 488 Watchers @@ -38351,7 +38351,7 @@

OpenAPI-TS (link)

Last Updated - 2024-11-02T09:03:08Z + 2024-11-05T14:13:51Z Archived @@ -38386,7 +38386,7 @@

kin-openapi (link)

Stars - 2616 + 2618 Watchers @@ -38402,7 +38402,7 @@

kin-openapi (link)

Last Updated - 2024-11-04T09:45:31Z + 2024-11-06T03:24:44Z Archived @@ -38708,7 +38708,7 @@

psx-api (link)

Last Updated - 2024-11-03T22:25:13Z + 2024-11-05T21:39:48Z Archived @@ -38743,7 +38743,7 @@

Microsoft/OpenAPI.NET (link)

Stars - 1403 + 1405 Watchers @@ -38751,7 +38751,7 @@

Microsoft/OpenAPI.NET (link)

Forks - 233 + 232 Created @@ -38759,7 +38759,7 @@

Microsoft/OpenAPI.NET (link)

Last Updated - 2024-11-04T23:45:02Z + 2024-11-05T23:58:58Z Archived @@ -39100,7 +39100,7 @@

go-swagger (link)

Stars - 9541 + 9542 Watchers @@ -39108,7 +39108,7 @@

go-swagger (link)

Forks - 1253 + 1254 Created @@ -39116,7 +39116,7 @@

go-swagger (link)

Last Updated - 2024-11-04T19:07:18Z + 2024-11-05T09:57:47Z Archived @@ -39253,7 +39253,7 @@

NSwag (link)

Stars - 6776 + 6779 Watchers @@ -39269,7 +39269,7 @@

NSwag (link)

Last Updated - 2024-11-04T20:21:10Z + 2024-11-06T01:32:43Z Archived @@ -39355,7 +39355,7 @@

Swagger-Codegen (link)

Stars - 17016 + 17019 Watchers @@ -39371,7 +39371,7 @@

Swagger-Codegen (link)

Last Updated - 2024-11-04T18:53:05Z + 2024-11-05T20:39:33Z Archived @@ -39406,7 +39406,7 @@

Azure AutoRest (link)

Stars - 4618 + 4620 Watchers @@ -39422,7 +39422,7 @@

Azure AutoRest (link)

Last Updated - 2024-11-04T13:19:00Z + 2024-11-06T01:59:17Z Archived @@ -40579,7 +40579,7 @@

mitmproxy2swagger (link)

Stars - 5085 + 5087 Watchers @@ -40595,7 +40595,7 @@

mitmproxy2swagger (link)

Last Updated - 2024-11-04T11:28:08Z + 2024-11-06T02:42:38Z Archived @@ -40630,7 +40630,7 @@

OpenApiSpecGeneratorPlugin (link)

Stars - 517 + 519 Watchers @@ -40646,7 +40646,7 @@

OpenApiSpecGeneratorPlugin (link)

Last Updated - 2024-11-04T16:11:12Z + 2024-11-05T19:47:49Z Archived @@ -40885,7 +40885,7 @@

OpenAPI DevTools (link)

Stars - 3938 + 3941 Watchers @@ -40901,7 +40901,7 @@

OpenAPI DevTools (link)

Last Updated - 2024-11-04T10:36:06Z + 2024-11-05T23:49:08Z Archived @@ -40936,7 +40936,7 @@

TypeSpec (link)

Stars - 4481 + 4484 Watchers @@ -40952,7 +40952,7 @@

TypeSpec (link)

Last Updated - 2024-11-05T02:41:57Z + 2024-11-06T02:36:33Z Archived @@ -41395,7 +41395,7 @@

OWASP ZAP (link)

Stars - 12694 + 12698 Watchers @@ -41411,7 +41411,7 @@

OWASP ZAP (link)

Last Updated - 2024-11-05T00:22:40Z + 2024-11-06T01:07:03Z Archived @@ -41956,7 +41956,7 @@

Django REST Framework (link)

Stars - 28379 + 28384 Watchers @@ -41964,7 +41964,7 @@

Django REST Framework (link)

Forks - 6840 + 6841 Created @@ -41972,7 +41972,7 @@

Django REST Framework (link)

Last Updated - 2024-11-05T02:54:24Z + 2024-11-06T02:37:29Z Archived @@ -42313,7 +42313,7 @@

openapi-python-client (link)

Stars - 1329 + 1331 Watchers @@ -42329,7 +42329,7 @@

openapi-python-client (link)

Last Updated - 2024-11-05T03:01:55Z + 2024-11-05T18:33:55Z Archived @@ -42364,7 +42364,7 @@

Elements (link)

Stars - 1795 + 1793 Watchers @@ -42380,7 +42380,7 @@

Elements (link)

Last Updated - 2024-11-05T02:04:14Z + 2024-11-05T18:54:09Z Archived @@ -42874,7 +42874,7 @@

MkDocs Swagger UI Tag (link)

Stars - 78 + 79 Watchers @@ -42890,7 +42890,7 @@

MkDocs Swagger UI Tag (link)

Last Updated - 2024-10-27T10:25:53Z + 2024-11-06T02:53:12Z Archived @@ -43078,7 +43078,7 @@

vacuum (link)

Stars - 611 + 612 Watchers @@ -43094,7 +43094,7 @@

vacuum (link)

Last Updated - 2024-11-04T18:30:07Z + 2024-11-05T12:36:14Z Archived @@ -43231,7 +43231,7 @@

libopenapi (link)

Stars - 468 + 469 Watchers @@ -43247,7 +43247,7 @@

libopenapi (link)

Last Updated - 2024-11-02T16:37:30Z + 2024-11-06T02:45:08Z Archived @@ -43706,7 +43706,7 @@

Specmatic (link)

Last Updated - 2024-11-04T11:47:27Z + 2024-11-05T11:16:33Z Archived @@ -43741,7 +43741,7 @@

openapi-changes (link)

Stars - 188 + 189 Watchers @@ -43757,7 +43757,7 @@

openapi-changes (link)

Last Updated - 2024-11-03T17:30:17Z + 2024-11-05T10:04:10Z Archived @@ -43894,7 +43894,7 @@

Serverless API Gateway (link)

Stars - 59 + 60 Watchers @@ -43910,7 +43910,7 @@

Serverless API Gateway (link)

Last Updated - 2024-11-03T20:26:53Z + 2024-11-05T23:34:21Z Archived @@ -44251,7 +44251,7 @@

rswag (link)

Stars - 2001 + 2002 Watchers @@ -44259,7 +44259,7 @@

rswag (link)

Forks - 431 + 432 Created @@ -44267,7 +44267,7 @@

rswag (link)

Last Updated - 2024-11-02T20:07:54Z + 2024-11-05T13:56:23Z Archived @@ -44302,7 +44302,7 @@

🌿 Fern (link)

Stars - 2667 + 2669 Watchers @@ -44310,7 +44310,7 @@

🌿 Fern (link)

Forks - 148 + 149 Created @@ -44318,7 +44318,7 @@

🌿 Fern (link)

Last Updated - 2024-11-05T02:38:58Z + 2024-11-06T00:49:52Z Archived @@ -44506,7 +44506,7 @@

wiretap (link)

Stars - 120 + 121 Watchers @@ -44522,7 +44522,7 @@

wiretap (link)

Last Updated - 2024-11-03T23:00:38Z + 2024-11-05T16:11:07Z Archived @@ -44828,7 +44828,7 @@

Fuego (link)

Last Updated - 2024-11-04T22:56:36Z + 2024-11-05T22:22:12Z Archived @@ -44863,7 +44863,7 @@

Huma (link)

Stars - 2079 + 2082 Watchers @@ -44879,7 +44879,7 @@

Huma (link)

Last Updated - 2024-11-04T17:50:20Z + 2024-11-06T03:28:19Z Archived @@ -45169,7 +45169,7 @@

Zudoku (link)

Stars - 89 + 91 Watchers @@ -45185,7 +45185,7 @@

Zudoku (link)

Last Updated - 2024-11-04T21:18:16Z + 2024-11-05T20:54:02Z Archived @@ -45220,7 +45220,7 @@

FastAPI (link)

Stars - 77214 + 77246 Watchers @@ -45228,7 +45228,7 @@

FastAPI (link)

Forks - 6598 + 6600 Created @@ -45236,7 +45236,7 @@

FastAPI (link)

Last Updated - 2024-11-05T03:22:49Z + 2024-11-06T03:24:26Z Archived @@ -45271,15 +45271,15 @@

swagger-ui (link)

Stars - 26545 + 26549 Watchers - 650 + 649 Forks - 8957 + 8959 Created @@ -45287,7 +45287,7 @@

swagger-ui (link)

Last Updated - 2024-11-04T23:21:37Z + 2024-11-06T01:06:25Z Archived @@ -45322,7 +45322,7 @@

Redoc (link)

Stars - 23555 + 23563 Watchers @@ -45338,7 +45338,7 @@

Redoc (link)

Last Updated - 2024-11-04T20:45:52Z + 2024-11-06T02:49:36Z Archived @@ -45373,7 +45373,7 @@

swagger-core (link)

Stars - 7386 + 7387 Watchers @@ -45389,7 +45389,7 @@

swagger-core (link)

Last Updated - 2024-11-03T09:28:43Z + 2024-11-05T08:17:44Z Archived @@ -45424,7 +45424,7 @@

mockoon (link)

Stars - 6498 + 6509 Watchers @@ -45432,7 +45432,7 @@

mockoon (link)

Forks - 387 + 386 Created @@ -45440,7 +45440,7 @@

mockoon (link)

Last Updated - 2024-11-05T01:30:15Z + 2024-11-05T20:00:37Z Archived @@ -45475,7 +45475,7 @@

OpenAPI Server Code Generator (oapi-cod Stars - 6263 + 6271 Watchers @@ -45491,7 +45491,7 @@

OpenAPI Server Code Generator (oapi-cod Last Updated - 2024-11-04T15:38:12Z + 2024-11-06T03:24:45Z Archived @@ -45526,11 +45526,11 @@

OpenAPI TypeScript (link)

Stars - 5832 + 5838 Watchers - 25 + 26 Forks @@ -45542,7 +45542,7 @@

OpenAPI TypeScript (link)

Last Updated - 2024-11-04T23:01:14Z + 2024-11-06T02:49:12Z Archived @@ -45577,7 +45577,7 @@

knife4j (link)

Stars - 4128 + 4130 Watchers @@ -45593,7 +45593,7 @@

knife4j (link)

Last Updated - 2024-11-04T03:20:08Z + 2024-11-05T13:26:44Z Archived @@ -45628,7 +45628,7 @@

openapi-directory (link)

Stars - 3871 + 3873 Watchers @@ -45644,7 +45644,7 @@

openapi-directory (link)

Last Updated - 2024-11-02T23:31:22Z + 2024-11-05T11:47:45Z Archived @@ -45679,7 +45679,7 @@

springdoc-openapi (link)

Stars - 3282 + 3285 Watchers @@ -45695,7 +45695,7 @@

springdoc-openapi (link)

Last Updated - 2024-11-04T13:51:05Z + 2024-11-06T03:23:24Z Archived @@ -45730,7 +45730,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Stars - 2705 + 2706 Watchers @@ -45746,7 +45746,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Last Updated - 2024-11-04T22:26:10Z + 2024-11-06T01:54:43Z Archived @@ -45789,7 +45789,7 @@

swagger-js (link)

Forks - 761 + 762 Created @@ -45797,7 +45797,7 @@

swagger-js (link)

Last Updated - 2024-11-01T23:13:25Z + 2024-11-05T10:23:30Z Archived @@ -45832,7 +45832,7 @@

drf-spectacular (link)

Stars - 2386 + 2388 Watchers @@ -45848,7 +45848,7 @@

drf-spectacular (link)

Last Updated - 2024-11-04T21:59:17Z + 2024-11-06T00:32:36Z Archived @@ -45883,7 +45883,7 @@

msgspec (link)

Stars - 2382 + 2384 Watchers @@ -45899,7 +45899,7 @@

msgspec (link)

Last Updated - 2024-11-04T10:09:23Z + 2024-11-05T23:16:50Z Archived @@ -45934,7 +45934,7 @@

Schemathesis (link)

Stars - 2282 + 2283 Watchers @@ -45950,7 +45950,7 @@

Schemathesis (link)

Last Updated - 2024-11-04T23:00:02Z + 2024-11-05T10:46:50Z Archived @@ -45985,7 +45985,7 @@

gnostic (link)

Stars - 2097 + 2098 Watchers @@ -46001,7 +46001,7 @@

gnostic (link)

Last Updated - 2024-11-02T08:47:37Z + 2024-11-06T03:24:48Z Archived @@ -46087,7 +46087,7 @@

openapi-generator-cli (link)

Stars - 1448 + 1449 Watchers @@ -46103,7 +46103,7 @@

openapi-generator-cli (link)

Last Updated - 2024-11-04T22:54:16Z + 2024-11-06T00:20:37Z Archived @@ -46189,7 +46189,7 @@

ogen (link)

Stars - 1414 + 1416 Watchers @@ -46205,7 +46205,7 @@

ogen (link)

Last Updated - 2024-11-04T00:20:51Z + 2024-11-06T03:31:37Z Archived @@ -46240,7 +46240,7 @@

apispec (link)

Stars - 1173 + 1174 Watchers @@ -46256,7 +46256,7 @@

apispec (link)

Last Updated - 2024-11-04T21:36:01Z + 2024-11-05T10:25:52Z Archived @@ -46291,7 +46291,7 @@

apiflask (link)

Stars - 1034 + 1036 Watchers @@ -46307,7 +46307,7 @@

apiflask (link)

Last Updated - 2024-11-04T14:43:11Z + 2024-11-05T20:24:52Z Archived @@ -46393,7 +46393,7 @@

json-schema-validator (link)

Stars - 854 + 856 Watchers @@ -46409,7 +46409,7 @@

json-schema-validator (link)

Last Updated - 2024-11-04T06:42:19Z + 2024-11-05T08:15:02Z Archived @@ -46546,7 +46546,7 @@

oas-kit (link)

Stars - 705 + 707 Watchers @@ -46562,7 +46562,7 @@

oas-kit (link)

Last Updated - 2024-10-21T23:35:26Z + 2024-11-05T21:35:15Z Archived @@ -46750,7 +46750,7 @@

openapi-tui (link)

Stars - 656 + 659 Watchers @@ -46766,7 +46766,7 @@

openapi-tui (link)

Last Updated - 2024-11-03T21:01:31Z + 2024-11-05T21:50:15Z Archived @@ -46817,7 +46817,7 @@

awesome-openapi3 (link)

Last Updated - 2024-11-05T00:00:52Z + 2024-11-06T00:02:48Z Archived @@ -46903,7 +46903,7 @@

hibiapi (link)

Stars - 547 + 548 Watchers @@ -46919,7 +46919,7 @@

hibiapi (link)

Last Updated - 2024-11-05T02:54:48Z + 2024-11-05T22:35:13Z Archived @@ -46954,7 +46954,7 @@

stackql (link)

Stars - 517 + 522 Watchers @@ -46970,7 +46970,7 @@

stackql (link)

Last Updated - 2024-10-30T21:43:04Z + 2024-11-06T01:43:12Z Archived @@ -47515,7 +47515,7 @@

safrs (link)

Stars - 404 + 405 Watchers @@ -47531,7 +47531,7 @@

safrs (link)

Last Updated - 2024-11-03T02:44:35Z + 2024-11-05T14:22:56Z Archived @@ -47566,7 +47566,7 @@

fastapi-clean-example (link)

Stars - 385 + 389 Watchers @@ -47582,7 +47582,7 @@

fastapi-clean-example (link)

Last Updated - 2024-11-04T07:07:18Z + 2024-11-06T02:13:39Z Archived @@ -47974,7 +47974,7 @@

chanfana (link)

Stars - 317 + 320 Watchers @@ -47990,7 +47990,7 @@

chanfana (link)

Last Updated - 2024-11-04T22:23:01Z + 2024-11-06T02:31:33Z Archived @@ -48041,7 +48041,7 @@

esmerald (link)

Last Updated - 2024-11-03T14:29:45Z + 2024-11-05T19:25:02Z Archived @@ -48084,7 +48084,7 @@

modelina (link)

Forks - 183 + 184 Created @@ -48484,7 +48484,7 @@

swagger-petstore (link)

Stars - 258 + 257 Watchers @@ -48500,7 +48500,7 @@

swagger-petstore (link)

Last Updated - 2024-11-02T10:04:36Z + 2024-11-05T16:58:28Z Archived @@ -48637,7 +48637,7 @@

typescript-backend-toolkit (link)

Stars - 248 + 251 Watchers @@ -48653,7 +48653,7 @@

typescript-backend-toolkit (link)

Last Updated - 2024-11-05T00:16:42Z + 2024-11-05T23:36:25Z Archived @@ -48794,7 +48794,7 @@

thema (link)

Watchers - 143 + 144 Forks @@ -49469,7 +49469,7 @@

speakeasy (link)

Last Updated - 2024-11-04T23:55:24Z + 2024-11-05T23:40:44Z Archived @@ -49555,7 +49555,7 @@

refitter (link)

Stars - 193 + 194 Watchers @@ -49571,7 +49571,7 @@

refitter (link)

Last Updated - 2024-11-04T12:06:11Z + 2024-11-05T22:52:47Z Archived @@ -50524,7 +50524,7 @@

learn.openapis.org (link)

Stars - 120 + 121 Watchers @@ -50540,7 +50540,7 @@

learn.openapis.org (link)

Last Updated - 2024-10-23T02:36:41Z + 2024-11-05T10:12:27Z Archived @@ -50932,7 +50932,7 @@

moclojer (link)

Stars - 110 + 112 Watchers @@ -50948,7 +50948,7 @@

moclojer (link)

Last Updated - 2024-11-01T07:41:24Z + 2024-11-05T23:13:08Z Archived @@ -50983,7 +50983,7 @@

openapi (link)

Stars - 110 + 111 Watchers @@ -50999,7 +50999,7 @@

openapi (link)

Last Updated - 2024-10-26T08:19:13Z + 2024-11-05T20:24:53Z Archived @@ -51136,7 +51136,7 @@

go-swagger3 (link)

Stars - 108 + 109 Watchers @@ -51152,7 +51152,7 @@

go-swagger3 (link)

Last Updated - 2024-11-02T16:02:25Z + 2024-11-05T05:32:02Z Archived @@ -51305,7 +51305,7 @@

tools.openapis.org (link)

Last Updated - 2024-11-04T03:38:51Z + 2024-11-05T03:39:27Z Archived @@ -52309,7 +52309,7 @@

apidom (link)

Stars - 68 + 69 Watchers @@ -52325,7 +52325,7 @@

apidom (link)

Last Updated - 2024-11-05T00:00:48Z + 2024-11-06T03:01:20Z Archived @@ -52529,7 +52529,7 @@

openapi3-parser (link)

Last Updated - 2024-10-28T11:28:50Z + 2024-11-05T22:06:51Z Archived @@ -52564,7 +52564,7 @@

openapi (link)

Stars - 61 + 62 Watchers @@ -52580,7 +52580,7 @@

openapi (link)

Last Updated - 2024-10-09T12:40:35Z + 2024-11-05T06:23:02Z Archived @@ -53023,7 +53023,7 @@

rest (link)

Stars - 54 + 55 Watchers @@ -53039,7 +53039,7 @@

rest (link)

Last Updated - 2024-11-01T18:07:58Z + 2024-11-05T17:07:56Z Archived @@ -53702,7 +53702,7 @@

swagger-editor-validate (link)

Last Updated - 2024-10-29T04:59:38Z + 2024-11-05T04:19:16Z Archived @@ -53804,7 +53804,7 @@

sample-quarkus-applications (link)

Last Updated - 2024-11-03T01:31:29Z + 2024-11-05T15:14:40Z Archived @@ -54000,7 +54000,7 @@

oas3-chow-chow (link)

Forks - 25 + 26 Created @@ -54314,7 +54314,7 @@

backbase-openapi-tools (link)

Last Updated - 2024-11-04T15:14:30Z + 2024-11-05T11:53:16Z Archived @@ -55267,7 +55267,7 @@

spring-boot-swagger-3-example (link) Stars - 33 + 34 Watchers @@ -55283,7 +55283,7 @@

spring-boot-swagger-3-example (link) Last Updated - 2024-08-06T03:49:00Z + 2024-11-05T18:16:26Z Archived @@ -55334,7 +55334,7 @@

data-fair (link)

Last Updated - 2024-11-04T17:13:53Z + 2024-11-05T15:48:24Z Archived @@ -55997,7 +55997,7 @@

hei-admin-api (link)

Last Updated - 2024-11-02T11:03:00Z + 2024-11-05T15:36:47Z Archived @@ -56193,7 +56193,7 @@

sbt-openapi-generator (link)

Forks - 34 + 35 Created @@ -58241,7 +58241,7 @@

mockoon.com (link)

Last Updated - 2024-11-04T15:34:46Z + 2024-11-05T14:36:49Z Archived @@ -68747,7 +68747,7 @@

redmine-openapi (link)

Last Updated - 2024-06-12T04:16:55Z + 2024-11-05T10:11:23Z Archived @@ -71195,7 +71195,7 @@

pyapi-server (link)

Last Updated - 2024-07-25T14:14:21Z + 2024-11-05T21:54:05Z Archived @@ -73184,7 +73184,7 @@

go-aas-proxy (link)

Last Updated - 2024-11-01T14:03:39Z + 2024-11-05T18:57:50Z Archived @@ -89088,7 +89088,7 @@

membrane-core (link)

Forks - 2 + 3 Created @@ -92293,7 +92293,7 @@

utoipa (link)

Stars - 2454 + 2456 Watchers @@ -92301,7 +92301,7 @@

utoipa (link)

Forks - 188 + 189 Created @@ -92309,7 +92309,7 @@

utoipa (link)

Last Updated - 2024-11-04T19:25:15Z + 2024-11-06T02:41:17Z Archived @@ -92344,7 +92344,7 @@

oas_rails (link)

Stars - 65 + 67 Watchers @@ -92360,7 +92360,7 @@

oas_rails (link)

Last Updated - 2024-11-04T07:33:43Z + 2024-11-05T13:25:04Z Archived @@ -92411,7 +92411,7 @@

train-travel-api (link)

Last Updated - 2024-10-31T12:21:16Z + 2024-11-05T13:50:34Z Archived @@ -94282,7 +94282,7 @@

orval (link)

Stars - 3017 + 3022 Watchers @@ -94298,7 +94298,7 @@

orval (link)

Last Updated - 2024-11-04T20:33:58Z + 2024-11-05T18:10:06Z Archived @@ -95726,7 +95726,7 @@

EvoMaster (link)

Last Updated - 2024-11-04T11:22:12Z + 2024-11-05T12:25:14Z Archived @@ -98327,7 +98327,7 @@

kubb (link)

Last Updated - 2024-11-04T18:07:22Z + 2024-11-05T20:19:33Z Archived @@ -98515,7 +98515,7 @@

full-stack-fastapi-template (link)

Stars - 27244 + 27270 Watchers @@ -98523,7 +98523,7 @@

full-stack-fastapi-template (link)

Forks - 4861 + 4872 Created @@ -98531,7 +98531,7 @@

full-stack-fastapi-template (link)

Last Updated - 2024-11-05T03:19:28Z + 2024-11-06T03:24:49Z Archived @@ -99755,7 +99755,7 @@

spring-boot-starter-tomcat (link)

Last Updated - 2024-10-31T16:45:24Z + 2024-11-05T21:46:08Z Archived @@ -108358,7 +108358,7 @@

swagger-models (link)

Stars - 7386 + 7387 Watchers @@ -108374,7 +108374,7 @@

swagger-models (link)

Last Updated - 2024-11-03T09:28:43Z + 2024-11-05T08:17:44Z Archived @@ -108409,7 +108409,7 @@

Microsoft.OpenApi.net (link)

Stars - 1403 + 1405 Watchers @@ -108417,7 +108417,7 @@

Microsoft.OpenApi.net (link)

Forks - 233 + 232 Created @@ -108425,7 +108425,7 @@

Microsoft.OpenApi.net (link)

Last Updated - 2024-11-04T23:45:02Z + 2024-11-05T23:58:58Z Archived @@ -109174,15 +109174,15 @@

PHP-CRUD-API (link)

Stars - 3598 + 3601 Watchers - 172 + 173 Forks - 1009 + 1008 Created @@ -109190,7 +109190,7 @@

PHP-CRUD-API (link)

Last Updated - 2024-11-02T09:57:38Z + 2024-11-05T13:51:02Z Archived @@ -110704,7 +110704,7 @@

LoopBack 4 (link)

Stars - 4958 + 4957 Watchers @@ -110720,7 +110720,7 @@

LoopBack 4 (link)

Last Updated - 2024-11-02T08:05:07Z + 2024-11-05T16:41:21Z Archived @@ -110806,7 +110806,7 @@

RESTler (link)

Stars - 2601 + 2602 Watchers @@ -110822,7 +110822,7 @@

RESTler (link)

Last Updated - 2024-11-05T00:03:40Z + 2024-11-05T16:22:22Z Archived diff --git a/docs/categories/auto-generators.html b/docs/categories/auto-generators.html index 81623220..95d711f4 100644 --- a/docs/categories/auto-generators.html +++ b/docs/categories/auto-generators.html @@ -91,7 +91,7 @@

Yes No No - 1224 + 1226 @@ -114,7 +114,7 @@

No Yes No - 5085 + 5087 @@ -137,7 +137,7 @@

No Yes No - 517 + 519 @@ -250,7 +250,7 @@

Yes Yes No - 3938 + 3941 @@ -273,7 +273,7 @@

No Yes No - 4481 + 4484 @@ -319,7 +319,7 @@

Yes Yes No - 2079 + 2082 @@ -373,11 +373,11 @@

Scramble (link)

Stars - 1224 + 1226 Watchers - 15 + 16 Forks @@ -389,7 +389,7 @@

Scramble (link)

Last Updated - 2024-11-04T07:10:17Z + 2024-11-06T00:24:29Z Archived @@ -424,7 +424,7 @@

mitmproxy2swagger (link)

Stars - 5085 + 5087 Watchers @@ -440,7 +440,7 @@

mitmproxy2swagger (link)

Last Updated - 2024-11-04T11:28:08Z + 2024-11-06T02:42:38Z Archived @@ -475,7 +475,7 @@

OpenApiSpecGeneratorPlugin (link)

Stars - 517 + 519 Watchers @@ -491,7 +491,7 @@

OpenApiSpecGeneratorPlugin (link)

Last Updated - 2024-11-04T16:11:12Z + 2024-11-05T19:47:49Z Archived @@ -730,7 +730,7 @@

OpenAPI DevTools (link)

Stars - 3938 + 3941 Watchers @@ -746,7 +746,7 @@

OpenAPI DevTools (link)

Last Updated - 2024-11-04T10:36:06Z + 2024-11-05T23:49:08Z Archived @@ -781,7 +781,7 @@

TypeSpec (link)

Stars - 4481 + 4484 Watchers @@ -797,7 +797,7 @@

TypeSpec (link)

Last Updated - 2024-11-05T02:41:57Z + 2024-11-06T02:36:33Z Archived @@ -848,7 +848,7 @@

Fuego (link)

Last Updated - 2024-11-04T22:56:36Z + 2024-11-05T22:22:12Z Archived @@ -883,7 +883,7 @@

Huma (link)

Stars - 2079 + 2082 Watchers @@ -899,7 +899,7 @@

Huma (link)

Last Updated - 2024-11-04T17:50:20Z + 2024-11-06T03:28:19Z Archived diff --git a/docs/categories/code-generators.html b/docs/categories/code-generators.html index 8fdf4465..83b56b50 100644 --- a/docs/categories/code-generators.html +++ b/docs/categories/code-generators.html @@ -114,7 +114,7 @@

No Yes Yes - 21769 + 21774 @@ -160,7 +160,7 @@

No Yes Yes - 2937 + 2941 @@ -248,7 +248,7 @@

No Yes Yes - 17016 + 17019 @@ -340,7 +340,7 @@

Yes Yes Yes - 2667 + 2669 @@ -386,7 +386,7 @@

Yes Yes No - 26545 + 26549 @@ -407,7 +407,7 @@

No Yes No - 7386 + 7387 @@ -430,7 +430,7 @@

No Yes No - 6263 + 6271 @@ -472,7 +472,7 @@

No Yes No - 1448 + 1449 @@ -514,7 +514,7 @@

No Yes No - 258 + 257 @@ -1381,7 +1381,7 @@

No Yes Yes - 3017 + 3022 @@ -1868,7 +1868,7 @@

No No No - 7386 + 7387 @@ -2168,7 +2168,7 @@

OpenAPI Generator (link)

Stars - 21769 + 21774 Watchers @@ -2176,7 +2176,7 @@

OpenAPI Generator (link)

Forks - 6565 + 6573 Created @@ -2184,7 +2184,7 @@

OpenAPI Generator (link)

Last Updated - 2024-11-05T01:02:32Z + 2024-11-06T03:08:15Z Archived @@ -2270,7 +2270,7 @@

Kiota Api Client Generator (link)

Stars - 2937 + 2941 Watchers @@ -2286,7 +2286,7 @@

Kiota Api Client Generator (link)

Last Updated - 2024-11-05T02:11:04Z + 2024-11-05T15:14:45Z Archived @@ -2474,7 +2474,7 @@

Swagger-Codegen (link)

Stars - 17016 + 17019 Watchers @@ -2490,7 +2490,7 @@

Swagger-Codegen (link)

Last Updated - 2024-11-04T18:53:05Z + 2024-11-05T20:39:33Z Archived @@ -2678,7 +2678,7 @@

🌿 Fern (link)

Stars - 2667 + 2669 Watchers @@ -2686,7 +2686,7 @@

🌿 Fern (link)

Forks - 148 + 149 Created @@ -2694,7 +2694,7 @@

🌿 Fern (link)

Last Updated - 2024-11-05T02:38:58Z + 2024-11-06T00:49:52Z Archived @@ -2780,15 +2780,15 @@

swagger-ui (link)

Stars - 26545 + 26549 Watchers - 650 + 649 Forks - 8957 + 8959 Created @@ -2796,7 +2796,7 @@

swagger-ui (link)

Last Updated - 2024-11-04T23:21:37Z + 2024-11-06T01:06:25Z Archived @@ -2831,7 +2831,7 @@

swagger-core (link)

Stars - 7386 + 7387 Watchers @@ -2847,7 +2847,7 @@

swagger-core (link)

Last Updated - 2024-11-03T09:28:43Z + 2024-11-05T08:17:44Z Archived @@ -2882,7 +2882,7 @@

OpenAPI Server Code Generator (oapi-cod Stars - 6263 + 6271 Watchers @@ -2898,7 +2898,7 @@

OpenAPI Server Code Generator (oapi-cod Last Updated - 2024-11-04T15:38:12Z + 2024-11-06T03:24:45Z Archived @@ -2941,7 +2941,7 @@

swagger-js (link)

Forks - 761 + 762 Created @@ -2949,7 +2949,7 @@

swagger-js (link)

Last Updated - 2024-11-01T23:13:25Z + 2024-11-05T10:23:30Z Archived @@ -2984,7 +2984,7 @@

openapi-generator-cli (link)

Stars - 1448 + 1449 Watchers @@ -3000,7 +3000,7 @@

openapi-generator-cli (link)

Last Updated - 2024-11-04T22:54:16Z + 2024-11-06T00:20:37Z Archived @@ -3086,7 +3086,7 @@

swagger-petstore (link)

Stars - 258 + 257 Watchers @@ -3102,7 +3102,7 @@

swagger-petstore (link)

Last Updated - 2024-11-02T10:04:36Z + 2024-11-05T16:58:28Z Archived @@ -3561,7 +3561,7 @@

hei-admin-api (link)

Last Updated - 2024-11-02T11:03:00Z + 2024-11-05T15:36:47Z Archived @@ -5177,7 +5177,7 @@

orval (link)

Stars - 3017 + 3022 Watchers @@ -5193,7 +5193,7 @@

orval (link)

Last Updated - 2024-11-04T20:33:58Z + 2024-11-05T18:10:06Z Archived @@ -5703,7 +5703,7 @@

kubb (link)

Last Updated - 2024-11-04T18:07:22Z + 2024-11-05T20:19:33Z Archived @@ -6350,7 +6350,7 @@

swagger-models (link)

Stars - 7386 + 7387 Watchers @@ -6366,7 +6366,7 @@

swagger-models (link)

Last Updated - 2024-11-03T09:28:43Z + 2024-11-05T08:17:44Z Archived diff --git a/docs/categories/converters.html b/docs/categories/converters.html index 9909dbe7..5a50f287 100644 --- a/docs/categories/converters.html +++ b/docs/categories/converters.html @@ -221,7 +221,7 @@

Yes Yes Yes - 1285 + 1296 @@ -267,7 +267,7 @@

No Yes No - 1663 + 1664 @@ -290,7 +290,7 @@

No No Yes - 9541 + 9542 @@ -493,7 +493,7 @@

Yes Yes No - 1329 + 1331 @@ -604,7 +604,7 @@

Yes Yes Yes - 5832 + 5838 @@ -625,7 +625,7 @@

No Yes No - 2097 + 2098 @@ -646,7 +646,7 @@

No Yes No - 705 + 707 @@ -709,7 +709,7 @@

No Yes No - 110 + 111 @@ -1470,7 +1470,7 @@

@hey-api/openapi-ts (link)

Stars - 1285 + 1296 Watchers @@ -1486,7 +1486,7 @@

@hey-api/openapi-ts (link)

Last Updated - 2024-11-04T23:29:00Z + 2024-11-06T02:46:25Z Archived @@ -1537,7 +1537,7 @@

portman (link)

Last Updated - 2024-11-01T17:12:44Z + 2024-11-05T18:55:55Z Archived @@ -1572,7 +1572,7 @@

Step CI (link)

Stars - 1663 + 1664 Watchers @@ -1588,7 +1588,7 @@

Step CI (link)

Last Updated - 2024-11-02T09:00:07Z + 2024-11-05T18:27:15Z Archived @@ -1623,7 +1623,7 @@

go-swagger (link)

Stars - 9541 + 9542 Watchers @@ -1631,7 +1631,7 @@

go-swagger (link)

Forks - 1253 + 1254 Created @@ -1639,7 +1639,7 @@

go-swagger (link)

Last Updated - 2024-11-04T19:07:18Z + 2024-11-05T09:57:47Z Archived @@ -2082,7 +2082,7 @@

openapi-python-client (link)

Stars - 1329 + 1331 Watchers @@ -2098,7 +2098,7 @@

openapi-python-client (link)

Last Updated - 2024-11-05T03:01:55Z + 2024-11-05T18:33:55Z Archived @@ -2337,11 +2337,11 @@

OpenAPI TypeScript (link)

Stars - 5832 + 5838 Watchers - 25 + 26 Forks @@ -2353,7 +2353,7 @@

OpenAPI TypeScript (link)

Last Updated - 2024-11-04T23:01:14Z + 2024-11-06T02:49:12Z Archived @@ -2388,7 +2388,7 @@

gnostic (link)

Stars - 2097 + 2098 Watchers @@ -2404,7 +2404,7 @@

gnostic (link)

Last Updated - 2024-11-02T08:47:37Z + 2024-11-06T03:24:48Z Archived @@ -2439,7 +2439,7 @@

oas-kit (link)

Stars - 705 + 707 Watchers @@ -2455,7 +2455,7 @@

oas-kit (link)

Last Updated - 2024-10-21T23:35:26Z + 2024-11-05T21:35:15Z Archived @@ -2592,7 +2592,7 @@

openapi (link)

Stars - 110 + 111 Watchers @@ -2608,7 +2608,7 @@

openapi (link)

Last Updated - 2024-10-26T08:19:13Z + 2024-11-05T20:24:53Z Archived diff --git a/docs/categories/data-validators.html b/docs/categories/data-validators.html index f9ccbec8..6af26484 100644 --- a/docs/categories/data-validators.html +++ b/docs/categories/data-validators.html @@ -154,7 +154,7 @@

No Yes No - 918 + 919 @@ -177,7 +177,7 @@

No Yes No - 1663 + 1664 @@ -242,7 +242,7 @@

No Yes Yes - 880 + 881 @@ -309,7 +309,7 @@

No Yes Yes - 2616 + 2618 @@ -527,7 +527,7 @@

Yes Yes Yes - 611 + 612 @@ -573,7 +573,7 @@

Yes Yes Yes - 188 + 189 @@ -640,7 +640,7 @@

Yes Yes Yes - 120 + 121 @@ -686,7 +686,7 @@

Yes Yes No - 2079 + 2082 @@ -2035,7 +2035,7 @@

tsoa (link)

Last Updated - 2024-11-04T18:30:10Z + 2024-11-05T21:32:44Z Archived @@ -2121,7 +2121,7 @@

express-openapi-validator (link)

Stars - 918 + 919 Watchers @@ -2137,7 +2137,7 @@

express-openapi-validator (link)

Last Updated - 2024-10-31T00:46:29Z + 2024-11-05T10:07:13Z Archived @@ -2172,7 +2172,7 @@

Step CI (link)

Stars - 1663 + 1664 Watchers @@ -2188,7 +2188,7 @@

Step CI (link)

Last Updated - 2024-11-02T09:00:07Z + 2024-11-05T18:27:15Z Archived @@ -2325,7 +2325,7 @@

committee (link)

Stars - 880 + 881 Watchers @@ -2341,7 +2341,7 @@

committee (link)

Last Updated - 2024-10-30T13:21:35Z + 2024-11-05T10:15:38Z Archived @@ -2478,7 +2478,7 @@

kin-openapi (link)

Stars - 2616 + 2618 Watchers @@ -2494,7 +2494,7 @@

kin-openapi (link)

Last Updated - 2024-11-04T09:45:31Z + 2024-11-06T03:24:44Z Archived @@ -2988,7 +2988,7 @@

vacuum (link)

Stars - 611 + 612 Watchers @@ -3004,7 +3004,7 @@

vacuum (link)

Last Updated - 2024-11-04T18:30:07Z + 2024-11-05T12:36:14Z Archived @@ -3090,7 +3090,7 @@

openapi-changes (link)

Stars - 188 + 189 Watchers @@ -3106,7 +3106,7 @@

openapi-changes (link)

Last Updated - 2024-11-03T17:30:17Z + 2024-11-05T10:04:10Z Archived @@ -3243,7 +3243,7 @@

wiretap (link)

Stars - 120 + 121 Watchers @@ -3259,7 +3259,7 @@

wiretap (link)

Last Updated - 2024-11-03T23:00:38Z + 2024-11-05T16:11:07Z Archived @@ -3310,7 +3310,7 @@

Fuego (link)

Last Updated - 2024-11-04T22:56:36Z + 2024-11-05T22:22:12Z Archived @@ -3345,7 +3345,7 @@

Huma (link)

Stars - 2079 + 2082 Watchers @@ -3361,7 +3361,7 @@

Huma (link)

Last Updated - 2024-11-04T17:50:20Z + 2024-11-06T03:28:19Z Archived diff --git a/docs/categories/description-validators.html b/docs/categories/description-validators.html index 21fef5d6..b707b968 100644 --- a/docs/categories/description-validators.html +++ b/docs/categories/description-validators.html @@ -153,7 +153,7 @@

No Yes No - 918 + 919 @@ -197,7 +197,7 @@

Yes Yes Yes - 2509 + 2512 @@ -262,7 +262,7 @@

Yes Yes Yes - 934 + 935 @@ -440,7 +440,7 @@

Yes Yes Yes - 611 + 612 @@ -1810,7 +1810,7 @@

express-openapi-validator (link)

Stars - 918 + 919 Watchers @@ -1826,7 +1826,7 @@

express-openapi-validator (link)

Last Updated - 2024-10-31T00:46:29Z + 2024-11-05T10:07:13Z Archived @@ -1912,7 +1912,7 @@

Spectral (link)

Stars - 2509 + 2512 Watchers @@ -1928,7 +1928,7 @@

Spectral (link)

Last Updated - 2024-11-04T14:42:45Z + 2024-11-06T02:09:40Z Archived @@ -2030,7 +2030,7 @@

OpenAPI Validator (link)

Last Updated - 2024-10-31T14:39:34Z + 2024-11-05T21:12:50Z Archived @@ -2065,7 +2065,7 @@

Redocly CLI (link)

Stars - 934 + 935 Watchers @@ -2081,7 +2081,7 @@

Redocly CLI (link)

Last Updated - 2024-11-04T13:19:05Z + 2024-11-05T11:24:24Z Archived @@ -2473,7 +2473,7 @@

vacuum (link)

Stars - 611 + 612 Watchers @@ -2489,7 +2489,7 @@

vacuum (link)

Last Updated - 2024-11-04T18:30:07Z + 2024-11-05T12:36:14Z Archived @@ -3297,7 +3297,7 @@

sbt-openapi-generator (link)

Forks - 34 + 35 Created @@ -3968,7 +3968,7 @@

redmine-openapi (link)

Last Updated - 2024-06-12T04:16:55Z + 2024-11-05T10:11:23Z Archived diff --git a/docs/categories/documentation.html b/docs/categories/documentation.html index 7343cdcd..e200015b 100644 --- a/docs/categories/documentation.html +++ b/docs/categories/documentation.html @@ -169,7 +169,7 @@

Yes Yes Yes - 7052 + 7062 @@ -192,7 +192,7 @@

Yes No No - 1224 + 1226 @@ -215,7 +215,7 @@

No Yes No - 1735 + 1740 @@ -259,7 +259,7 @@

Yes Yes Yes - 23555 + 23564 @@ -322,7 +322,7 @@

Yes Yes Yes - 647 + 648 @@ -544,7 +544,7 @@

Yes Yes Yes - 934 + 935 @@ -634,7 +634,7 @@

Yes Yes No - 3938 + 3941 @@ -722,7 +722,7 @@

Yes Yes Yes - 1795 + 1793 @@ -810,7 +810,7 @@

Yes Yes Yes - 78 + 79 @@ -877,7 +877,7 @@

Yes Yes Yes - 188 + 189 @@ -959,7 +959,7 @@

Yes Yes Yes - 2667 + 2669 @@ -1072,7 +1072,7 @@

Yes Yes No - 89 + 91 @@ -2602,7 +2602,7 @@

Scalar (link)

Stars - 7052 + 7062 Watchers @@ -2610,7 +2610,7 @@

Scalar (link)

Forks - 219 + 221 Created @@ -2618,7 +2618,7 @@

Scalar (link)

Last Updated - 2024-11-05T03:04:40Z + 2024-11-06T02:36:01Z Archived @@ -2653,11 +2653,11 @@

Scramble (link)

Stars - 1224 + 1226 Watchers - 15 + 16 Forks @@ -2669,7 +2669,7 @@

Scramble (link)

Last Updated - 2024-11-04T07:10:17Z + 2024-11-06T00:24:29Z Archived @@ -2704,7 +2704,7 @@

Scribe (link)

Stars - 1735 + 1740 Watchers @@ -2712,7 +2712,7 @@

Scribe (link)

Forks - 313 + 314 Created @@ -2720,7 +2720,7 @@

Scribe (link)

Last Updated - 2024-11-04T18:00:20Z + 2024-11-05T21:43:47Z Archived @@ -2806,7 +2806,7 @@

ReDoc (link)

Stars - 23555 + 23564 Watchers @@ -2822,7 +2822,7 @@

ReDoc (link)

Last Updated - 2024-11-04T20:45:52Z + 2024-11-06T03:32:46Z Archived @@ -2959,7 +2959,7 @@

OpenAPI-UI (link)

Stars - 647 + 648 Watchers @@ -2975,7 +2975,7 @@

OpenAPI-UI (link)

Last Updated - 2024-11-01T05:40:54Z + 2024-11-06T01:51:05Z Archived @@ -3469,7 +3469,7 @@

Redocly CLI (link)

Stars - 934 + 935 Watchers @@ -3485,7 +3485,7 @@

Redocly CLI (link)

Last Updated - 2024-11-04T13:19:05Z + 2024-11-05T11:24:24Z Archived @@ -3673,7 +3673,7 @@

OpenAPI DevTools (link)

Stars - 3938 + 3941 Watchers @@ -3689,7 +3689,7 @@

OpenAPI DevTools (link)

Last Updated - 2024-11-04T10:36:06Z + 2024-11-05T23:49:08Z Archived @@ -3877,7 +3877,7 @@

Elements (link)

Stars - 1795 + 1793 Watchers @@ -3893,7 +3893,7 @@

Elements (link)

Last Updated - 2024-11-05T02:04:14Z + 2024-11-05T18:54:09Z Archived @@ -4081,7 +4081,7 @@

MkDocs Swagger UI Tag (link)

Stars - 78 + 79 Watchers @@ -4097,7 +4097,7 @@

MkDocs Swagger UI Tag (link)

Last Updated - 2024-10-27T10:25:53Z + 2024-11-06T02:53:12Z Archived @@ -4234,7 +4234,7 @@

openapi-changes (link)

Stars - 188 + 189 Watchers @@ -4250,7 +4250,7 @@

openapi-changes (link)

Last Updated - 2024-11-03T17:30:17Z + 2024-11-05T10:04:10Z Archived @@ -4438,7 +4438,7 @@

🌿 Fern (link)

Stars - 2667 + 2669 Watchers @@ -4446,7 +4446,7 @@

🌿 Fern (link)

Forks - 148 + 149 Created @@ -4454,7 +4454,7 @@

🌿 Fern (link)

Last Updated - 2024-11-05T02:38:58Z + 2024-11-06T00:49:52Z Archived @@ -4693,7 +4693,7 @@

Zudoku (link)

Stars - 89 + 91 Watchers @@ -4709,7 +4709,7 @@

Zudoku (link)

Last Updated - 2024-11-04T21:18:16Z + 2024-11-05T20:54:02Z Archived @@ -5219,7 +5219,7 @@

data-fair (link)

Last Updated - 2024-11-04T17:13:53Z + 2024-11-05T15:48:24Z Archived diff --git a/docs/categories/dsl.html b/docs/categories/dsl.html index d68c221e..83698915 100644 --- a/docs/categories/dsl.html +++ b/docs/categories/dsl.html @@ -215,7 +215,7 @@

No Yes No - 2001 + 2002 @@ -619,7 +619,7 @@

rswag (link)

Stars - 2001 + 2002 Watchers @@ -627,7 +627,7 @@

rswag (link)

Forks - 431 + 432 Created @@ -635,7 +635,7 @@

rswag (link)

Last Updated - 2024-11-02T20:07:54Z + 2024-11-05T13:56:23Z Archived diff --git a/docs/categories/gateway.html b/docs/categories/gateway.html index 26f44450..7280c2bc 100644 --- a/docs/categories/gateway.html +++ b/docs/categories/gateway.html @@ -194,7 +194,7 @@

Yes Yes Yes - 59 + 60 @@ -217,7 +217,7 @@

Yes Yes Yes - 120 + 121 @@ -549,7 +549,7 @@

Serverless API Gateway (link)

Stars - 59 + 60 Watchers @@ -565,7 +565,7 @@

Serverless API Gateway (link)

Last Updated - 2024-11-03T20:26:53Z + 2024-11-05T23:34:21Z Archived @@ -600,7 +600,7 @@

wiretap (link)

Stars - 120 + 121 Watchers @@ -616,7 +616,7 @@

wiretap (link)

Last Updated - 2024-11-03T23:00:38Z + 2024-11-05T16:11:07Z Archived diff --git a/docs/categories/low-level-tooling.html b/docs/categories/low-level-tooling.html index e0b95664..d6aedbde 100644 --- a/docs/categories/low-level-tooling.html +++ b/docs/categories/low-level-tooling.html @@ -91,7 +91,7 @@

No Yes No - 3282 + 3285 @@ -1277,7 +1277,7 @@

No No No - 7386 + 7387 @@ -1300,7 +1300,7 @@

No No No - 1403 + 1405 @@ -1440,7 +1440,7 @@

springdoc-openapi (link)

Stars - 3282 + 3285 Watchers @@ -1456,7 +1456,7 @@

springdoc-openapi (link)

Last Updated - 2024-11-04T13:51:05Z + 2024-11-06T03:23:24Z Archived @@ -4296,7 +4296,7 @@

swagger-models (link)

Stars - 7386 + 7387 Watchers @@ -4312,7 +4312,7 @@

swagger-models (link)

Last Updated - 2024-11-03T09:28:43Z + 2024-11-05T08:17:44Z Archived @@ -4347,7 +4347,7 @@

Microsoft.OpenApi.net (link)

Stars - 1403 + 1405 Watchers @@ -4355,7 +4355,7 @@

Microsoft.OpenApi.net (link)

Forks - 233 + 232 Created @@ -4363,7 +4363,7 @@

Microsoft.OpenApi.net (link)

Last Updated - 2024-11-04T23:45:02Z + 2024-11-05T23:58:58Z Archived diff --git a/docs/categories/mock.html b/docs/categories/mock.html index 4d94a28d..f0c4ae99 100644 --- a/docs/categories/mock.html +++ b/docs/categories/mock.html @@ -110,7 +110,7 @@

Yes Yes Yes - 4304 + 4307 @@ -543,7 +543,7 @@

No Yes Yes - 3017 + 3022 @@ -821,7 +821,7 @@

Prism (link)

Stars - 4304 + 4307 Watchers @@ -837,7 +837,7 @@

Prism (link)

Last Updated - 2024-11-02T16:34:10Z + 2024-11-05T16:47:07Z Archived @@ -1449,7 +1449,7 @@

Specmatic (link)

Last Updated - 2024-11-04T11:47:27Z + 2024-11-05T11:16:33Z Archived @@ -1841,7 +1841,7 @@

orval (link)

Stars - 3017 + 3022 Watchers @@ -1857,7 +1857,7 @@

orval (link)

Last Updated - 2024-11-04T20:33:58Z + 2024-11-05T18:10:06Z Archived diff --git a/docs/categories/parsers.html b/docs/categories/parsers.html index 8e756289..301a21d7 100644 --- a/docs/categories/parsers.html +++ b/docs/categories/parsers.html @@ -91,7 +91,7 @@

Yes Yes Yes - 23555 + 23564 @@ -114,7 +114,7 @@

No Yes No - 738 + 739 @@ -696,7 +696,7 @@

No Yes No - 486 + 488 @@ -719,7 +719,7 @@

No Yes Yes - 2616 + 2618 @@ -828,7 +828,7 @@

No Yes Yes - 1403 + 1405 @@ -918,7 +918,7 @@

No No Yes - 9541 + 9542 @@ -1391,7 +1391,7 @@

Yes Yes No - 1329 + 1331 @@ -1483,7 +1483,7 @@

Yes Yes Yes - 78 + 79 @@ -1529,7 +1529,7 @@

Yes Yes Yes - 468 + 469 @@ -1686,7 +1686,7 @@

No Yes No - 2001 + 2002 @@ -1801,7 +1801,7 @@

Yes Yes No - 23555 + 23563 @@ -1822,7 +1822,7 @@

No Yes No - 1448 + 1449 @@ -1843,7 +1843,7 @@

No Yes No - 1414 + 1416 @@ -1864,7 +1864,7 @@

No Yes No - 1173 + 1174 @@ -1906,7 +1906,7 @@

No Yes No - 854 + 856 @@ -1948,7 +1948,7 @@

No Yes No - 705 + 707 @@ -1990,7 +1990,7 @@

Yes Yes No - 656 + 659 @@ -2402,7 +2402,7 @@

speakeasy - Build APIs your users love ❤️ with Speakeasy. Best in class, robust SDKs, terraform providers and contract tests for your API. OpenAPI first and native. + Build APIs your users love ❤️ with Speakeasy. Polished and type-safe SDKs, terraform providers and contract tests for your API. OpenAPI native. No @@ -2456,7 +2456,7 @@

No Yes No - 193 + 194 @@ -2605,7 +2605,7 @@

Yes Yes No - 120 + 121 @@ -2731,7 +2731,7 @@

No Yes No - 110 + 111 @@ -3004,7 +3004,7 @@

Yes Yes No - 68 + 69 @@ -3109,7 +3109,7 @@

No Yes No - 61 + 62 @@ -3193,7 +3193,7 @@

No Yes No - 54 + 55 @@ -8875,7 +8875,7 @@

Yes Yes No - 2454 + 2456 @@ -8896,7 +8896,7 @@

Yes No No - 65 + 67 @@ -10580,7 +10580,7 @@

No No No - 1403 + 1405 @@ -11089,7 +11089,7 @@

ReDoc (link)

Stars - 23555 + 23564 Watchers @@ -11105,7 +11105,7 @@

ReDoc (link)

Last Updated - 2024-11-04T20:45:52Z + 2024-11-06T03:32:46Z Archived @@ -11140,7 +11140,7 @@

oasdiff (link)

Stars - 738 + 739 Watchers @@ -11156,7 +11156,7 @@

oasdiff (link)

Last Updated - 2024-11-04T15:49:41Z + 2024-11-05T21:26:10Z Archived @@ -11972,7 +11972,7 @@

tsoa (link)

Last Updated - 2024-11-04T18:30:10Z + 2024-11-05T21:32:44Z Archived @@ -12466,7 +12466,7 @@

OpenAPI-TS (link)

Stars - 486 + 488 Watchers @@ -12482,7 +12482,7 @@

OpenAPI-TS (link)

Last Updated - 2024-11-02T09:03:08Z + 2024-11-05T14:13:51Z Archived @@ -12517,7 +12517,7 @@

kin-openapi (link)

Stars - 2616 + 2618 Watchers @@ -12533,7 +12533,7 @@

kin-openapi (link)

Last Updated - 2024-11-04T09:45:31Z + 2024-11-06T03:24:44Z Archived @@ -12737,7 +12737,7 @@

psx-api (link)

Last Updated - 2024-11-03T22:25:13Z + 2024-11-05T21:39:48Z Archived @@ -12772,7 +12772,7 @@

Microsoft/OpenAPI.NET (link)

Stars - 1403 + 1405 Watchers @@ -12780,7 +12780,7 @@

Microsoft/OpenAPI.NET (link)

Forks - 233 + 232 Created @@ -12788,7 +12788,7 @@

Microsoft/OpenAPI.NET (link)

Last Updated - 2024-11-04T23:45:02Z + 2024-11-05T23:58:58Z Archived @@ -12976,7 +12976,7 @@

go-swagger (link)

Stars - 9541 + 9542 Watchers @@ -12984,7 +12984,7 @@

go-swagger (link)

Forks - 1253 + 1254 Created @@ -12992,7 +12992,7 @@

go-swagger (link)

Last Updated - 2024-11-04T19:07:18Z + 2024-11-05T09:57:47Z Archived @@ -14047,7 +14047,7 @@

openapi-python-client (link)

Stars - 1329 + 1331 Watchers @@ -14063,7 +14063,7 @@

openapi-python-client (link)

Last Updated - 2024-11-05T03:01:55Z + 2024-11-05T18:33:55Z Archived @@ -14251,7 +14251,7 @@

MkDocs Swagger UI Tag (link)

Stars - 78 + 79 Watchers @@ -14267,7 +14267,7 @@

MkDocs Swagger UI Tag (link)

Last Updated - 2024-10-27T10:25:53Z + 2024-11-06T02:53:12Z Archived @@ -14353,7 +14353,7 @@

libopenapi (link)

Stars - 468 + 469 Watchers @@ -14369,7 +14369,7 @@

libopenapi (link)

Last Updated - 2024-11-02T16:37:30Z + 2024-11-06T02:45:08Z Archived @@ -14710,7 +14710,7 @@

rswag (link)

Stars - 2001 + 2002 Watchers @@ -14718,7 +14718,7 @@

rswag (link)

Forks - 431 + 432 Created @@ -14726,7 +14726,7 @@

rswag (link)

Last Updated - 2024-11-02T20:07:54Z + 2024-11-05T13:56:23Z Archived @@ -14965,7 +14965,7 @@

Redoc (link)

Stars - 23555 + 23563 Watchers @@ -14981,7 +14981,7 @@

Redoc (link)

Last Updated - 2024-11-04T20:45:52Z + 2024-11-06T02:49:36Z Archived @@ -15016,7 +15016,7 @@

openapi-generator-cli (link)

Stars - 1448 + 1449 Watchers @@ -15032,7 +15032,7 @@

openapi-generator-cli (link)

Last Updated - 2024-11-04T22:54:16Z + 2024-11-06T00:20:37Z Archived @@ -15067,7 +15067,7 @@

ogen (link)

Stars - 1414 + 1416 Watchers @@ -15083,7 +15083,7 @@

ogen (link)

Last Updated - 2024-11-04T00:20:51Z + 2024-11-06T03:31:37Z Archived @@ -15118,7 +15118,7 @@

apispec (link)

Stars - 1173 + 1174 Watchers @@ -15134,7 +15134,7 @@

apispec (link)

Last Updated - 2024-11-04T21:36:01Z + 2024-11-05T10:25:52Z Archived @@ -15220,7 +15220,7 @@

json-schema-validator (link)

Stars - 854 + 856 Watchers @@ -15236,7 +15236,7 @@

json-schema-validator (link)

Last Updated - 2024-11-04T06:42:19Z + 2024-11-05T08:15:02Z Archived @@ -15322,7 +15322,7 @@

oas-kit (link)

Stars - 705 + 707 Watchers @@ -15338,7 +15338,7 @@

oas-kit (link)

Last Updated - 2024-10-21T23:35:26Z + 2024-11-05T21:35:15Z Archived @@ -15424,7 +15424,7 @@

openapi-tui (link)

Stars - 656 + 659 Watchers @@ -15440,7 +15440,7 @@

openapi-tui (link)

Last Updated - 2024-11-03T21:01:31Z + 2024-11-05T21:50:15Z Archived @@ -15491,7 +15491,7 @@

awesome-openapi3 (link)

Last Updated - 2024-11-05T00:00:52Z + 2024-11-06T00:02:48Z Archived @@ -16460,7 +16460,7 @@

speakeasy (link)

Last Updated - 2024-11-04T23:55:24Z + 2024-11-05T23:40:44Z Archived @@ -16546,7 +16546,7 @@

refitter (link)

Stars - 193 + 194 Watchers @@ -16562,7 +16562,7 @@

refitter (link)

Last Updated - 2024-11-04T12:06:11Z + 2024-11-05T22:52:47Z Archived @@ -16903,7 +16903,7 @@

learn.openapis.org (link)

Stars - 120 + 121 Watchers @@ -16919,7 +16919,7 @@

learn.openapis.org (link)

Last Updated - 2024-10-23T02:36:41Z + 2024-11-05T10:12:27Z Archived @@ -17209,7 +17209,7 @@

openapi (link)

Stars - 110 + 111 Watchers @@ -17225,7 +17225,7 @@

openapi (link)

Last Updated - 2024-10-26T08:19:13Z + 2024-11-05T20:24:53Z Archived @@ -17872,7 +17872,7 @@

apidom (link)

Stars - 68 + 69 Watchers @@ -17888,7 +17888,7 @@

apidom (link)

Last Updated - 2024-11-05T00:00:48Z + 2024-11-06T03:01:20Z Archived @@ -18092,7 +18092,7 @@

openapi3-parser (link)

Last Updated - 2024-10-28T11:28:50Z + 2024-11-05T22:06:51Z Archived @@ -18127,7 +18127,7 @@

openapi (link)

Stars - 61 + 62 Watchers @@ -18143,7 +18143,7 @@

openapi (link)

Last Updated - 2024-10-09T12:40:35Z + 2024-11-05T06:23:02Z Archived @@ -18331,7 +18331,7 @@

rest (link)

Stars - 54 + 55 Watchers @@ -18347,7 +18347,7 @@

rest (link)

Last Updated - 2024-11-01T18:07:58Z + 2024-11-05T17:07:56Z Archived @@ -32101,7 +32101,7 @@

utoipa (link)

Stars - 2454 + 2456 Watchers @@ -32109,7 +32109,7 @@

utoipa (link)

Forks - 188 + 189 Created @@ -32117,7 +32117,7 @@

utoipa (link)

Last Updated - 2024-11-04T19:25:15Z + 2024-11-06T02:41:17Z Archived @@ -32152,7 +32152,7 @@

oas_rails (link)

Stars - 65 + 67 Watchers @@ -32168,7 +32168,7 @@

oas_rails (link)

Last Updated - 2024-11-04T07:33:43Z + 2024-11-05T13:25:04Z Archived @@ -36232,7 +36232,7 @@

Microsoft.OpenApi.net (link)

Stars - 1403 + 1405 Watchers @@ -36240,7 +36240,7 @@

Microsoft.OpenApi.net (link)

Forks - 233 + 232 Created @@ -36248,7 +36248,7 @@

Microsoft.OpenApi.net (link)

Last Updated - 2024-11-04T23:45:02Z + 2024-11-05T23:58:58Z Archived diff --git a/docs/categories/sdk.html b/docs/categories/sdk.html index fdde8526..0017eae1 100644 --- a/docs/categories/sdk.html +++ b/docs/categories/sdk.html @@ -114,7 +114,7 @@

No Yes Yes - 21769 + 21774 @@ -160,7 +160,7 @@

No Yes Yes - 2937 + 2941 @@ -229,7 +229,7 @@

Yes Yes Yes - 1285 + 1296 @@ -313,7 +313,7 @@

No No Yes - 9541 + 9542 @@ -382,7 +382,7 @@

No Yes Yes - 6776 + 6779 @@ -426,7 +426,7 @@

No Yes Yes - 4618 + 4620 @@ -537,7 +537,7 @@

No Yes Yes - 12694 + 12698 @@ -765,7 +765,7 @@

Yes Yes Yes - 2667 + 2669 @@ -878,7 +878,7 @@

Yes Yes Yes - 5832 + 5838 @@ -899,7 +899,7 @@

No Yes No - 4128 + 4130 @@ -920,7 +920,7 @@

No Yes No - 3871 + 3873 @@ -3190,7 +3190,7 @@

OpenAPI Generator (link)

Stars - 21769 + 21774 Watchers @@ -3198,7 +3198,7 @@

OpenAPI Generator (link)

Forks - 6565 + 6573 Created @@ -3206,7 +3206,7 @@

OpenAPI Generator (link)

Last Updated - 2024-11-05T01:02:32Z + 2024-11-06T03:08:15Z Archived @@ -3292,7 +3292,7 @@

Kiota Api Client Generator (link)

Stars - 2937 + 2941 Watchers @@ -3308,7 +3308,7 @@

Kiota Api Client Generator (link)

Last Updated - 2024-11-05T02:11:04Z + 2024-11-05T15:14:45Z Archived @@ -3445,7 +3445,7 @@

@hey-api/openapi-ts (link)

Stars - 1285 + 1296 Watchers @@ -3461,7 +3461,7 @@

@hey-api/openapi-ts (link)

Last Updated - 2024-11-04T23:29:00Z + 2024-11-06T02:46:25Z Archived @@ -3649,7 +3649,7 @@

go-swagger (link)

Stars - 9541 + 9542 Watchers @@ -3657,7 +3657,7 @@

go-swagger (link)

Forks - 1253 + 1254 Created @@ -3665,7 +3665,7 @@

go-swagger (link)

Last Updated - 2024-11-04T19:07:18Z + 2024-11-05T09:57:47Z Archived @@ -3802,7 +3802,7 @@

NSwag (link)

Stars - 6776 + 6779 Watchers @@ -3818,7 +3818,7 @@

NSwag (link)

Last Updated - 2024-11-04T20:21:10Z + 2024-11-06T01:32:43Z Archived @@ -3904,7 +3904,7 @@

Azure AutoRest (link)

Stars - 4618 + 4620 Watchers @@ -3920,7 +3920,7 @@

Azure AutoRest (link)

Last Updated - 2024-11-04T13:19:00Z + 2024-11-06T01:59:17Z Archived @@ -4159,7 +4159,7 @@

OWASP ZAP (link)

Stars - 12694 + 12698 Watchers @@ -4175,7 +4175,7 @@

OWASP ZAP (link)

Last Updated - 2024-11-05T00:22:40Z + 2024-11-06T01:07:03Z Archived @@ -4669,7 +4669,7 @@

🌿 Fern (link)

Stars - 2667 + 2669 Watchers @@ -4677,7 +4677,7 @@

🌿 Fern (link)

Forks - 148 + 149 Created @@ -4685,7 +4685,7 @@

🌿 Fern (link)

Last Updated - 2024-11-05T02:38:58Z + 2024-11-06T00:49:52Z Archived @@ -4924,11 +4924,11 @@

OpenAPI TypeScript (link)

Stars - 5832 + 5838 Watchers - 25 + 26 Forks @@ -4940,7 +4940,7 @@

OpenAPI TypeScript (link)

Last Updated - 2024-11-04T23:01:14Z + 2024-11-06T02:49:12Z Archived @@ -4975,7 +4975,7 @@

knife4j (link)

Stars - 4128 + 4130 Watchers @@ -4991,7 +4991,7 @@

knife4j (link)

Last Updated - 2024-11-04T03:20:08Z + 2024-11-05T13:26:44Z Archived @@ -5026,7 +5026,7 @@

openapi-directory (link)

Stars - 3871 + 3873 Watchers @@ -5042,7 +5042,7 @@

openapi-directory (link)

Last Updated - 2024-11-02T23:31:22Z + 2024-11-05T11:47:45Z Archived @@ -5756,7 +5756,7 @@

sample-quarkus-applications (link)

Last Updated - 2024-11-03T01:31:29Z + 2024-11-05T15:14:40Z Archived @@ -5858,7 +5858,7 @@

backbase-openapi-tools (link)

Last Updated - 2024-11-04T15:14:30Z + 2024-11-05T11:53:16Z Archived diff --git a/docs/categories/security.html b/docs/categories/security.html index 24b208a8..f8701e4b 100644 --- a/docs/categories/security.html +++ b/docs/categories/security.html @@ -240,7 +240,7 @@

No Yes Yes - 12694 + 12698 @@ -326,7 +326,7 @@

No Yes Yes - 2601 + 2602 @@ -737,7 +737,7 @@

OWASP ZAP (link)

Stars - 12694 + 12698 Watchers @@ -753,7 +753,7 @@

OWASP ZAP (link)

Last Updated - 2024-11-05T00:22:40Z + 2024-11-06T01:07:03Z Archived @@ -941,7 +941,7 @@

RESTler (link)

Stars - 2601 + 2602 Watchers @@ -957,7 +957,7 @@

RESTler (link)

Last Updated - 2024-11-05T00:03:40Z + 2024-11-05T16:22:22Z Archived diff --git a/docs/categories/server-implementations.html b/docs/categories/server-implementations.html index b7e2afd6..15b324f6 100644 --- a/docs/categories/server-implementations.html +++ b/docs/categories/server-implementations.html @@ -91,7 +91,7 @@

No Yes Yes - 4489 + 4490 @@ -137,7 +137,7 @@

Yes No No - 1224 + 1226 @@ -298,7 +298,7 @@

Yes Yes Yes - 8933 + 8935 @@ -344,7 +344,7 @@

Yes Yes Yes - 4304 + 4307 @@ -367,7 +367,7 @@

No Yes Yes - 8672 + 8675 @@ -434,7 +434,7 @@

Yes Yes Yes - 934 + 935 @@ -480,7 +480,7 @@

No Yes No - 5085 + 5087 @@ -503,7 +503,7 @@

No Yes No - 517 + 519 @@ -549,7 +549,7 @@

No Yes No - 4481 + 4484 @@ -616,7 +616,7 @@

No Yes No - 28379 + 28384 @@ -754,7 +754,7 @@

Yes Yes Yes - 59 + 60 @@ -800,7 +800,7 @@

No Yes No - 77214 + 77246 @@ -823,7 +823,7 @@

No Yes No - 3282 + 3285 @@ -844,7 +844,7 @@

No Yes No - 2705 + 2706 @@ -865,7 +865,7 @@

No Yes No - 2386 + 2388 @@ -886,7 +886,7 @@

No Yes No - 2382 + 2384 @@ -909,7 +909,7 @@

No Yes No - 2282 + 2283 @@ -974,7 +974,7 @@

No Yes No - 1034 + 1036 @@ -1039,7 +1039,7 @@

No Yes No - 517 + 522 @@ -1102,7 +1102,7 @@

No Yes No - 404 + 405 @@ -1123,7 +1123,7 @@

No Yes No - 385 + 389 @@ -1230,7 +1230,7 @@

No Yes No - 317 + 320 @@ -1293,7 +1293,7 @@

No Yes No - 258 + 257 @@ -1314,7 +1314,7 @@

No Yes No - 248 + 251 @@ -1461,7 +1461,7 @@

Yes Yes No - 120 + 121 @@ -1503,7 +1503,7 @@

No Yes No - 108 + 109 @@ -2007,7 +2007,7 @@

No Yes No - 33 + 34 @@ -9405,7 +9405,7 @@

No Yes No - 27244 + 27270 @@ -11322,7 +11322,7 @@

No No No - 3598 + 3601 @@ -11825,7 +11825,7 @@

Connexion (link)

Stars - 4489 + 4490 Watchers @@ -11841,7 +11841,7 @@

Connexion (link)

Last Updated - 2024-11-04T22:12:37Z + 2024-11-05T12:41:13Z Archived @@ -11927,11 +11927,11 @@

Scramble (link)

Stars - 1224 + 1226 Watchers - 15 + 16 Forks @@ -11943,7 +11943,7 @@

Scramble (link)

Last Updated - 2024-11-04T07:10:17Z + 2024-11-06T00:24:29Z Archived @@ -12249,7 +12249,7 @@

VSCode OpenAPI Editor (link)

Last Updated - 2024-11-04T15:57:01Z + 2024-11-05T16:34:14Z Archived @@ -12284,7 +12284,7 @@

Swagger Editor (link)

Stars - 8933 + 8935 Watchers @@ -12292,7 +12292,7 @@

Swagger Editor (link)

Forks - 2253 + 2254 Created @@ -12300,7 +12300,7 @@

Swagger Editor (link)

Last Updated - 2024-11-04T17:56:40Z + 2024-11-05T10:09:30Z Archived @@ -12386,7 +12386,7 @@

Prism (link)

Stars - 4304 + 4307 Watchers @@ -12402,7 +12402,7 @@

Prism (link)

Last Updated - 2024-11-02T16:34:10Z + 2024-11-05T16:47:07Z Archived @@ -12437,7 +12437,7 @@

API Platform (link)

Stars - 8672 + 8675 Watchers @@ -12453,7 +12453,7 @@

API Platform (link)

Last Updated - 2024-11-04T23:52:02Z + 2024-11-06T02:17:10Z Archived @@ -12590,7 +12590,7 @@

Redocly CLI (link)

Stars - 934 + 935 Watchers @@ -12606,7 +12606,7 @@

Redocly CLI (link)

Last Updated - 2024-11-04T13:19:05Z + 2024-11-05T11:24:24Z Archived @@ -12692,7 +12692,7 @@

mitmproxy2swagger (link)

Stars - 5085 + 5087 Watchers @@ -12708,7 +12708,7 @@

mitmproxy2swagger (link)

Last Updated - 2024-11-04T11:28:08Z + 2024-11-06T02:42:38Z Archived @@ -12743,7 +12743,7 @@

OpenApiSpecGeneratorPlugin (link)

Stars - 517 + 519 Watchers @@ -12759,7 +12759,7 @@

OpenApiSpecGeneratorPlugin (link)

Last Updated - 2024-11-04T16:11:12Z + 2024-11-05T19:47:49Z Archived @@ -12845,7 +12845,7 @@

TypeSpec (link)

Stars - 4481 + 4484 Watchers @@ -12861,7 +12861,7 @@

TypeSpec (link)

Last Updated - 2024-11-05T02:41:57Z + 2024-11-06T02:36:33Z Archived @@ -12998,7 +12998,7 @@

Django REST Framework (link)

Stars - 28379 + 28384 Watchers @@ -13006,7 +13006,7 @@

Django REST Framework (link)

Forks - 6840 + 6841 Created @@ -13014,7 +13014,7 @@

Django REST Framework (link)

Last Updated - 2024-11-05T02:54:24Z + 2024-11-06T02:37:29Z Archived @@ -13304,7 +13304,7 @@

Serverless API Gateway (link)

Stars - 59 + 60 Watchers @@ -13320,7 +13320,7 @@

Serverless API Gateway (link)

Last Updated - 2024-11-03T20:26:53Z + 2024-11-05T23:34:21Z Archived @@ -13406,7 +13406,7 @@

FastAPI (link)

Stars - 77214 + 77246 Watchers @@ -13414,7 +13414,7 @@

FastAPI (link)

Forks - 6598 + 6600 Created @@ -13422,7 +13422,7 @@

FastAPI (link)

Last Updated - 2024-11-05T03:22:49Z + 2024-11-06T03:24:26Z Archived @@ -13457,7 +13457,7 @@

springdoc-openapi (link)

Stars - 3282 + 3285 Watchers @@ -13473,7 +13473,7 @@

springdoc-openapi (link)

Last Updated - 2024-11-04T13:51:05Z + 2024-11-06T03:23:24Z Archived @@ -13508,7 +13508,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Stars - 2705 + 2706 Watchers @@ -13524,7 +13524,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Last Updated - 2024-11-04T22:26:10Z + 2024-11-06T01:54:43Z Archived @@ -13559,7 +13559,7 @@

drf-spectacular (link)

Stars - 2386 + 2388 Watchers @@ -13575,7 +13575,7 @@

drf-spectacular (link)

Last Updated - 2024-11-04T21:59:17Z + 2024-11-06T00:32:36Z Archived @@ -13610,7 +13610,7 @@

msgspec (link)

Stars - 2382 + 2384 Watchers @@ -13626,7 +13626,7 @@

msgspec (link)

Last Updated - 2024-11-04T10:09:23Z + 2024-11-05T23:16:50Z Archived @@ -13661,7 +13661,7 @@

Schemathesis (link)

Stars - 2282 + 2283 Watchers @@ -13677,7 +13677,7 @@

Schemathesis (link)

Last Updated - 2024-11-04T23:00:02Z + 2024-11-05T10:46:50Z Archived @@ -13814,7 +13814,7 @@

apiflask (link)

Stars - 1034 + 1036 Watchers @@ -13830,7 +13830,7 @@

apiflask (link)

Last Updated - 2024-11-04T14:43:11Z + 2024-11-05T20:24:52Z Archived @@ -13967,7 +13967,7 @@

stackql (link)

Stars - 517 + 522 Watchers @@ -13983,7 +13983,7 @@

stackql (link)

Last Updated - 2024-10-30T21:43:04Z + 2024-11-06T01:43:12Z Archived @@ -14120,7 +14120,7 @@

safrs (link)

Stars - 404 + 405 Watchers @@ -14136,7 +14136,7 @@

safrs (link)

Last Updated - 2024-11-03T02:44:35Z + 2024-11-05T14:22:56Z Archived @@ -14171,7 +14171,7 @@

fastapi-clean-example (link)

Stars - 385 + 389 Watchers @@ -14187,7 +14187,7 @@

fastapi-clean-example (link)

Last Updated - 2024-11-04T07:07:18Z + 2024-11-06T02:13:39Z Archived @@ -14426,7 +14426,7 @@

chanfana (link)

Stars - 317 + 320 Watchers @@ -14442,7 +14442,7 @@

chanfana (link)

Last Updated - 2024-11-04T22:23:01Z + 2024-11-06T02:31:33Z Archived @@ -14493,7 +14493,7 @@

esmerald (link)

Last Updated - 2024-11-03T14:29:45Z + 2024-11-05T19:25:02Z Archived @@ -14579,7 +14579,7 @@

swagger-petstore (link)

Stars - 258 + 257 Watchers @@ -14595,7 +14595,7 @@

swagger-petstore (link)

Last Updated - 2024-11-02T10:04:36Z + 2024-11-05T16:58:28Z Archived @@ -14630,7 +14630,7 @@

typescript-backend-toolkit (link)

Stars - 248 + 251 Watchers @@ -14646,7 +14646,7 @@

typescript-backend-toolkit (link)

Last Updated - 2024-11-05T00:16:42Z + 2024-11-05T23:36:25Z Archived @@ -14736,7 +14736,7 @@

thema (link)

Watchers - 143 + 144 Forks @@ -14987,7 +14987,7 @@

learn.openapis.org (link)

Stars - 120 + 121 Watchers @@ -15003,7 +15003,7 @@

learn.openapis.org (link)

Last Updated - 2024-10-23T02:36:41Z + 2024-11-05T10:12:27Z Archived @@ -15089,7 +15089,7 @@

go-swagger3 (link)

Stars - 108 + 109 Watchers @@ -15105,7 +15105,7 @@

go-swagger3 (link)

Last Updated - 2024-11-02T16:02:25Z + 2024-11-05T05:32:02Z Archived @@ -15258,7 +15258,7 @@

tools.openapis.org (link)

Last Updated - 2024-11-04T03:38:51Z + 2024-11-05T03:39:27Z Archived @@ -15768,7 +15768,7 @@

swagger-editor-validate (link)

Last Updated - 2024-10-29T04:59:38Z + 2024-11-05T04:19:16Z Archived @@ -16313,7 +16313,7 @@

spring-boot-swagger-3-example (link) Stars - 33 + 34 Watchers @@ -16329,7 +16329,7 @@

spring-boot-swagger-3-example (link) Last Updated - 2024-08-06T03:49:00Z + 2024-11-05T18:16:26Z Archived @@ -16380,7 +16380,7 @@

data-fair (link)

Last Updated - 2024-11-04T17:13:53Z + 2024-11-05T15:48:24Z Archived @@ -21429,7 +21429,7 @@

redmine-openapi (link)

Last Updated - 2024-06-12T04:16:55Z + 2024-11-05T10:11:23Z Archived @@ -22449,7 +22449,7 @@

pyapi-server (link)

Last Updated - 2024-07-25T14:14:21Z + 2024-11-05T21:54:05Z Archived @@ -23316,7 +23316,7 @@

go-aas-proxy (link)

Last Updated - 2024-11-01T14:03:39Z + 2024-11-05T18:57:50Z Archived @@ -29785,7 +29785,7 @@

membrane-core (link)

Forks - 2 + 3 Created @@ -31272,7 +31272,7 @@

train-travel-api (link)

Last Updated - 2024-10-31T12:21:16Z + 2024-11-05T13:50:34Z Archived @@ -34265,7 +34265,7 @@

full-stack-fastapi-template (link)

Stars - 27244 + 27270 Watchers @@ -34273,7 +34273,7 @@

full-stack-fastapi-template (link)

Forks - 4861 + 4872 Created @@ -34281,7 +34281,7 @@

full-stack-fastapi-template (link)

Last Updated - 2024-11-05T03:19:28Z + 2024-11-06T03:24:49Z Archived @@ -34893,7 +34893,7 @@

spring-boot-starter-tomcat (link)

Last Updated - 2024-10-31T16:45:24Z + 2024-11-05T21:46:08Z Archived @@ -38906,15 +38906,15 @@

PHP-CRUD-API (link)

Stars - 3598 + 3601 Watchers - 172 + 173 Forks - 1009 + 1008 Created @@ -38922,7 +38922,7 @@

PHP-CRUD-API (link)

Last Updated - 2024-11-02T09:57:38Z + 2024-11-05T13:51:02Z Archived diff --git a/docs/categories/server.html b/docs/categories/server.html index d54063bb..fa7d676b 100644 --- a/docs/categories/server.html +++ b/docs/categories/server.html @@ -91,7 +91,7 @@

No Yes Yes - 4489 + 4490 @@ -229,7 +229,7 @@

No Yes Yes - 8672 + 8675 @@ -342,7 +342,7 @@

No Yes No - 1693 + 1692 @@ -546,7 +546,7 @@

Yes Yes Yes - 2667 + 2669 @@ -615,7 +615,7 @@

Yes Yes No - 2079 + 2082 @@ -2750,7 +2750,7 @@

No Yes No - 4958 + 4957 @@ -2871,7 +2871,7 @@

Connexion (link)

Stars - 4489 + 4490 Watchers @@ -2887,7 +2887,7 @@

Connexion (link)

Last Updated - 2024-11-04T22:12:37Z + 2024-11-05T12:41:13Z Archived @@ -2938,7 +2938,7 @@

tsoa (link)

Last Updated - 2024-11-04T18:30:10Z + 2024-11-05T21:32:44Z Archived @@ -3177,7 +3177,7 @@

API Platform (link)

Stars - 8672 + 8675 Watchers @@ -3193,7 +3193,7 @@

API Platform (link)

Last Updated - 2024-11-04T23:52:02Z + 2024-11-06T02:17:10Z Archived @@ -3432,7 +3432,7 @@

@nestjs/swagger (link)

Stars - 1693 + 1692 Watchers @@ -3448,7 +3448,7 @@

@nestjs/swagger (link)

Last Updated - 2024-11-05T02:04:08Z + 2024-11-05T14:03:37Z Archived @@ -3891,7 +3891,7 @@

🌿 Fern (link)

Stars - 2667 + 2669 Watchers @@ -3899,7 +3899,7 @@

🌿 Fern (link)

Forks - 148 + 149 Created @@ -3907,7 +3907,7 @@

🌿 Fern (link)

Last Updated - 2024-11-05T02:38:58Z + 2024-11-06T00:49:52Z Archived @@ -4009,7 +4009,7 @@

Fuego (link)

Last Updated - 2024-11-04T22:56:36Z + 2024-11-05T22:22:12Z Archived @@ -4044,7 +4044,7 @@

Huma (link)

Stars - 2079 + 2082 Watchers @@ -4060,7 +4060,7 @@

Huma (link)

Last Updated - 2024-11-04T17:50:20Z + 2024-11-06T03:28:19Z Archived @@ -4150,7 +4150,7 @@

thema (link)

Watchers - 143 + 144 Forks @@ -9195,7 +9195,7 @@

LoopBack 4 (link)

Stars - 4958 + 4957 Watchers @@ -9211,7 +9211,7 @@

LoopBack 4 (link)

Last Updated - 2024-11-02T08:05:07Z + 2024-11-05T16:41:21Z Archived diff --git a/docs/categories/testing-tools.html b/docs/categories/testing-tools.html index 3d1dd2da..6bb1dc31 100644 --- a/docs/categories/testing-tools.html +++ b/docs/categories/testing-tools.html @@ -91,7 +91,7 @@

Yes Yes Yes - 120 + 121 @@ -114,7 +114,7 @@

No Yes No - 2282 + 2283 @@ -191,7 +191,7 @@

wiretap (link)

Stars - 120 + 121 Watchers @@ -207,7 +207,7 @@

wiretap (link)

Last Updated - 2024-11-03T23:00:38Z + 2024-11-05T16:11:07Z Archived @@ -242,7 +242,7 @@

Schemathesis (link)

Stars - 2282 + 2283 Watchers @@ -258,7 +258,7 @@

Schemathesis (link)

Last Updated - 2024-11-04T23:00:02Z + 2024-11-05T10:46:50Z Archived diff --git a/docs/categories/testing.html b/docs/categories/testing.html index 761d184a..1a0c7649 100644 --- a/docs/categories/testing.html +++ b/docs/categories/testing.html @@ -240,7 +240,7 @@

No Yes No - 1663 + 1664 @@ -631,7 +631,7 @@

Yes Yes Yes - 188 + 189 @@ -677,7 +677,7 @@

Yes Yes Yes - 120 + 121 @@ -717,7 +717,7 @@

No Yes No - 6498 + 6509 @@ -738,7 +738,7 @@

No Yes No - 547 + 548 @@ -885,7 +885,7 @@

No Yes No - 110 + 112 @@ -2640,7 +2640,7 @@

No Yes Yes - 2601 + 2602 @@ -3056,7 +3056,7 @@

portman (link)

Last Updated - 2024-11-01T17:12:44Z + 2024-11-05T18:55:55Z Archived @@ -3091,7 +3091,7 @@

Step CI (link)

Stars - 1663 + 1664 Watchers @@ -3107,7 +3107,7 @@

Step CI (link)

Last Updated - 2024-11-02T09:00:07Z + 2024-11-05T18:27:15Z Archived @@ -3974,7 +3974,7 @@

Specmatic (link)

Last Updated - 2024-11-04T11:47:27Z + 2024-11-05T11:16:33Z Archived @@ -4009,7 +4009,7 @@

openapi-changes (link)

Stars - 188 + 189 Watchers @@ -4025,7 +4025,7 @@

openapi-changes (link)

Last Updated - 2024-11-03T17:30:17Z + 2024-11-05T10:04:10Z Archived @@ -4111,7 +4111,7 @@

wiretap (link)

Stars - 120 + 121 Watchers @@ -4127,7 +4127,7 @@

wiretap (link)

Last Updated - 2024-11-03T23:00:38Z + 2024-11-05T16:11:07Z Archived @@ -4213,7 +4213,7 @@

mockoon (link)

Stars - 6498 + 6509 Watchers @@ -4221,7 +4221,7 @@

mockoon (link)

Forks - 387 + 386 Created @@ -4229,7 +4229,7 @@

mockoon (link)

Last Updated - 2024-11-05T01:30:15Z + 2024-11-05T20:00:37Z Archived @@ -4264,7 +4264,7 @@

hibiapi (link)

Stars - 547 + 548 Watchers @@ -4280,7 +4280,7 @@

hibiapi (link)

Last Updated - 2024-11-05T02:54:48Z + 2024-11-05T22:35:13Z Archived @@ -4621,7 +4621,7 @@

moclojer (link)

Stars - 110 + 112 Watchers @@ -4637,7 +4637,7 @@

moclojer (link)

Last Updated - 2024-11-01T07:41:24Z + 2024-11-05T23:13:08Z Archived @@ -5045,7 +5045,7 @@

mockoon.com (link)

Last Updated - 2024-11-04T15:34:46Z + 2024-11-05T14:36:49Z Archived @@ -7442,7 +7442,7 @@

EvoMaster (link)

Last Updated - 2024-11-04T11:22:12Z + 2024-11-05T12:25:14Z Archived @@ -8854,7 +8854,7 @@

RESTler (link)

Stars - 2601 + 2602 Watchers @@ -8870,7 +8870,7 @@

RESTler (link)

Last Updated - 2024-11-05T00:03:40Z + 2024-11-05T16:22:22Z Archived diff --git a/docs/categories/text-editors.html b/docs/categories/text-editors.html index a3aa3d51..491f7c17 100644 --- a/docs/categories/text-editors.html +++ b/docs/categories/text-editors.html @@ -157,7 +157,7 @@

Yes Yes Yes - 8933 + 8935 @@ -508,7 +508,7 @@

VSCode OpenAPI Editor (link)

Last Updated - 2024-11-04T15:57:01Z + 2024-11-05T16:34:14Z Archived @@ -594,7 +594,7 @@

Swagger Editor (link)

Stars - 8933 + 8935 Watchers @@ -602,7 +602,7 @@

Swagger Editor (link)

Forks - 2253 + 2254 Created @@ -610,7 +610,7 @@

Swagger Editor (link)

Last Updated - 2024-11-04T17:56:40Z + 2024-11-05T10:09:30Z Archived diff --git a/docs/categories/unclassified.html b/docs/categories/unclassified.html index 7d83ef1e..40829044 100644 --- a/docs/categories/unclassified.html +++ b/docs/categories/unclassified.html @@ -1208,7 +1208,7 @@

modelina (link)

Forks - 183 + 184 Created @@ -1463,7 +1463,7 @@

oas3-chow-chow (link)

Forks - 25 + 26 Created diff --git a/docs/categories/user-interfaces.html b/docs/categories/user-interfaces.html index 49c254c8..ca4afe93 100644 --- a/docs/categories/user-interfaces.html +++ b/docs/categories/user-interfaces.html @@ -91,7 +91,7 @@

Yes Yes No - 26545 + 26549 @@ -114,7 +114,7 @@

Yes Yes No - 23555 + 23563 @@ -275,15 +275,15 @@

swagger-ui (link)

Stars - 26545 + 26549 Watchers - 650 + 649 Forks - 8957 + 8959 Created @@ -291,7 +291,7 @@

swagger-ui (link)

Last Updated - 2024-11-04T23:21:37Z + 2024-11-06T01:06:25Z Archived @@ -326,7 +326,7 @@

Redoc (link)

Stars - 23555 + 23563 Watchers @@ -342,7 +342,7 @@

Redoc (link)

Last Updated - 2024-11-04T20:45:52Z + 2024-11-06T02:49:36Z Archived diff --git a/src/_data/tools.yaml b/src/_data/tools.yaml index 171d3885..30eb8d58 100644 --- a/src/_data/tools.yaml +++ b/src/_data/tools.yaml @@ -142,17 +142,17 @@ Connexion is a modern Python web framework that makes spec-first and api-first development easy. created: '2015-05-19T13:05:58Z' - updated: '2024-11-04T22:12:37Z' + updated: '2024-11-05T12:41:13Z' language: Python archived: false - stars: 4489 + stars: 4490 watchers: 83 forks: 763 owner: spec-first logo: https://avatars.githubusercontent.com/u/58754196?v=4 license: Apache-2.0 - repoEtag: '"87783e8b021aeb56269e513895f89b95d2ced10361eb7ba59ce8c2f89f04f968"' - repoLastModified: Mon, 04 Nov 2024 22:12:37 GMT + repoEtag: '"a0c9670b58beb10104f76578680757ecb447cf62709023239d8e357bde0be33c"' + repoLastModified: Tue, 05 Nov 2024 12:41:13 GMT foundInMaster: true homepage: https://github.com/zalando/connexion id: 2d575abdf2671028868058b2442d9131 @@ -281,17 +281,17 @@ References                                        ✨ 1st-Class OpenAPI/Swagger Support created: '2023-08-16T13:42:32Z' - updated: '2024-11-05T03:04:40Z' + updated: '2024-11-06T02:36:01Z' language: TypeScript archived: false - stars: 7052 + stars: 7062 watchers: 23 - forks: 219 + forks: 221 owner: scalar logo: https://avatars.githubusercontent.com/u/301879?v=4 license: MIT - repoEtag: '"eb55554397e2e378c2be289ba2857a100da6ddf985b6b29f7407a2d740beca97"' - repoLastModified: Tue, 05 Nov 2024 03:04:40 GMT + repoEtag: '"870741ee66aa89246a12fb53c439bb13b780863d595ea0cfa65547c27a947c69"' + repoLastModified: Wed, 06 Nov 2024 02:36:01 GMT foundInMaster: true - source: https://openapi.tools/ name: Scramble @@ -319,17 +319,17 @@ Modern Laravel OpenAPI (Swagger) documentation generator. No PHPDoc annotations required. created: '2022-08-05T17:16:20Z' - updated: '2024-11-04T07:10:17Z' + updated: '2024-11-06T00:24:29Z' language: PHP archived: false - stars: 1224 - watchers: 15 + stars: 1226 + watchers: 16 forks: 118 owner: dedoc logo: https://avatars.githubusercontent.com/u/93313138?v=4 license: MIT - repoEtag: '"ed4ac8510132a684aea68254b9ca2571cf46089dfd1e726afe06193fae2ba2f4"' - repoLastModified: Mon, 04 Nov 2024 07:10:17 GMT + repoEtag: '"89ed7c0a641609cc343b1386bd138ffe868989f2068ddad23b2d8b18aeec2912"' + repoLastModified: Wed, 06 Nov 2024 00:24:29 GMT foundInMaster: true - source: https://openapi.tools/ name: Scribe @@ -350,17 +350,17 @@ repositoryId: 260729799 description: Generate API documentation for humans from your Laravel codebase.✍ created: '2020-05-02T16:36:45Z' - updated: '2024-11-04T18:00:20Z' + updated: '2024-11-05T21:43:47Z' language: PHP archived: false - stars: 1735 + stars: 1740 watchers: 17 - forks: 313 + forks: 314 owner: knuckleswtf logo: https://avatars.githubusercontent.com/u/63367037?v=4 license: MIT - repoEtag: '"b5ddac1fbf6d0a17fb8ca081e51e97d37feca8c3e6459fc34d4a9f191b0da291"' - repoLastModified: Mon, 04 Nov 2024 18:00:20 GMT + repoEtag: '"a5956632da27839b55c12351a8108de8d23f52dec000877439aad4a7b9f8c8e4"' + repoLastModified: Tue, 05 Nov 2024 21:43:47 GMT foundInMaster: true - source: https://openapi.tools/ name: Supermodel @@ -407,17 +407,17 @@ repositoryId: 45250726 description: 📘 OpenAPI/Swagger-generated API Reference Documentation created: '2015-10-30T12:53:02Z' - updated: '2024-11-04T20:45:52Z' + updated: '2024-11-06T03:32:46Z' language: TypeScript archived: false - stars: 23555 + stars: 23564 watchers: 296 forks: 2300 owner: Redocly logo: https://avatars.githubusercontent.com/u/32099856?v=4 license: MIT - repoEtag: '"74d9b7a23ca763b0e3751dc7aaf39a1ed77acce8b1291eb1b84341171e9a6854"' - repoLastModified: Mon, 04 Nov 2024 20:45:52 GMT + repoEtag: '"5c7673627e9560987bb22d3d2998f62f55bb0059be78bfb9f99f10a2f922505a"' + repoLastModified: Wed, 06 Nov 2024 03:32:46 GMT foundInMaster: true - source: https://openapi.tools/ name: RestCase Docs @@ -479,17 +479,17 @@ also simplified postman tool. 基于 OpenAPI/Swagger 规范的接口文档,快速模拟请求参数并调用接口,也是简化版 postman 工具,欢迎提功能请求、bug created: '2023-12-20T14:51:12Z' - updated: '2024-11-01T05:40:54Z' + updated: '2024-11-06T01:51:05Z' language: TypeScript archived: false - stars: 647 + stars: 648 watchers: 2 forks: 59 owner: rookie-luochao logo: https://avatars.githubusercontent.com/u/22948077?v=4 license: MIT - repoEtag: '"7acd037c03932ee1327bbec9b0da14d0ce55f32505d36e6390cbb384604a6123"' - repoLastModified: Fri, 01 Nov 2024 05:40:54 GMT + repoEtag: '"9c1c2445d4aaa97505251dc1d433e505a63c2b88efa0ff2e57ea6bdac09b25fa"' + repoLastModified: Wed, 06 Nov 2024 01:51:05 GMT category: Documentation foundInMaster: true v3_1: true @@ -514,17 +514,17 @@ repositoryId: 337689065 description: OpenAPI Diff and Breaking Changes created: '2021-02-10T10:28:36Z' - updated: '2024-11-04T15:49:41Z' + updated: '2024-11-05T21:26:10Z' language: Go archived: false - stars: 738 + stars: 739 watchers: 9 forks: 62 owner: Tufin logo: https://avatars.githubusercontent.com/u/5352131?v=4 license: Apache-2.0 - repoEtag: '"c9fb33e4c7f44b8c72d8d6619b5842f593cd0f63566573b5456aac960eb6ee5b"' - repoLastModified: Mon, 04 Nov 2024 15:49:41 GMT + repoEtag: '"8ccd82563ceabcb63e7ed63278101e0d75a85d7cd6349c1e3dabed72037a5626"' + repoLastModified: Tue, 05 Nov 2024 21:26:10 GMT foundInMaster: true name: oasdiff language: Go @@ -1037,17 +1037,17 @@ generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3) created: '2018-05-12T09:57:56Z' - updated: '2024-11-05T01:02:32Z' + updated: '2024-11-06T03:08:15Z' language: Java archived: false - stars: 21769 + stars: 21774 watchers: 221 - forks: 6565 + forks: 6573 owner: OpenAPITools logo: https://avatars.githubusercontent.com/u/37325267?v=4 license: Apache-2.0 - repoEtag: '"4869d4f803229e8e885e4af00e6d0d1a2368e3f424b10be1530233076d7891c9"' - repoLastModified: Tue, 05 Nov 2024 01:02:32 GMT + repoEtag: '"373d34e18c7a8dbf8bfa6d1a459fcb0447bb95e28a4d41c52482c95a8e28b9a9"' + repoLastModified: Wed, 06 Nov 2024 03:08:15 GMT foundInMaster: true id: 0418f8afcd0196c648d1a46c0c5c20d1 v3_1_link: https://github.com/OpenAPITools/openapi-generator/issues/9083 @@ -1121,17 +1121,17 @@ repositoryId: 323665366 description: OpenAPI based HTTP Client code generator created: '2020-12-22T15:35:49Z' - updated: '2024-11-05T02:11:04Z' + updated: '2024-11-05T15:14:45Z' language: C# archived: false - stars: 2937 + stars: 2941 watchers: 45 forks: 205 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"8fc6e5fbee9470a165c97631389e5293cf117fc1974388439dfd1a729eb9112a"' - repoLastModified: Tue, 05 Nov 2024 02:11:04 GMT + repoEtag: '"6863e3dff01bea4bf6d486371520a7cc0dbb0d7f35ea454bee3b5fd67c00f2b7"' + repoLastModified: Tue, 05 Nov 2024 15:14:45 GMT foundInMaster: true - source: https://openapi.tools/ name: FabriKt @@ -1286,7 +1286,7 @@ repositoryId: 190430086 description: VisualStudio Code OpenAPI tools created: '2019-06-05T16:27:53Z' - updated: '2024-11-04T15:57:01Z' + updated: '2024-11-05T16:34:14Z' language: TypeScript archived: false stars: 335 @@ -1295,8 +1295,8 @@ owner: 42Crunch logo: https://avatars.githubusercontent.com/u/25365245?v=4 license: AGPL-3.0 - repoEtag: '"3c7fd970cfb3e48ac2fa3cd0e1b8ad4e685d7d9b5791608345ab1e0d70036fff"' - repoLastModified: Mon, 04 Nov 2024 15:57:01 GMT + repoEtag: '"65d901e022391e2b463888ff824354b9624645d1e762741d3d50d49316c13a0f"' + repoLastModified: Tue, 05 Nov 2024 16:34:14 GMT foundInMaster: true id: 782ecbb10f1ff8ac9685e0ed24e52e58 v3_1: false @@ -1361,17 +1361,17 @@ repositoryId: 19390712 description: Swagger Editor created: '2014-05-02T22:47:10Z' - updated: '2024-11-04T17:56:40Z' + updated: '2024-11-05T10:09:30Z' language: JavaScript archived: false - stars: 8933 + stars: 8935 watchers: 260 - forks: 2253 + forks: 2254 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"003c374cc85a2b4412ab18efd365a3786c1d7ed7cc41d17c89a67caeb00ff41a"' - repoLastModified: Mon, 04 Nov 2024 17:56:40 GMT + repoEtag: '"5ec6bbae0445f9ab4ea6a858240f68005f4b9b74db4f9ab9830fe2b66fa14177"' + repoLastModified: Tue, 05 Nov 2024 10:09:30 GMT foundInMaster: true id: 951cf61d12c812ef9b201ad76b5d278d v3_1: true @@ -1524,7 +1524,7 @@ owner: Apicurio logo: https://avatars.githubusercontent.com/u/28107283?v=4 license: Apache-2.0 - repoEtag: '"1c19bceabedb8258f8dbd6274b0a82dbbde660cd3b8eee398a776e8dbb01d629"' + repoEtag: '"5da990af5d95a49d2fd9cc97139105e6e9d6da5233d00a4179ab3fe43d7877b8"' repoLastModified: Fri, 01 Nov 2024 16:12:52 GMT foundInMaster: true homepage: https://github.com/Apicurio/apicurio-studio @@ -1731,17 +1731,17 @@ Turn any OpenAPI2/3 and Postman Collection file into an API server with mocking, transformations and validations. created: '2016-03-18T03:52:09Z' - updated: '2024-11-02T16:34:10Z' + updated: '2024-11-05T16:47:07Z' language: TypeScript archived: false - stars: 4304 + stars: 4307 watchers: 55 forks: 347 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: Apache-2.0 - repoEtag: '"d721d98295d562f38db211963fafb1bd2bf15ccd6ad3b99671a97ea734bcca33"' - repoLastModified: Sat, 02 Nov 2024 16:34:10 GMT + repoEtag: '"6204e5245d25d3be2dfe062b39f38c4bf1770f022df9b8163155d95cfbdee2f4"' + repoLastModified: Tue, 05 Nov 2024 16:47:07 GMT foundInMaster: true useMasterProperties: true id: 15aad8cd322242e03733b07f2a37890a @@ -1783,7 +1783,7 @@ owner: microcks logo: https://avatars.githubusercontent.com/u/11051048?v=4 license: Apache-2.0 - repoEtag: '"3a9c1ac94e8807e823d791a7d461ede1f96d195f882b2927f29d0eb7fd497ff6"' + repoEtag: '"cedbbeb0f6b5200cfacd5e1a44afb62e1ce53630182aa62bf798bd4cb34b87e8"' repoLastModified: Mon, 04 Nov 2024 17:18:44 GMT foundInMaster: true id: 1c0e918b5a733b0f1726199e3ea101d6 @@ -1953,7 +1953,7 @@ repositoryId: 61366800 description: Build OpenAPI-compliant REST APIs using TypeScript and Node created: '2016-06-17T10:42:50Z' - updated: '2024-11-04T18:30:10Z' + updated: '2024-11-05T21:32:44Z' language: TypeScript archived: false stars: 3556 @@ -1962,8 +1962,8 @@ owner: lukeautry logo: https://avatars.githubusercontent.com/u/8770560?v=4 license: MIT - repoEtag: '"d717bada086f6e15d1d2d0c67bcd5774fa84bd73b4aef4e552cec6e8957da4f0"' - repoLastModified: Mon, 04 Nov 2024 18:30:10 GMT + repoEtag: '"b0c10fb7765b9fe87b90f88c0513bf3b75ae8c7f2009b8c0c94bce3ee12460a2"' + repoLastModified: Tue, 05 Nov 2024 21:32:44 GMT foundInMaster: true id: 2529db76d3d9f042b0c624f65b13fc41 - source: @@ -1983,17 +1983,17 @@ 🚀 The OpenAPI to TypeScript codegen. Generate clients, SDKs, validators, and more. Support: @mrlubos created: '2024-01-10T15:19:25Z' - updated: '2024-11-04T23:29:00Z' + updated: '2024-11-06T02:46:25Z' language: TypeScript archived: false - stars: 1285 + stars: 1296 watchers: 6 forks: 102 owner: hey-api logo: https://avatars.githubusercontent.com/u/164436240?v=4 license: NOASSERTION - repoEtag: '"80414c566ed99f28a74743e624e776066c3ff820d6341ca99cb0c33ac56564a6"' - repoLastModified: Mon, 04 Nov 2024 23:29:00 GMT + repoEtag: '"5eb4b9aafb81ce9eddbb6c9819146626c9c34462f510d211bcd21e40a6e9836f"' + repoLastModified: Wed, 06 Nov 2024 02:46:25 GMT category: - Converters - SDK @@ -2170,17 +2170,17 @@ 🕸️ Create REST and GraphQL APIs, scaffold Jamstack webapps, stream changes in real-time. created: '2015-03-06T21:46:05Z' - updated: '2024-11-04T23:52:02Z' + updated: '2024-11-06T02:17:10Z' language: TypeScript archived: false - stars: 8672 + stars: 8675 watchers: 213 forks: 961 owner: api-platform logo: https://avatars.githubusercontent.com/u/13420081?v=4 license: MIT - repoEtag: '"88dd72370531004d0e06a2808d2af09f01117095d4185f35504293f8567d4c43"' - repoLastModified: Mon, 04 Nov 2024 23:52:02 GMT + repoEtag: '"a3bb18df6cd67172986c4eeff284e496cda4ebd7a216fef91602486576d40ade"' + repoLastModified: Wed, 06 Nov 2024 02:17:10 GMT foundInMaster: true id: d14f5904300aabf1ceef4660a6b3d57e - source: https://openapi.tools/ @@ -2352,17 +2352,17 @@ repositoryId: 105440153 description: 'OpenAPI (Swagger) module for Nest framework (node.js) :earth_americas:' created: '2017-10-01T12:20:24Z' - updated: '2024-11-05T02:04:08Z' + updated: '2024-11-05T14:03:37Z' language: TypeScript archived: false - stars: 1693 + stars: 1692 watchers: 30 forks: 474 owner: nestjs logo: https://avatars.githubusercontent.com/u/28507035?v=4 license: MIT - repoEtag: '"f4a63706b6609ff132d9f0ca4c1c66f52341baace8f46fe22e0b5bf22828e8bf"' - repoLastModified: Tue, 05 Nov 2024 02:04:08 GMT + repoEtag: '"899cec04c0b47959a61964a98612d05d83fa226da30c71a48fffde1b0a873953"' + repoLastModified: Tue, 05 Nov 2024 14:03:37 GMT foundInMaster: true id: 7071babd9853fc901c5decfa9b465b67 - source: @@ -2494,17 +2494,17 @@ 🦋 Auto-validates api requests, responses, and securities using ExpressJS and an OpenAPI 3.x specification created: '2019-03-19T19:08:05Z' - updated: '2024-10-31T00:46:29Z' + updated: '2024-11-05T10:07:13Z' language: TypeScript archived: false - stars: 918 + stars: 919 watchers: 19 forks: 209 owner: cdimascio logo: https://avatars.githubusercontent.com/u/4706618?v=4 license: MIT - repoEtag: '"925b549d3b930bf18504d94b61f38fa74114b9c5afad21ac5896731f3db78f61"' - repoLastModified: Thu, 31 Oct 2024 00:46:29 GMT + repoEtag: '"8ae32f3ab3524f360756a15710231a6183d9752c14bbdee9e208b7daf094129c"' + repoLastModified: Tue, 05 Nov 2024 10:07:13 GMT foundInMaster: true id: 3a27bc1a71642e0c1c020c41dc66e206 - source: https://openapi.tools/ @@ -2567,7 +2567,7 @@ Port OpenAPI Specs to Postman Collections, inject test suite and run via Newman 👨🏽‍🚀 created: '2021-05-05T10:42:29Z' - updated: '2024-11-01T17:12:44Z' + updated: '2024-11-05T18:55:55Z' language: TypeScript archived: false stars: 636 @@ -2576,8 +2576,8 @@ owner: apideck-libraries logo: https://avatars.githubusercontent.com/u/73573473?v=4 license: Apache-2.0 - repoEtag: '"356dc67be6b0d7de4695d808f09e9f4bd2519678206e15f47ceebd5867f6b4ae"' - repoLastModified: Fri, 01 Nov 2024 17:12:44 GMT + repoEtag: '"15d8667541b7216fcc61006e33277678bcee9abeac1bd2b6af8afc1123900873"' + repoLastModified: Tue, 05 Nov 2024 18:55:55 GMT foundInMaster: true id: a03cdb329f630a946a946dfe26802c43 - source: https://openapi.tools/ @@ -2605,17 +2605,17 @@ repositoryId: 537500924 description: Automated API Testing and Quality Assurance created: '2022-09-16T14:48:21Z' - updated: '2024-11-02T09:00:07Z' + updated: '2024-11-05T18:27:15Z' language: TypeScript archived: false - stars: 1663 + stars: 1664 watchers: 14 forks: 78 owner: stepci logo: https://avatars.githubusercontent.com/u/61350067?v=4 license: MPL-2.0 - repoEtag: '"d8a1d7b234d7972a3f6f9a9b2f5e7dd675fcba0e240f57c2026ddb2029ebaaf4"' - repoLastModified: Sat, 02 Nov 2024 09:00:07 GMT + repoEtag: '"7fa14503581b8c924f2620479e54b42b6ea810a648e1f9a705872e61ae80c926"' + repoLastModified: Tue, 05 Nov 2024 18:27:15 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -2652,7 +2652,7 @@ owner: cdimascio logo: https://avatars.githubusercontent.com/u/4706618?v=4 license: NOASSERTION - repoEtag: '"ecc1a0445a80639c2b9f0f8bc5c0447dc984e4e776cf8f5a24bcdf16ea018548"' + repoEtag: '"f2e722e0edc408d8a939864896d2876bc9bb77b8d59db3c5db9efa80ae9b6d78"' repoLastModified: Sat, 12 Oct 2024 18:14:56 GMT foundInMaster: true id: 73c574b5f31d77e560375bfaef2b65eb @@ -2686,17 +2686,17 @@ baked in support for OpenAPI (v3.1, v3.0, and v2.0), Arazzo v1.0, as well as AsyncAPI v2.x. created: '2018-08-15T18:43:18Z' - updated: '2024-11-04T14:42:45Z' + updated: '2024-11-06T02:09:40Z' language: TypeScript archived: false - stars: 2509 + stars: 2512 watchers: 33 forks: 239 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: Apache-2.0 - repoEtag: '"ceff7196dc4fb4ad01e25940bedc56fd06e9ee169a790a40ca18685d2bf85904"' - repoLastModified: Mon, 04 Nov 2024 14:42:45 GMT + repoEtag: '"0c1230ae479a0b3841765ecff056bafbbd58b670f56f9d4892e39ddfb3e97f0e"' + repoLastModified: Wed, 06 Nov 2024 02:09:40 GMT foundInMaster: true id: fab3cc58898cd8953a30e43cc622e0fe - source: https://openapi.tools/ @@ -2750,7 +2750,7 @@ repositoryId: 153173690 description: Configurable and extensible validator/linter for OpenAPI documents created: '2018-10-15T19:59:22Z' - updated: '2024-10-31T14:39:34Z' + updated: '2024-11-05T21:12:50Z' language: JavaScript archived: false stars: 498 @@ -2759,8 +2759,8 @@ owner: IBM logo: https://avatars.githubusercontent.com/u/1459110?v=4 license: Apache-2.0 - repoEtag: '"855e95fe0ebc02680a5bb54ff0e120770b84c191bcedfc44512a57a4051df880"' - repoLastModified: Thu, 31 Oct 2024 14:39:34 GMT + repoEtag: '"3d29b316b6e682cc992c5375c5778f667fed64f90453ac8b66936dc8819e6ad0"' + repoLastModified: Tue, 05 Nov 2024 21:12:50 GMT foundInMaster: true id: 0bf7dd29a9d07232135bb00764928296 v3_1: true @@ -2782,17 +2782,17 @@ ⚒️ Redocly CLI makes OpenAPI easy. Lint/validate to any standard, generate beautiful docs, and more. created: '2019-09-10T14:56:25Z' - updated: '2024-11-04T13:19:05Z' + updated: '2024-11-05T11:24:24Z' language: TypeScript archived: false - stars: 934 + stars: 935 watchers: 28 forks: 146 owner: Redocly logo: https://avatars.githubusercontent.com/u/32099856?v=4 license: MIT - repoEtag: '"2eafd1bf7b43fe0810ccdd2748f3d1c83568d01992f4ed1b00721f2cb2e9e37e"' - repoLastModified: Mon, 04 Nov 2024 13:19:05 GMT + repoEtag: '"a4115e355ae1c081bc35cfd65fbe54f0d42a734aec44dc16adc3b28f8eef15ed"' + repoLastModified: Tue, 05 Nov 2024 11:24:24 GMT category: - Description Validators - Documentation @@ -2871,17 +2871,17 @@ repositoryId: 14134534 description: A collection of Rack middleware to support JSON Schema. created: '2013-11-05T07:05:45Z' - updated: '2024-10-30T13:21:35Z' + updated: '2024-11-05T10:15:38Z' language: Ruby archived: false - stars: 880 + stars: 881 watchers: 17 forks: 135 owner: interagent logo: https://avatars.githubusercontent.com/u/7388387?v=4 license: MIT - repoEtag: '"168d8428fa01802007d57cc9d755c6aec87d9cb9b83193caeeb3f05cc65005d8"' - repoLastModified: Wed, 30 Oct 2024 13:21:35 GMT + repoEtag: '"b1e6c9b3c409c704e827c042b25c4fd7d8bcb53b4f4d82185fb4b19dcd8cb91a"' + repoLastModified: Tue, 05 Nov 2024 10:15:38 GMT foundInMaster: true id: 64f8f7a816e2d8825abd1a213d9e3fb5 - source: @@ -3137,17 +3137,17 @@ repositoryId: 84108450 description: TS Model & utils for creating and exposing OpenAPI 3.x contracts. created: '2017-03-06T18:47:56Z' - updated: '2024-11-02T09:03:08Z' + updated: '2024-11-05T14:13:51Z' language: TypeScript archived: false - stars: 486 + stars: 488 watchers: 7 forks: 64 owner: metadevpro logo: https://avatars.githubusercontent.com/u/24300914?v=4 license: MIT - repoEtag: '"347acc5717b54911e55ffec31d303f8e05b9441e9b956474d17f665dd5530196"' - repoLastModified: Sat, 02 Nov 2024 09:03:08 GMT + repoEtag: '"5eea20fe102e27d67e030b365cf9020a4173737fbbb47792ac0965cdb2226e77"' + repoLastModified: Tue, 05 Nov 2024 14:13:51 GMT foundInMaster: true id: 390339b2a28f2e5660519a2422c29196 - source: @@ -3174,17 +3174,17 @@ OpenAPI 3.0 (and Swagger v2) implementation for Go (parsing, converting, validation, and more) created: '2017-06-11T20:12:06Z' - updated: '2024-11-04T09:45:31Z' + updated: '2024-11-06T03:24:44Z' language: Go archived: false - stars: 2616 + stars: 2618 watchers: 23 forks: 429 owner: getkin logo: https://avatars.githubusercontent.com/u/40365715?v=4 license: MIT - repoEtag: '"3c4a4e62f008b45f72b043d320f860dd2ca40ae285cad01a9fca6f71d339afe2"' - repoLastModified: Mon, 04 Nov 2024 09:45:31 GMT + repoEtag: '"3a123686983c8ad8a3777bc59b7590d4215f644120b85eb8d1d49ee9f45701fb"' + repoLastModified: Wed, 06 Nov 2024 03:24:44 GMT foundInMaster: true v2: true id: f6838ce08e87fa4c3dc813c97193ece3 @@ -3266,7 +3266,7 @@ owner: cebe logo: https://avatars.githubusercontent.com/u/189796?v=4 license: MIT - repoEtag: '"519d332f0eceeb0b2c8d7f5fb08aa2036b94848a93a9e640fb4bbbb4a442a488"' + repoEtag: '"0bf031803e85de7eb8bc74cf67213f6f441689a2aa1aedf6e1f5e509c583d7d5"' repoLastModified: Fri, 25 Oct 2024 06:24:36 GMT foundInMaster: true v3_1_link: https://github.com/cebe/php-openapi/pull/128 @@ -3349,7 +3349,7 @@ repositoryId: 55149439 description: TypeAPI parser and SDK code generator created: '2016-03-31T12:39:05Z' - updated: '2024-11-03T22:25:13Z' + updated: '2024-11-05T21:39:48Z' language: PHP archived: false stars: 36 @@ -3358,8 +3358,8 @@ owner: apioo logo: https://avatars.githubusercontent.com/u/18172950?v=4 license: Apache-2.0 - repoEtag: '"b7ac4c85a8ef6cb815241be26b195e608bd0d47d36d82588726980fe7400c72d"' - repoLastModified: Sun, 03 Nov 2024 22:25:13 GMT + repoEtag: '"61d989365948eef00e513c43d5f1a5acd5ab4dd7492ff8e7115ebb061513df3d"' + repoLastModified: Tue, 05 Nov 2024 21:39:48 GMT foundInMaster: true id: ee32e280cf10ca5103c9b9e144021b91 - source: https://openapi.tools/ @@ -3383,17 +3383,17 @@ in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model. created: '2017-07-14T00:24:14Z' - updated: '2024-11-04T23:45:02Z' + updated: '2024-11-05T23:58:58Z' language: C# archived: false - stars: 1403 + stars: 1405 watchers: 64 - forks: 233 + forks: 232 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"26236ed985c2ea045cfa74d8521524f817d9a37181f85829847cbf09a22a3b72"' - repoLastModified: Mon, 04 Nov 2024 23:45:02 GMT + repoEtag: '"1f4081014debbad2ae7020ee5fe57fa5dc87de46f0ec4361061f0efc39680e20"' + repoLastModified: Tue, 05 Nov 2024 23:58:58 GMT foundInMaster: true id: 1066748bb5b1f114a70856a29fee4aa7 - source: @@ -3590,17 +3590,17 @@ repositoryId: 26726495 description: Swagger 2.0 implementation for go created: '2014-11-16T20:13:15Z' - updated: '2024-11-04T19:07:18Z' + updated: '2024-11-05T09:57:47Z' language: Go archived: false - stars: 9541 + stars: 9542 watchers: 120 - forks: 1253 + forks: 1254 owner: go-swagger logo: https://avatars.githubusercontent.com/u/10362650?v=4 license: Apache-2.0 - repoEtag: '"680f5424e0e12af4933e462a5d2e6bef0ac2eb39aacd83898237f82034831fff"' - repoLastModified: Mon, 04 Nov 2024 19:07:18 GMT + repoEtag: '"e0588d11f6737f21567578ecc6538b3788f75db213668c9aad651b91d337b946"' + repoLastModified: Tue, 05 Nov 2024 09:57:47 GMT foundInMaster: true id: ef136df9ffb40bb33ccbd76665d8f5b4 - source: https://openapi.tools/ @@ -3693,17 +3693,17 @@ repositoryId: 41822320 description: 'The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript. ' created: '2015-09-02T19:11:57Z' - updated: '2024-11-04T20:21:10Z' + updated: '2024-11-06T01:32:43Z' language: C# archived: false - stars: 6776 + stars: 6779 watchers: 167 forks: 1291 owner: RicoSuter logo: https://avatars.githubusercontent.com/u/2603405?v=4 license: MIT - repoEtag: '"122799dc9d85f1a86db53c57fc785db1a59b93e350f654c0935e3e61df69e19e"' - repoLastModified: Mon, 04 Nov 2024 20:21:10 GMT + repoEtag: '"2af6d23469cda4679ee604e71519664201a69b39dedd0a6100dbd967298bd68e"' + repoLastModified: Wed, 06 Nov 2024 01:32:43 GMT foundInMaster: true id: 93636e95435e95198d7d15c9d507f0d3 - source: https://openapi.tools/ @@ -3766,17 +3766,17 @@ documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. created: '2011-07-06T14:26:48Z' - updated: '2024-11-04T18:53:05Z' + updated: '2024-11-05T20:39:33Z' language: Mustache archived: false - stars: 17016 + stars: 17019 watchers: 413 forks: 6030 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"595bd6ed1b1ba954215aeea3bc1593d53db50e5736c667321be380e425a33a9a"' - repoLastModified: Mon, 04 Nov 2024 18:53:05 GMT + repoEtag: '"79d85c7de5d9854c62145792cea9f6f6738faa31004193f233a537456f661218"' + repoLastModified: Tue, 05 Nov 2024 20:39:33 GMT foundInMaster: true id: eda1e66e1b7805496e42f57851791a32 - source: https://openapi.tools/ @@ -3800,17 +3800,17 @@ OpenAPI (f.k.a Swagger) Specification code generator. Supports C#, PowerShell, Go, Java, Node.js, TypeScript, Python created: '2015-02-20T23:02:54Z' - updated: '2024-11-04T13:19:00Z' + updated: '2024-11-06T01:59:17Z' language: TypeScript archived: false - stars: 4618 + stars: 4620 watchers: 909 forks: 739 owner: Azure logo: https://avatars.githubusercontent.com/u/6844498?v=4 license: MIT - repoEtag: '"67baf8c0eb64656c214a5c3daed12fa517052b320c194bb362548bd1ddfbedcf"' - repoLastModified: Mon, 04 Nov 2024 13:19:00 GMT + repoEtag: '"855b63e146d63e296974bf017daccfa026b8b3d829549d0948b3b1e14190a706"' + repoLastModified: Wed, 06 Nov 2024 01:59:17 GMT foundInMaster: true id: 648d92bca90bf58cd74407e0bcad2936 - source: https://openapi.tools/ @@ -4476,16 +4476,16 @@ repositoryId: 491304964 description: Automagically reverse-engineer REST APIs via capturing traffic created: '2022-05-11T23:48:49Z' - updated: '2024-11-04T11:28:08Z' + updated: '2024-11-06T02:42:38Z' language: HTML archived: false - stars: 5085 + stars: 5087 watchers: 23 forks: 221 owner: alufers logo: https://avatars.githubusercontent.com/u/5400940?v=4 - repoEtag: '"c855ccd2130eb83f457afd92595837632c3db268d0e34c275b1b42d5c9c526fa"' - repoLastModified: Mon, 04 Nov 2024 11:28:08 GMT + repoEtag: '"b80c87221ae837bdc4ae2c955603c114e76b9fd8f3f463463e291409af629c76"' + repoLastModified: Wed, 06 Nov 2024 02:42:38 GMT foundInMaster: true - source: https://openapi.tools/ name: OpenApiSpecGeneratorPlugin @@ -4511,17 +4511,17 @@ Dev Proxy is an API simulator that helps you effortlessly test your app beyond the happy path. created: '2022-09-09T18:11:29Z' - updated: '2024-11-04T16:11:12Z' + updated: '2024-11-05T19:47:49Z' language: C# archived: false - stars: 517 + stars: 519 watchers: 16 forks: 61 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"93e3a1b40778e49eb3df6670eb4df3c55240c363a8fe76329d73a6b291a205ee"' - repoLastModified: Mon, 04 Nov 2024 16:11:12 GMT + repoEtag: '"b5445d742a4c605f31efdac85da77c165b1755cb7faeab58b2783b6bcdf6edbb"' + repoLastModified: Tue, 05 Nov 2024 19:47:49 GMT foundInMaster: true - source: https://openapi.tools/ name: har2openapi @@ -4654,17 +4654,17 @@ repositoryId: 709571808 description: Browser extension that generates API specs for any app or website created: '2023-10-25T00:36:06Z' - updated: '2024-11-04T10:36:06Z' + updated: '2024-11-05T23:49:08Z' language: TypeScript archived: false - stars: 3938 + stars: 3941 watchers: 22 forks: 72 owner: AndrewWalsh logo: https://avatars.githubusercontent.com/u/15863952?v=4 license: MIT - repoEtag: '"ae3942be6b6673517745c590d173429260ba98565a36777458725f5a7c5f1d39"' - repoLastModified: Mon, 04 Nov 2024 10:36:06 GMT + repoEtag: '"0505ff168e75b9883f1ca23cb01fd2d7a11711319551f1d13744ba7b6fa53d08"' + repoLastModified: Tue, 05 Nov 2024 23:49:08 GMT category: - Auto Generators - Documentation @@ -4691,17 +4691,17 @@ repositoryId: 381857226 description: null created: '2021-06-30T23:29:49Z' - updated: '2024-11-05T02:41:57Z' + updated: '2024-11-06T02:36:33Z' language: Java archived: false - stars: 4481 + stars: 4484 watchers: 46 forks: 211 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"4f8ad387f94b0656c42d576ac2ff28aecbf113d267f9c8a973ff87115d7fa54f"' - repoLastModified: Tue, 05 Nov 2024 02:41:57 GMT + repoEtag: '"e60fcf1d3574a66467199ce26ebb9e6beb83422f2281ed38c1c810bd839d1dbf"' + repoLastModified: Wed, 06 Nov 2024 02:36:33 GMT category: - Auto Generators - Server Implementations @@ -4931,7 +4931,7 @@ owner: github logo: https://avatars.githubusercontent.com/u/9919?v=4 license: MIT - repoEtag: '"4a1c99c1d768f89dd322275669a245ef016ddec2347a80eb1bc991d5659d20f2"' + repoEtag: '"65e9a3b494a2be882e1bf02433369ce91ca501ce69e16c6e97176aa5e1717afc"' repoLastModified: Mon, 04 Nov 2024 21:31:50 GMT foundInMaster: true id: ec6a7a1e4a69a9beeb95bdebb88cb36d @@ -5025,17 +5025,17 @@ repositoryId: 36817565 description: The ZAP by Checkmarx Core project created: '2015-06-03T16:55:01Z' - updated: '2024-11-05T00:22:40Z' + updated: '2024-11-06T01:07:03Z' language: Java archived: false - stars: 12694 + stars: 12698 watchers: 396 forks: 2265 owner: zaproxy logo: https://avatars.githubusercontent.com/u/6716868?v=4 license: Apache-2.0 - repoEtag: '"2af9c91b9ca5db46574d43114fce8000d5248972579a810f3c2c67dc958a0c44"' - repoLastModified: Tue, 05 Nov 2024 00:22:40 GMT + repoEtag: '"4f255eab3c20aa11af6204d8b9bd2e894432620da1024f0d64ad606da1fe8c80"' + repoLastModified: Wed, 06 Nov 2024 01:07:03 GMT foundInMaster: true id: 9eedc1be44837a65f912bcf562844f39 - source: @@ -5369,17 +5369,17 @@ repositoryId: 1431547 description: Web APIs for Django. 🎸 created: '2011-03-02T17:13:56Z' - updated: '2024-11-05T02:54:24Z' + updated: '2024-11-06T02:37:29Z' language: Python archived: false - stars: 28379 + stars: 28384 watchers: 626 - forks: 6840 + forks: 6841 owner: encode logo: https://avatars.githubusercontent.com/u/19159390?v=4 license: NOASSERTION - repoEtag: '"588976b346f4527a454d01847fc4db24c16df2acaee77d15fb3300463739150d"' - repoLastModified: Tue, 05 Nov 2024 02:54:24 GMT + repoEtag: '"bd2f520a5a57133704ef9949463487a15caa2a94f518cb478cff5c4cdd572795"' + repoLastModified: Wed, 06 Nov 2024 02:37:29 GMT foundInMaster: true id: fb8994c078a380cc3510b024f6ed1202 category: Server Implementations @@ -5564,17 +5564,17 @@ repositoryId: 240776275 description: Generate modern Python clients from OpenAPI created: '2020-02-15T19:33:46Z' - updated: '2024-11-05T03:01:55Z' + updated: '2024-11-05T18:33:55Z' language: Python archived: false - stars: 1329 + stars: 1331 watchers: 13 forks: 202 owner: openapi-generators logo: https://avatars.githubusercontent.com/u/84925606?v=4 license: MIT - repoEtag: '"cc608263efb038fd0cf2118f1b51e699aa5aa30b2e0bc4ac38c1fbba3ffb2b44"' - repoLastModified: Tue, 05 Nov 2024 03:01:55 GMT + repoEtag: '"630a8f549208150606b1d6f94ce44b11f50121bc58a7d4d8286eef6a8ba8a6de"' + repoLastModified: Tue, 05 Nov 2024 18:33:55 GMT foundInMaster: true id: 784ec4adac4e47e4211ea74ef36dd5a5 v3_1: true @@ -5604,17 +5604,17 @@ Build beautiful, interactive API Docs with embeddable React or Web Components, powered by OpenAPI and Markdown. created: '2019-05-03T01:05:01Z' - updated: '2024-11-05T02:04:14Z' + updated: '2024-11-05T18:54:09Z' language: TypeScript archived: false - stars: 1795 + stars: 1793 watchers: 19 forks: 205 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: Apache-2.0 - repoEtag: '"b4e21bfa18e91e13fc0746908921b7560eeea54ed3f34d9f86b4addaca0879ff"' - repoLastModified: Tue, 05 Nov 2024 02:04:14 GMT + repoEtag: '"38ca7ee888136504d87232c821bda50d502d91ad5cf4d19e9fd1529f499dbfde"' + repoLastModified: Tue, 05 Nov 2024 18:54:09 GMT foundInMaster: true id: 2f94cc1fc980953b17a9979d4ff2e7ec - source: @@ -5945,17 +5945,17 @@ repositoryId: 502576077 description: A MkDocs plugin supports adding Swagger UI to the page. created: '2022-06-12T09:49:37Z' - updated: '2024-10-27T10:25:53Z' + updated: '2024-11-06T02:53:12Z' language: CSS archived: false - stars: 78 + stars: 79 watchers: 1 forks: 8 owner: blueswen logo: https://avatars.githubusercontent.com/u/1564148?v=4 license: MIT - repoEtag: '"a51970dc25f620fc58bb4136c7489d9f1af4b07e15ce848b0f0870783fd94e76"' - repoLastModified: Sun, 27 Oct 2024 10:25:53 GMT + repoEtag: '"5028070fffb3d0499c33f03c02991b10f3c2b06daa61cfa88063651b2ac92750"' + repoLastModified: Wed, 06 Nov 2024 02:53:12 GMT category: - Documentation - Parsers @@ -6027,7 +6027,7 @@ owner: pmcelhaney logo: https://avatars.githubusercontent.com/u/51504?v=4 license: MIT - repoEtag: '"c5dbe481f5d1015b4c7cdcfeb551ca2c36d9428b94e9236b61f8f0698937c013"' + repoEtag: '"b3ee38d90f5ec9e051203639b25f8b461f2ee010002bc082a6d93778dc3e306f"' repoLastModified: Mon, 04 Nov 2024 22:28:49 GMT category: - Mock @@ -6081,17 +6081,17 @@ you can think. vacuum is compatible with Spectral rulesets and generates compatible reports. created: '2021-10-10T18:24:19Z' - updated: '2024-11-04T18:30:07Z' + updated: '2024-11-05T12:36:14Z' language: Go archived: false - stars: 611 + stars: 612 watchers: 9 forks: 50 owner: daveshanley logo: https://avatars.githubusercontent.com/u/187345?v=4 license: MIT - repoEtag: '"7dbdcf30c4217f19b501bfd63b1933988bbe668bb5383c8b13db9757d25767f8"' - repoLastModified: Mon, 04 Nov 2024 18:30:07 GMT + repoEtag: '"ee5b857f6122711cc5a53132b5bb4ff2966d0e958f24c7caef2179d9300fb1ad"' + repoLastModified: Tue, 05 Nov 2024 12:36:14 GMT foundInMaster: true category: - Description Validators @@ -6176,17 +6176,17 @@ libopenapi is a fully featured, high performance OpenAPI 3.1, 3.0 and Swagger parser, library, validator and toolkit for golang applications. created: '2022-07-17T19:41:10Z' - updated: '2024-11-02T16:37:30Z' + updated: '2024-11-06T02:45:08Z' language: Go archived: false - stars: 468 + stars: 469 watchers: 7 forks: 64 owner: pb33f logo: https://avatars.githubusercontent.com/u/104016643?v=4 license: NOASSERTION - repoEtag: '"a319f3ca0f448b3141486cec4aea5b06fa316564f4afcb004994d0aff1cf18df"' - repoLastModified: Sat, 02 Nov 2024 16:37:30 GMT + repoEtag: '"81f6f6c0ba63fe62a60c0669a236201c3af4e4d2bbe9e2ecd59ce61177e12a43"' + repoLastModified: Wed, 06 Nov 2024 02:45:08 GMT category: Parsers foundInMaster: true name: libopenapi @@ -6481,7 +6481,7 @@ Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends. created: '2020-03-16T13:33:07Z' - updated: '2024-11-04T11:47:27Z' + updated: '2024-11-05T11:16:33Z' language: Kotlin archived: false stars: 280 @@ -6490,8 +6490,8 @@ owner: znsio logo: https://avatars.githubusercontent.com/u/75619722?v=4 license: MIT - repoEtag: '"467307f6d777c9afc07a7ce459d99e76e0df5b6d5fb73b636a55428918f42b1d"' - repoLastModified: Mon, 04 Nov 2024 11:47:27 GMT + repoEtag: '"66b9b88ba8dd6751bb2889615aa376c1225a172423e51919cec39a8a7d1468e4"' + repoLastModified: Tue, 05 Nov 2024 11:16:33 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -6510,17 +6510,17 @@ changed between two OpenAPI specs, or a single spec over time. Supports OpenAPI 3.1, 3.0 and Swagger created: '2022-11-28T16:53:14Z' - updated: '2024-11-03T17:30:17Z' + updated: '2024-11-05T10:04:10Z' language: Go archived: false - stars: 188 + stars: 189 watchers: 1 forks: 16 owner: pb33f logo: https://avatars.githubusercontent.com/u/104016643?v=4 license: NOASSERTION - repoEtag: '"aabb1db2a673ace6b93abf9baa1110f6d3cdb1d9a2d25adad26c7568aee0030d"' - repoLastModified: Sun, 03 Nov 2024 17:30:17 GMT + repoEtag: '"b9253cd5ebd8200eefa2f3bc28a4df2709c6f0350a90f39c38c45b26bdf844bf"' + repoLastModified: Tue, 05 Nov 2024 10:04:10 GMT category: - Data Validators - Testing @@ -6615,17 +6615,17 @@ repositoryId: 737526274 description: Serverless API Gateway created: '2023-12-31T11:37:10Z' - updated: '2024-11-03T20:26:53Z' + updated: '2024-11-05T23:34:21Z' language: JavaScript archived: false - stars: 59 + stars: 60 watchers: 3 forks: 9 owner: irensaltali logo: https://avatars.githubusercontent.com/u/6968747?v=4 license: NOASSERTION - repoEtag: '"fb0da8ad8993f418c2c429fc617571b49b5d586cf7d7acce0046ae61ed143ce8"' - repoLastModified: Sun, 03 Nov 2024 20:26:53 GMT + repoEtag: '"03b52758e34bf03cf2ddf2289afc533a7c9a2ad476343ee27a247fa595d3f9da"' + repoLastModified: Tue, 05 Nov 2024 23:34:21 GMT foundInMaster: true - source: https://openapi.tools/ name: Treblle @@ -6831,17 +6831,17 @@ repositoryId: 29151578 description: Seamlessly adds a Swagger to Rails-based API's created: '2015-01-12T19:08:10Z' - updated: '2024-11-02T20:07:54Z' + updated: '2024-11-05T13:56:23Z' language: Ruby archived: false - stars: 2001 + stars: 2002 watchers: 28 - forks: 431 + forks: 432 owner: rswag logo: https://avatars.githubusercontent.com/u/55741034?v=4 license: MIT - repoEtag: '"134d2628b32a45506bde160011dbd1b6f0a99bfa82e49c2d0cdbdc29e0552e1d"' - repoLastModified: Sat, 02 Nov 2024 20:07:54 GMT + repoEtag: '"1b9a2ef1890a75e980dad0924920505494b88d5eb0fd41a01cbf93bacb3c2137"' + repoLastModified: Tue, 05 Nov 2024 13:56:23 GMT foundInMaster: true v3_1_link: https://github.com/rswag/rswag/pull/714 - source: https://openapi.tools/ @@ -6885,17 +6885,17 @@ repositoryId: 476820102 description: Input OpenAPI. Output SDKs and Docs. created: '2022-04-01T17:56:54Z' - updated: '2024-11-05T02:38:58Z' + updated: '2024-11-06T00:49:52Z' language: TypeScript archived: false - stars: 2667 + stars: 2669 watchers: 19 - forks: 148 + forks: 149 owner: fern-api logo: https://avatars.githubusercontent.com/u/102944815?v=4 license: Apache-2.0 - repoEtag: '"dc8aff04c0f5e50ee06975694e14e4fe52375526956c999666ec0a12f0f74001"' - repoLastModified: Tue, 05 Nov 2024 02:38:58 GMT + repoEtag: '"9a356781107f2c4010099980edf6f4c648ec123c00a2917e151fa658f4ddc4f7"' + repoLastModified: Wed, 06 Nov 2024 00:49:52 GMT foundInMaster: true sponsored: true testimonial: > @@ -7027,17 +7027,17 @@ The world's coolest API Validation and compliance tool. Validate APIs against OpenAPI specifications and much more created: '2023-05-01T17:19:15Z' - updated: '2024-11-03T23:00:38Z' + updated: '2024-11-05T16:11:07Z' language: Go archived: false - stars: 120 + stars: 121 watchers: 2 forks: 18 owner: pb33f logo: https://avatars.githubusercontent.com/u/104016643?v=4 license: NOASSERTION - repoEtag: '"c84a36f1d867099271c66367eea0d6188b7e381ecb6dd9d837c3382df7303436"' - repoLastModified: Sun, 03 Nov 2024 23:00:38 GMT + repoEtag: '"0932478713072ba834d2d8de6375b8c6df9b1d0c0d32b198e94db067beaad5b2"' + repoLastModified: Tue, 05 Nov 2024 16:11:07 GMT category: - Testing Tools - Testing @@ -7238,7 +7238,7 @@ repositoryId: 706256859 description: Golang Fuego - web framework generating OpenAPI 3 spec from source code created: '2023-10-17T15:36:43Z' - updated: '2024-11-04T22:56:36Z' + updated: '2024-11-05T22:22:12Z' language: Go archived: false stars: 891 @@ -7247,8 +7247,8 @@ owner: go-fuego logo: https://avatars.githubusercontent.com/u/148255240?v=4 license: MIT - repoEtag: '"543a87f244b5ed08c550c9c0f598e603aeb28084d3883738539d7ed962d7159c"' - repoLastModified: Mon, 04 Nov 2024 22:56:36 GMT + repoEtag: '"26663649464eebf6efbb7545765bb1fa357e44a40d976634559efa7328c6fbaa"' + repoLastModified: Tue, 05 Nov 2024 22:22:12 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -7264,17 +7264,17 @@ repositoryId: 245763170 description: Huma REST/HTTP API Framework for Golang with OpenAPI 3.1 created: '2020-03-08T06:19:51Z' - updated: '2024-11-04T17:50:20Z' + updated: '2024-11-06T03:28:19Z' language: Go archived: false - stars: 2079 + stars: 2082 watchers: 27 forks: 150 owner: danielgtaylor logo: https://avatars.githubusercontent.com/u/106826?v=4 license: MIT - repoEtag: '"f054ae20ea95d2c7050cf9b324472d8f91cab6a08686ebc4ffcb5cfebff8c0e1"' - repoLastModified: Mon, 04 Nov 2024 17:50:20 GMT + repoEtag: '"fb47555e677c5f31de209f7f208a7788f8e2a06aee755357badef0a122ae9442"' + repoLastModified: Wed, 06 Nov 2024 03:28:19 GMT foundInMaster: true category: - Auto Generators @@ -7483,17 +7483,17 @@ repositoryId: 843437350 description: Framework for building high quality, interactive API documentation. created: '2024-08-16T14:09:50Z' - updated: '2024-11-04T21:18:16Z' + updated: '2024-11-05T20:54:02Z' language: TypeScript archived: false - stars: 89 + stars: 91 watchers: 4 forks: 7 owner: zuplo logo: https://avatars.githubusercontent.com/u/85497839?v=4 license: MIT - repoEtag: '"22ac9b3d9befed4febb14d25130608b641c83814d7b7871b1032f245b236eb91"' - repoLastModified: Mon, 04 Nov 2024 21:18:16 GMT + repoEtag: '"3857f7c335f0ad9350e048f0571968f48081529c4d5b70bf66bafd492640a8ab"' + repoLastModified: Tue, 05 Nov 2024 20:54:02 GMT foundInMaster: true - source: openapi3 tags name: FastAPI @@ -7515,17 +7515,17 @@ FastAPI framework, high performance, easy to learn, fast to code, ready for production created: '2018-12-08T08:21:47Z' - updated: '2024-11-05T03:22:49Z' + updated: '2024-11-06T03:24:26Z' language: Python archived: false - stars: 77214 + stars: 77246 watchers: 679 - forks: 6598 + forks: 6600 owner: fastapi logo: https://avatars.githubusercontent.com/u/156354296?v=4 license: MIT - repoEtag: '"b5b265d59b8aa65e07e8ee3e405acee399e0ad87309d2a4772d48d8bbceefa3f"' - repoLastModified: Tue, 05 Nov 2024 03:22:49 GMT + repoEtag: '"4b08e5308788572d2aea5731259282a26058d1c06929e0d5aec77cb2c1fd839a"' + repoLastModified: Wed, 06 Nov 2024 03:24:26 GMT foundInMaster: true id: 01f8d446752c39de698f67e8d2352229 oldLocations: @@ -7537,25 +7537,25 @@ v3: true repositoryMetadata: base64Readme: >- - IyA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N3YWdnZXItYXBpL3N3YWdnZXIuaW8vd29yZHByZXNzL2ltYWdlcy9hc3NldHMvU1dVLWxvZ28tY2xyLnBuZyIgd2lkdGg9IjMwMCI+CgpbIVtOUE0gdmVyc2lvbl0oaHR0cHM6Ly9iYWRnZS5mdXJ5LmlvL2pzL3N3YWdnZXItdWkuc3ZnKV0oaHR0cDovL2JhZGdlLmZ1cnkuaW8vanMvc3dhZ2dlci11aSkKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2plbmtpbnMuc3dhZ2dlci5pby92aWV3L09TUyUyMC0lMjBKYXZhU2NyaXB0L2pvYi9vc3Mtc3dhZ2dlci11aS1tYXN0ZXIvYmFkZ2UvaWNvbj9zdWJqZWN0PWplbmtpbnMlMjBidWlsZCldKGh0dHBzOi8vamVua2lucy5zd2FnZ2VyLmlvL3ZpZXcvT1NTJTIwLSUyMEphdmFTY3JpcHQvam9iL29zcy1zd2FnZ2VyLXVpLW1hc3Rlci8pClshW25wbSBhdWRpdF0oaHR0cHM6Ly9qZW5raW5zLnN3YWdnZXIuaW8vYnVpbGRTdGF0dXMvaWNvbj9qb2I9b3NzLXN3YWdnZXItdWktc2VjdXJpdHktYXVkaXQmc3ViamVjdD1ucG0lMjBhdWRpdCldKGh0dHBzOi8vamVua2lucy5zd2FnZ2VyLmlvL2pvYi9vc3Mtc3dhZ2dlci11aS1zZWN1cml0eS1hdWRpdC9sYXN0QnVpbGQvY29uc29sZSkKIVt0b3RhbCBHaXRIdWIgY29udHJpYnV0b3JzXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9jb250cmlidXRvcnMtYW5vbi9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpLnN2ZykKCiFbbW9udGhseSBucG0gaW5zdGFsbHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2RtL3N3YWdnZXItdWkuc3ZnP2xhYmVsPW5wbSUyMGRvd25sb2FkcykKIVt0b3RhbCBkb2NrZXIgcHVsbHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3B1bGxzL3N3YWdnZXJhcGkvc3dhZ2dlci11aS5zdmcpCiFbbW9udGhseSBwYWNrYWdpc3QgaW5zdGFsbHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2RtL3N3YWdnZXItYXBpL3N3YWdnZXItdWkuc3ZnP2xhYmVsPXBhY2thZ2lzdCUyMGluc3RhbGxzKQohW2d6aXAgc2l6ZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9idW5kbGVwaG9iaWEvbWluemlwL3N3YWdnZXItdWkuc3ZnP2xhYmVsPWd6aXAlMjBzaXplKQoKIyMgSW50cm9kdWN0aW9uCltTd2FnZ2VyIFVJXShodHRwczovL3N3YWdnZXIuaW8vdG9vbHMvc3dhZ2dlci11aS8pIGFsbG93cyBhbnlvbmUg4oCUIGJlIGl0IHlvdXIgZGV2ZWxvcG1lbnQgdGVhbSBvciB5b3VyIGVuZCBjb25zdW1lcnMg4oCUIHRvIHZpc3VhbGl6ZSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgQVBJ4oCZcyByZXNvdXJjZXMgd2l0aG91dCBoYXZpbmcgYW55IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBsb2dpYyBpbiBwbGFjZS4gSXTigJlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20geW91ciBPcGVuQVBJIChmb3JtZXJseSBrbm93biBhcyBTd2FnZ2VyKSBTcGVjaWZpY2F0aW9uLCB3aXRoIHRoZSB2aXN1YWwgZG9jdW1lbnRhdGlvbiBtYWtpbmcgaXQgZWFzeSBmb3IgYmFjayBlbmQgaW1wbGVtZW50YXRpb24gYW5kIGNsaWVudCBzaWRlIGNvbnN1bXB0aW9uLgoKIyMgR2VuZXJhbAoqKvCfkYnwn4+8IFdhbnQgdG8gc2NvcmUgYW4gZWFzeSBvcGVuLXNvdXJjZSBjb250cmlidXRpb24/KiogQ2hlY2sgb3V0IG91ciBbR29vZCBmaXJzdCBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvaXNzdWVzP3E9aXMlM0Fpc3N1ZStpcyUzQW9wZW4rbGFiZWwlM0ElMjJHb29kK2ZpcnN0K2lzc3VlJTIyKSBsYWJlbC4KCioq8J+VsO+4jyBMb29raW5nIGZvciB0aGUgb2xkZXIgdmVyc2lvbiBvZiBTd2FnZ2VyIFVJPyoqIFJlZmVyIHRvIHRoZSBbKjIueCogYnJhbmNoXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS90cmVlLzIueCkuCgoKVGhpcyByZXBvc2l0b3J5IHB1Ymxpc2hlcyB0aHJlZSBkaWZmZXJlbnQgTlBNIG1vZHVsZXM6CgoqIFtzd2FnZ2VyLXVpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9zd2FnZ2VyLXVpKSBpcyBhIHRyYWRpdGlvbmFsIG5wbSBtb2R1bGUgaW50ZW5kZWQgZm9yIHVzZSBpbiBzaW5nbGUtcGFnZSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgY2FwYWJsZSBvZiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzICh2aWEgV2VicGFjaywgQnJvd3NlcmlmeSwgZXRjLikuCiogW3N3YWdnZXItdWktZGlzdF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc3dhZ2dlci11aS1kaXN0KSBpcyBhIGRlcGVuZGVuY3ktZnJlZSBtb2R1bGUgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIHNlcnZlIFN3YWdnZXIgVUkgaW4gYSBzZXJ2ZXItc2lkZSBwcm9qZWN0LCBvciBhIHNpbmdsZS1wYWdlIGFwcGxpY2F0aW9uIHRoYXQgY2FuJ3QgcmVzb2x2ZSBucG0gbW9kdWxlIGRlcGVuZGVuY2llcy4KKiBbc3dhZ2dlci11aS1yZWFjdF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc3dhZ2dlci11aS1yZWFjdCkgaXMgU3dhZ2dlciBVSSBwYWNrYWdlZCBhcyBhIFJlYWN0IGNvbXBvbmVudCBmb3IgdXNlIGluIFJlYWN0IGFwcGxpY2F0aW9ucy4KCldlIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3UgdXNlIGBzd2FnZ2VyLXVpYCBpbnN0ZWFkIG9mIGBzd2FnZ2VyLXVpLWRpc3RgIGlmIHlvdSdyZSBidWlsZGluZyBhIHNpbmdsZS1wYWdlIGFwcGxpY2F0aW9uLCBzaW5jZSBgc3dhZ2dlci11aS1kaXN0YCBpcyBzaWduaWZpY2FudGx5IGxhcmdlci4KCklmIHlvdSBhcmUgbG9va2luZyBmb3IgcGxhaW4gb2wnIEhUTUwvSlMvQ1NTLCBbZG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9yZWxlYXNlcy9sYXRlc3QpIGFuZCBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgYC9kaXN0YCBmb2xkZXIgdG8geW91ciBzZXJ2ZXIuCgoKIyMgQ29tcGF0aWJpbGl0eQpUaGUgT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGhhcyB1bmRlcmdvbmUgNSByZXZpc2lvbnMgc2luY2UgaW5pdGlhbCBjcmVhdGlvbiBpbiAyMDEwLiAgQ29tcGF0aWJpbGl0eSBiZXR3ZWVuIFN3YWdnZXIgVUkgYW5kIHRoZSBPcGVuQVBJIFNwZWNpZmljYXRpb24gaXMgYXMgZm9sbG93czoKCnwgU3dhZ2dlciBVSSBWZXJzaW9uIHwgUmVsZWFzZSBEYXRlIHwgT3BlbkFQSSBTcGVjIGNvbXBhdGliaWxpdHkgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCA1LjAuMCAgICAgICAgICAgICAgfCAyMDIzLTA2LTEyICAgfCAyLjAsIDMuMC4wLCAzLjAuMSwgMy4wLjIsIDMuMC4zLCAzLjEuMCB8IFt0YWcgdjUuMC4wXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS90cmVlL3Y1LjAuMCkgICB8CnwgNC4wLjAgICAgICAgICAgICAgIHwgMjAyMS0xMS0wMyAgIHwgMi4wLCAzLjAuMCwgMy4wLjEsIDMuMC4yLCAzLjAuMyAgICAgICAgfCBbdGFnIHY0LjAuMF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvdHJlZS92NC4wLjApICAgfAp8IDMuMTguMyAgICAgICAgICAgICB8IDIwMTgtMDgtMDMgICB8IDIuMCwgMy4wLjAsIDMuMC4xLCAzLjAuMiwgMy4wLjMgICAgICAgIHwgW3RhZyB2My4xOC4zXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS90cmVlL3YzLjE4LjMpIHwKfCAzLjAuMjEgICAgICAgICAgICAgfCAyMDE3LTA3LTI2ICAgfCAyLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt0YWcgdjMuMC4yMV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvdHJlZS92My4wLjIxKSB8CnwgMi4yLjEwICAgICAgICAgICAgIHwgMjAxNy0wMS0wNCAgIHwgMS4xLCAxLjIsIDIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbdGFnIHYyLjIuMTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjIuMi4xMCkgfAp8IDIuMS41ICAgICAgICAgICAgICB8IDIwMTYtMDctMjAgICB8IDEuMSwgMS4yLCAyLjAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3RhZyB2Mi4xLjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjIuMS41KSAgIHwKfCAyLjAuMjQgICAgICAgICAgICAgfCAyMDE0LTA5LTEyICAgfCAxLjEsIDEuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt0YWcgdjIuMC4yNF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvdHJlZS92Mi4wLjI0KSB8CnwgMS4wLjEzICAgICAgICAgICAgIHwgMjAxMy0wMy0wOCAgIHwgMS4xLCAxLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbdGFnIHYxLjAuMTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjEuMC4xMykgfAp8IDEuMC4xICAgICAgICAgICAgICB8IDIwMTEtMTAtMTEgICB8IDEuMCwgMS4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3RhZyB2MS4wLjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjEuMC4xKSAgIHwKCiMjIERvY3VtZW50YXRpb24KCiMjIyMgVXNhZ2UKLSBbSW5zdGFsbGF0aW9uXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL0hFQUQvZG9jcy91c2FnZS9pbnN0YWxsYXRpb24ubWQpCi0gW0NvbmZpZ3VyYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL3VzYWdlL2NvbmZpZ3VyYXRpb24ubWQpCi0gW0NPUlNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL3VzYWdlL2NvcnMubWQpCi0gW09BdXRoMl0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvdXNhZ2Uvb2F1dGgyLm1kKQotIFtEZWVwIExpbmtpbmddKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL3VzYWdlL2RlZXAtbGlua2luZy5tZCkKLSBbTGltaXRhdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL3VzYWdlL2xpbWl0YXRpb25zLm1kKQotIFtWZXJzaW9uIGRldGVjdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvdXNhZ2UvdmVyc2lvbi1kZXRlY3Rpb24ubWQpCgojIyMjIEN1c3RvbWl6YXRpb24KLSBbT3ZlcnZpZXddKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL2N1c3RvbWl6YXRpb24vb3ZlcnZpZXcubWQpCi0gW1BsdWdpbiBBUEldKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL2N1c3RvbWl6YXRpb24vcGx1Z2luLWFwaS5tZCkKLSBbQ3VzdG9tIGxheW91dF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvY3VzdG9taXphdGlvbi9jdXN0b20tbGF5b3V0Lm1kKQoKIyMjIyBEZXZlbG9wbWVudAotIFtTZXR0aW5nIHVwXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL0hFQUQvZG9jcy9kZXZlbG9wbWVudC9zZXR0aW5nLXVwLm1kKQotIFtTY3JpcHRzXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL0hFQUQvZG9jcy9kZXZlbG9wbWVudC9zY3JpcHRzLm1kKQoKIyMjIyBDb250cmlidXRpbmcKLSBbQ29udHJpYnV0aW5nXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvLmdpdGh1Yi9ibG9iL0hFQUQvQ09OVFJJQlVUSU5HLm1kKQoKIyMjIyMgSW50ZWdyYXRpb24gVGVzdHMKCllvdSB3aWxsIG5lZWQgSkRLIG9mIHZlcnNpb24gNyBvciBoaWdoZXIgYXMgaW5zdHJ1Y3RlZCBoZXJlCmh0dHBzOi8vbmlnaHR3YXRjaGpzLm9yZy9ndWlkZS9nZXR0aW5nLXN0YXJ0ZWQvaW5zdGFsbGF0aW9uLmh0bWwjaW5zdGFsbC1zZWxlbml1bS1zZXJ2ZXIKCkludGVncmF0aW9uIHRlc3RzIGNhbiBiZSBydW4gbG9jYWxseSB3aXRoIGBucG0gcnVuIGUyZWAgLSBiZSBzdXJlIHlvdSBhcmVuJ3QgcnVubmluZyBhIGRldiBzZXJ2ZXIgd2hlbiB0ZXN0aW5nIQoKIyMjIEJyb3dzZXIgc3VwcG9ydApTd2FnZ2VyIFVJIHdvcmtzIGluIHRoZSBsYXRlc3QgdmVyc2lvbnMgb2YgQ2hyb21lLCBTYWZhcmksIEZpcmVmb3gsIGFuZCBFZGdlLgoKIyMjIEtub3duIElzc3VlcwoKVG8gaGVscCB3aXRoIHRoZSBtaWdyYXRpb24sIGhlcmUgYXJlIHRoZSBjdXJyZW50bHkga25vd24gaXNzdWVzIHdpdGggMy5YLiBUaGlzIGxpc3Qgd2lsbCB1cGRhdGUgcmVndWxhcmx5LCBhbmQgd2lsbCBub3QgaW5jbHVkZSBmZWF0dXJlcyB0aGF0IHdlcmUgbm90IGltcGxlbWVudGVkIGluIHByZXZpb3VzIHZlcnNpb25zLgoKLSBPbmx5IHBhcnQgb2YgdGhlIHBhcmFtZXRlcnMgcHJldmlvdXNseSBzdXBwb3J0ZWQgYXJlIGF2YWlsYWJsZS4KLSBUaGUgSlNPTiBGb3JtIEVkaXRvciBpcyBub3QgaW1wbGVtZW50ZWQuCi0gU3VwcG9ydCBmb3IgYGNvbGxlY3Rpb25Gb3JtYXRgIGlzIHBhcnRpYWwuCi0gbDEwbiAodHJhbnNsYXRpb25zKSBpcyBub3QgaW1wbGVtZW50ZWQuCi0gUmVsYXRpdmUgcGF0aCBzdXBwb3J0IGZvciBleHRlcm5hbCBmaWxlcyBpcyBub3QgaW1wbGVtZW50ZWQuCgojIyBTZWN1cml0eSBjb250YWN0CgpQbGVhc2UgZGlzY2xvc2UgYW55IHNlY3VyaXR5LXJlbGF0ZWQgaXNzdWVzIG9yIHZ1bG5lcmFiaWxpdGllcyBieSBlbWFpbGluZyBbc2VjdXJpdHlAc3dhZ2dlci5pb10obWFpbHRvOnNlY3VyaXR5QHN3YWdnZXIuaW8pLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBwdWJsaWMgaXNzdWUgdHJhY2tlci4KCiMjIExpY2Vuc2UKClN3YWdnZXJVSSBpcyBsaWNlbnNlZCB1bmRlciBbQXBhY2hlIDIuMCBsaWNlbnNlXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL21hc3Rlci9MSUNFTlNFKS4KU3dhZ2dlclVJIGNvbWVzIHdpdGggYW4gZXhwbGljaXQgW05PVElDRV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9tYXN0ZXIvTk9USUNFKSBmaWxlCmNvbnRhaW5pbmcgYWRkaXRpb25hbCBsZWdhbCBub3RpY2VzIGFuZCBpbmZvcm1hdGlvbi4K - readmeEtag: '"f01a3ffe9d494c37565a202aaead7f0d82a2be1a"' - readmeLastModified: Tue, 09 Jul 2024 23:08:18 GMT + IyA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N3YWdnZXItYXBpL3N3YWdnZXIuaW8vd29yZHByZXNzL2ltYWdlcy9hc3NldHMvU1dVLWxvZ28tY2xyLnBuZyIgd2lkdGg9IjMwMCI+CgpbIVtOUE0gdmVyc2lvbl0oaHR0cHM6Ly9iYWRnZS5mdXJ5LmlvL2pzL3N3YWdnZXItdWkuc3ZnKV0oaHR0cDovL2JhZGdlLmZ1cnkuaW8vanMvc3dhZ2dlci11aSkKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2plbmtpbnMuc3dhZ2dlci5pby92aWV3L09TUyUyMC0lMjBKYXZhU2NyaXB0L2pvYi9vc3Mtc3dhZ2dlci11aS1tYXN0ZXIvYmFkZ2UvaWNvbj9zdWJqZWN0PWplbmtpbnMlMjBidWlsZCldKGh0dHBzOi8vamVua2lucy5zd2FnZ2VyLmlvL3ZpZXcvT1NTJTIwLSUyMEphdmFTY3JpcHQvam9iL29zcy1zd2FnZ2VyLXVpLW1hc3Rlci8pClshW25wbSBhdWRpdF0oaHR0cHM6Ly9qZW5raW5zLnN3YWdnZXIuaW8vYnVpbGRTdGF0dXMvaWNvbj9qb2I9b3NzLXN3YWdnZXItdWktc2VjdXJpdHktYXVkaXQmc3ViamVjdD1ucG0lMjBhdWRpdCldKGh0dHBzOi8vamVua2lucy5zd2FnZ2VyLmlvL2pvYi9vc3Mtc3dhZ2dlci11aS1zZWN1cml0eS1hdWRpdC9sYXN0QnVpbGQvY29uc29sZSkKIVt0b3RhbCBHaXRIdWIgY29udHJpYnV0b3JzXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9jb250cmlidXRvcnMtYW5vbi9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpLnN2ZykKCiFbbW9udGhseSBucG0gaW5zdGFsbHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2RtL3N3YWdnZXItdWkuc3ZnP2xhYmVsPW5wbSUyMGRvd25sb2FkcykKIVt0b3RhbCBkb2NrZXIgcHVsbHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZG9ja2VyL3B1bGxzL3N3YWdnZXJhcGkvc3dhZ2dlci11aS5zdmcpCiFbbW9udGhseSBwYWNrYWdpc3QgaW5zdGFsbHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcGFja2FnaXN0L2RtL3N3YWdnZXItYXBpL3N3YWdnZXItdWkuc3ZnP2xhYmVsPXBhY2thZ2lzdCUyMGluc3RhbGxzKQohW2d6aXAgc2l6ZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9idW5kbGVwaG9iaWEvbWluemlwL3N3YWdnZXItdWkuc3ZnP2xhYmVsPWd6aXAlMjBzaXplKQoKIyMgSW50cm9kdWN0aW9uCltTd2FnZ2VyIFVJXShodHRwczovL3N3YWdnZXIuaW8vdG9vbHMvc3dhZ2dlci11aS8pIGFsbG93cyBhbnlvbmUg4oCUIGJlIGl0IHlvdXIgZGV2ZWxvcG1lbnQgdGVhbSBvciB5b3VyIGVuZCBjb25zdW1lcnMg4oCUIHRvIHZpc3VhbGl6ZSBhbmQgaW50ZXJhY3Qgd2l0aCB0aGUgQVBJ4oCZcyByZXNvdXJjZXMgd2l0aG91dCBoYXZpbmcgYW55IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBsb2dpYyBpbiBwbGFjZS4gSXTigJlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20geW91ciBPcGVuQVBJIChmb3JtZXJseSBrbm93biBhcyBTd2FnZ2VyKSBTcGVjaWZpY2F0aW9uLCB3aXRoIHRoZSB2aXN1YWwgZG9jdW1lbnRhdGlvbiBtYWtpbmcgaXQgZWFzeSBmb3IgYmFjayBlbmQgaW1wbGVtZW50YXRpb24gYW5kIGNsaWVudCBzaWRlIGNvbnN1bXB0aW9uLgoKIyMgR2VuZXJhbAoqKvCfkYnwn4+8IFdhbnQgdG8gc2NvcmUgYW4gZWFzeSBvcGVuLXNvdXJjZSBjb250cmlidXRpb24/KiogQ2hlY2sgb3V0IG91ciBbR29vZCBmaXJzdCBpc3N1ZV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvaXNzdWVzP3E9aXMlM0Fpc3N1ZStpcyUzQW9wZW4rbGFiZWwlM0ElMjJHb29kK2ZpcnN0K2lzc3VlJTIyKSBsYWJlbC4KCioq8J+VsO+4jyBMb29raW5nIGZvciB0aGUgb2xkZXIgdmVyc2lvbiBvZiBTd2FnZ2VyIFVJPyoqIFJlZmVyIHRvIHRoZSBbKjIueCogYnJhbmNoXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS90cmVlLzIueCkuCgoKVGhpcyByZXBvc2l0b3J5IHB1Ymxpc2hlcyB0aHJlZSBkaWZmZXJlbnQgTlBNIG1vZHVsZXM6CgoqIFtzd2FnZ2VyLXVpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9zd2FnZ2VyLXVpKSBpcyBhIHRyYWRpdGlvbmFsIG5wbSBtb2R1bGUgaW50ZW5kZWQgZm9yIHVzZSBpbiBzaW5nbGUtcGFnZSBhcHBsaWNhdGlvbnMgdGhhdCBhcmUgY2FwYWJsZSBvZiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzICh2aWEgV2VicGFjaywgQnJvd3NlcmlmeSwgZXRjLikuCiogW3N3YWdnZXItdWktZGlzdF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc3dhZ2dlci11aS1kaXN0KSBpcyBhIGRlcGVuZGVuY3ktZnJlZSBtb2R1bGUgdGhhdCBpbmNsdWRlcyBldmVyeXRoaW5nIHlvdSBuZWVkIHRvIHNlcnZlIFN3YWdnZXIgVUkgaW4gYSBzZXJ2ZXItc2lkZSBwcm9qZWN0LCBvciBhIHNpbmdsZS1wYWdlIGFwcGxpY2F0aW9uIHRoYXQgY2FuJ3QgcmVzb2x2ZSBucG0gbW9kdWxlIGRlcGVuZGVuY2llcy4KKiBbc3dhZ2dlci11aS1yZWFjdF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvc3dhZ2dlci11aS1yZWFjdCkgaXMgU3dhZ2dlciBVSSBwYWNrYWdlZCBhcyBhIFJlYWN0IGNvbXBvbmVudCBmb3IgdXNlIGluIFJlYWN0IGFwcGxpY2F0aW9ucy4KCldlIHN0cm9uZ2x5IHN1Z2dlc3QgdGhhdCB5b3UgdXNlIGBzd2FnZ2VyLXVpYCBpbnN0ZWFkIG9mIGBzd2FnZ2VyLXVpLWRpc3RgIGlmIHlvdSdyZSBidWlsZGluZyBhIHNpbmdsZS1wYWdlIGFwcGxpY2F0aW9uLCBzaW5jZSBgc3dhZ2dlci11aS1kaXN0YCBpcyBzaWduaWZpY2FudGx5IGxhcmdlci4KCklmIHlvdSBhcmUgbG9va2luZyBmb3IgcGxhaW4gb2wnIEhUTUwvSlMvQ1NTLCBbZG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9yZWxlYXNlcy9sYXRlc3QpIGFuZCBjb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgYC9kaXN0YCBmb2xkZXIgdG8geW91ciBzZXJ2ZXIuCgoKIyMgQ29tcGF0aWJpbGl0eQpUaGUgT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGhhcyB1bmRlcmdvbmUgNSByZXZpc2lvbnMgc2luY2UgaW5pdGlhbCBjcmVhdGlvbiBpbiAyMDEwLiAgQ29tcGF0aWJpbGl0eSBiZXR3ZWVuIFN3YWdnZXIgVUkgYW5kIHRoZSBPcGVuQVBJIFNwZWNpZmljYXRpb24gaXMgYXMgZm9sbG93czoKCnwgU3dhZ2dlciBVSSBWZXJzaW9uIHwgUmVsZWFzZSBEYXRlIHwgT3BlbkFQSSBTcGVjIGNvbXBhdGliaWxpdHkgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCA1LjAuMCAgICAgICAgICAgICAgfCAyMDIzLTA2LTEyICAgfCAyLjAsIDMuMC4wLCAzLjAuMSwgMy4wLjIsIDMuMC4zLCAzLjEuMCB8IFt0YWcgdjUuMC4wXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS90cmVlL3Y1LjAuMCkgICB8CnwgNC4wLjAgICAgICAgICAgICAgIHwgMjAyMS0xMS0wMyAgIHwgMi4wLCAzLjAuMCwgMy4wLjEsIDMuMC4yLCAzLjAuMyAgICAgICAgfCBbdGFnIHY0LjAuMF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvdHJlZS92NC4wLjApICAgfAp8IDMuMTguMyAgICAgICAgICAgICB8IDIwMTgtMDgtMDMgICB8IDIuMCwgMy4wLjAsIDMuMC4xLCAzLjAuMiwgMy4wLjMgICAgICAgIHwgW3RhZyB2My4xOC4zXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS90cmVlL3YzLjE4LjMpIHwKfCAzLjAuMjEgICAgICAgICAgICAgfCAyMDE3LTA3LTI2ICAgfCAyLjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt0YWcgdjMuMC4yMV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvdHJlZS92My4wLjIxKSB8CnwgMi4yLjEwICAgICAgICAgICAgIHwgMjAxNy0wMS0wNCAgIHwgMS4xLCAxLjIsIDIuMCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbdGFnIHYyLjIuMTBdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjIuMi4xMCkgfAp8IDIuMS41ICAgICAgICAgICAgICB8IDIwMTYtMDctMjAgICB8IDEuMSwgMS4yLCAyLjAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3RhZyB2Mi4xLjVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjIuMS41KSAgIHwKfCAyLjAuMjQgICAgICAgICAgICAgfCAyMDE0LTA5LTEyICAgfCAxLjEsIDEuMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt0YWcgdjIuMC4yNF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvdHJlZS92Mi4wLjI0KSB8CnwgMS4wLjEzICAgICAgICAgICAgIHwgMjAxMy0wMy0wOCAgIHwgMS4xLCAxLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBbdGFnIHYxLjAuMTNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjEuMC4xMykgfAp8IDEuMC4xICAgICAgICAgICAgICB8IDIwMTEtMTAtMTEgICB8IDEuMCwgMS4xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3RhZyB2MS4wLjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL3RyZWUvdjEuMC4xKSAgIHwKCiMjIEFub255bWl6ZWQgYW5hbHl0aWNzCgpTd2FnZ2VyVUkgdXNlcyBbU2NhcmZdKGh0dHBzOi8vc2NhcmYuc2gvKSB0byBjb2xsZWN0IFthbm9ueW1pemVkIGluc3RhbGxhdGlvbiBhbmFseXRpY3NdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FyZi1zaC9zY2FyZi1qcz90YWI9cmVhZG1lLW92LWZpbGUjYXMtYS11c2VyLW9mLWEtcGFja2FnZS11c2luZy1zY2FyZi1qcy13aGF0LWluZm9ybWF0aW9uLWRvZXMtc2NhcmYtanMtc2VuZC1hYm91dC1tZSkuIFRoZXNlIGFuYWx5dGljcyBoZWxwIHN1cHBvcnQgdGhlIG1haW50YWluZXJzIG9mIHRoaXMgbGlicmFyeSBhbmQgT05MWSBydW4gZHVyaW5nIGluc3RhbGxhdGlvbi4gVG8gW29wdCBvdXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FyZi1zaC9zY2FyZi1qcz90YWI9cmVhZG1lLW92LWZpbGUjYXMtYS11c2VyLW9mLWEtcGFja2FnZS11c2luZy1zY2FyZi1qcy1ob3ctY2FuLWktb3B0LW91dC1vZi1hbmFseXRpY3MpLCB5b3UgY2FuIHNldCB0aGUgYHNjYXJmU2V0dGluZ3MuZW5hYmxlZGAgZmllbGQgdG8gYGZhbHNlYCBpbiB5b3VyIHByb2plY3QncyBgcGFja2FnZS5qc29uYDoKCmBgYAovLyBwYWNrYWdlLmpzb24KewogIC8vIC4uLgogICJzY2FyZlNldHRpbmdzIjogewogICAgImVuYWJsZWQiOiBmYWxzZQogIH0KICAvLyAuLi4KfQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBgU0NBUkZfQU5BTFlUSUNTYCB0byBgZmFsc2VgIGFzIHBhcnQgb2YgdGhlIGVudmlyb25tZW50IHRoYXQgaW5zdGFsbHMgeW91ciBucG0gcGFja2FnZXMsIGUuZy4sIGBTQ0FSRl9BTkFMWVRJQ1M9ZmFsc2UgbnBtIGluc3RhbGxgLgoKIyMgRG9jdW1lbnRhdGlvbgoKIyMjIyBVc2FnZQotIFtJbnN0YWxsYXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL3VzYWdlL2luc3RhbGxhdGlvbi5tZCkKLSBbQ29uZmlndXJhdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvdXNhZ2UvY29uZmlndXJhdGlvbi5tZCkKLSBbQ09SU10oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvdXNhZ2UvY29ycy5tZCkKLSBbT0F1dGgyXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL0hFQUQvZG9jcy91c2FnZS9vYXV0aDIubWQpCi0gW0RlZXAgTGlua2luZ10oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvdXNhZ2UvZGVlcC1saW5raW5nLm1kKQotIFtMaW1pdGF0aW9uc10oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvdXNhZ2UvbGltaXRhdGlvbnMubWQpCi0gW1ZlcnNpb24gZGV0ZWN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL0hFQUQvZG9jcy91c2FnZS92ZXJzaW9uLWRldGVjdGlvbi5tZCkKCiMjIyMgQ3VzdG9taXphdGlvbgotIFtPdmVydmlld10oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvY3VzdG9taXphdGlvbi9vdmVydmlldy5tZCkKLSBbUGx1Z2luIEFQSV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItdWkvYmxvYi9IRUFEL2RvY3MvY3VzdG9taXphdGlvbi9wbHVnaW4tYXBpLm1kKQotIFtDdXN0b20gbGF5b3V0XShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL0hFQUQvZG9jcy9jdXN0b21pemF0aW9uL2N1c3RvbS1sYXlvdXQubWQpCgojIyMjIERldmVsb3BtZW50Ci0gW1NldHRpbmcgdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL2RldmVsb3BtZW50L3NldHRpbmctdXAubWQpCi0gW1NjcmlwdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvSEVBRC9kb2NzL2RldmVsb3BtZW50L3NjcmlwdHMubWQpCgojIyMjIENvbnRyaWJ1dGluZwotIFtDb250cmlidXRpbmddKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS8uZ2l0aHViL2Jsb2IvSEVBRC9DT05UUklCVVRJTkcubWQpCgojIyMjIyBJbnRlZ3JhdGlvbiBUZXN0cwoKWW91IHdpbGwgbmVlZCBKREsgb2YgdmVyc2lvbiA3IG9yIGhpZ2hlciBhcyBpbnN0cnVjdGVkIGhlcmUKaHR0cHM6Ly9uaWdodHdhdGNoanMub3JnL2d1aWRlL2dldHRpbmctc3RhcnRlZC9pbnN0YWxsYXRpb24uaHRtbCNpbnN0YWxsLXNlbGVuaXVtLXNlcnZlcgoKSW50ZWdyYXRpb24gdGVzdHMgY2FuIGJlIHJ1biBsb2NhbGx5IHdpdGggYG5wbSBydW4gZTJlYCAtIGJlIHN1cmUgeW91IGFyZW4ndCBydW5uaW5nIGEgZGV2IHNlcnZlciB3aGVuIHRlc3RpbmchCgojIyMgQnJvd3NlciBzdXBwb3J0ClN3YWdnZXIgVUkgd29ya3MgaW4gdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveCwgYW5kIEVkZ2UuCgojIyMgS25vd24gSXNzdWVzCgpUbyBoZWxwIHdpdGggdGhlIG1pZ3JhdGlvbiwgaGVyZSBhcmUgdGhlIGN1cnJlbnRseSBrbm93biBpc3N1ZXMgd2l0aCAzLlguIFRoaXMgbGlzdCB3aWxsIHVwZGF0ZSByZWd1bGFybHksIGFuZCB3aWxsIG5vdCBpbmNsdWRlIGZlYXR1cmVzIHRoYXQgd2VyZSBub3QgaW1wbGVtZW50ZWQgaW4gcHJldmlvdXMgdmVyc2lvbnMuCgotIE9ubHkgcGFydCBvZiB0aGUgcGFyYW1ldGVycyBwcmV2aW91c2x5IHN1cHBvcnRlZCBhcmUgYXZhaWxhYmxlLgotIFRoZSBKU09OIEZvcm0gRWRpdG9yIGlzIG5vdCBpbXBsZW1lbnRlZC4KLSBTdXBwb3J0IGZvciBgY29sbGVjdGlvbkZvcm1hdGAgaXMgcGFydGlhbC4KLSBsMTBuICh0cmFuc2xhdGlvbnMpIGlzIG5vdCBpbXBsZW1lbnRlZC4KLSBSZWxhdGl2ZSBwYXRoIHN1cHBvcnQgZm9yIGV4dGVybmFsIGZpbGVzIGlzIG5vdCBpbXBsZW1lbnRlZC4KCiMjIFNlY3VyaXR5IGNvbnRhY3QKClBsZWFzZSBkaXNjbG9zZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBpc3N1ZXMgb3IgdnVsbmVyYWJpbGl0aWVzIGJ5IGVtYWlsaW5nIFtzZWN1cml0eUBzd2FnZ2VyLmlvXShtYWlsdG86c2VjdXJpdHlAc3dhZ2dlci5pbyksIGluc3RlYWQgb2YgdXNpbmcgdGhlIHB1YmxpYyBpc3N1ZSB0cmFja2VyLgoKIyMgTGljZW5zZQoKU3dhZ2dlclVJIGlzIGxpY2Vuc2VkIHVuZGVyIFtBcGFjaGUgMi4wIGxpY2Vuc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLXVpL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpLgpTd2FnZ2VyVUkgY29tZXMgd2l0aCBhbiBleHBsaWNpdCBbTk9USUNFXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci11aS9ibG9iL21hc3Rlci9OT1RJQ0UpIGZpbGUKY29udGFpbmluZyBhZGRpdGlvbmFsIGxlZ2FsIG5vdGljZXMgYW5kIGluZm9ybWF0aW9uLgo= + readmeEtag: '"7ba4444761611d92dc9ce522920064a64612c8d1"' + readmeLastModified: Tue, 05 Nov 2024 23:32:06 GMT repositoryId: 2055965 description: >- Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API. created: '2011-07-15T22:56:39Z' - updated: '2024-11-04T23:21:37Z' + updated: '2024-11-06T01:06:25Z' language: JavaScript archived: false - stars: 26545 - watchers: 650 - forks: 8957 + stars: 26549 + watchers: 649 + forks: 8959 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"c56f856d3dde68bcbaf3a151e186acdfb2e17beb5de3a7c04026deac5a1990d2"' - repoLastModified: Mon, 04 Nov 2024 23:21:37 GMT + repoEtag: '"708cb7fa31eeb528940b00261b8a34842789de7e0c18be8b762472a6c67cf0b2"' + repoLastModified: Wed, 06 Nov 2024 01:06:25 GMT foundInMaster: true name: swagger-ui homepage: https://github.com/swagger-api/swagger-UI @@ -7588,17 +7588,17 @@ repositoryId: 45250726 description: 📘 OpenAPI/Swagger-generated API Reference Documentation created: '2015-10-30T12:53:02Z' - updated: '2024-11-04T20:45:52Z' + updated: '2024-11-06T02:49:36Z' language: TypeScript archived: false - stars: 23555 + stars: 23563 watchers: 296 forks: 2300 owner: Redocly logo: https://avatars.githubusercontent.com/u/32099856?v=4 license: MIT - repoEtag: '"74d9b7a23ca763b0e3751dc7aaf39a1ed77acce8b1291eb1b84341171e9a6854"' - repoLastModified: Mon, 04 Nov 2024 20:45:52 GMT + repoEtag: '"46d5362225cf4200dc6392b171d4f81b769f858f876d6bc3c34e7da88c8409c2"' + repoLastModified: Wed, 06 Nov 2024 02:49:36 GMT foundInMaster: true v3_1: true id: 2725d6db6977c1dd12ceaf9701787e07 @@ -7617,17 +7617,17 @@ Examples and server integrations for generating the Swagger API Specification, which enables easy access to your REST API created: '2011-07-05T23:44:11Z' - updated: '2024-11-03T09:28:43Z' + updated: '2024-11-05T08:17:44Z' language: Java archived: false - stars: 7386 + stars: 7387 watchers: 309 forks: 2182 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"ee551c8e972072365938d779c4d863ff50236f017cb6a3a4922bd8ec75b9e2f0"' - repoLastModified: Sun, 03 Nov 2024 09:28:43 GMT + repoEtag: '"5511866a6db0646ae46388ed2a123292318581f7136190ad462efbff35f2d51c"' + repoLastModified: Tue, 05 Nov 2024 08:17:44 GMT foundInMaster: true category: Code Generators id: 2093f5c5f56617123b73ae823791176d @@ -7644,17 +7644,17 @@ Mockoon is the easiest and quickest way to run mock APIs locally. No remote deployment, no account required, open source. created: '2017-07-17T13:19:16Z' - updated: '2024-11-05T01:30:15Z' + updated: '2024-11-05T20:00:37Z' language: TypeScript archived: false - stars: 6498 + stars: 6509 watchers: 60 - forks: 387 + forks: 386 owner: mockoon logo: https://avatars.githubusercontent.com/u/49429147?v=4 license: NOASSERTION - repoEtag: '"3a071e176b7f7d79023e61c8a34e4839ab74d2c8c4e4d27d59441e6f9bb421ba"' - repoLastModified: Tue, 05 Nov 2024 01:30:15 GMT + repoEtag: '"d85bb6e5570ddab8c3ee17473b3516c44217489f8d4cdc87e7fd2b0d6e8afa03"' + repoLastModified: Tue, 05 Nov 2024 20:00:37 GMT foundInMaster: true category: Testing id: 8728dfca2c1908dbecdcddd31597fad4 @@ -7677,17 +7677,17 @@ repositoryId: 173009358 description: Generate Go client and server boilerplate from OpenAPI 3 specifications created: '2019-02-27T23:59:59Z' - updated: '2024-11-04T15:38:12Z' + updated: '2024-11-06T03:24:45Z' language: Go archived: false - stars: 6263 + stars: 6271 watchers: 36 forks: 865 owner: oapi-codegen logo: https://avatars.githubusercontent.com/u/142752710?v=4 license: Apache-2.0 - repoEtag: '"4684b7a9e0cedb6a89d43c30b7c306bbbc547de0ee09d54d42de7b0b1aa3ddda"' - repoLastModified: Mon, 04 Nov 2024 15:38:12 GMT + repoEtag: '"6129d5f402621b841a10f1c45bd2c70b2581b65bc3e1aa91f3ee0124284757fe"' + repoLastModified: Wed, 06 Nov 2024 03:24:45 GMT foundInMaster: true id: 770a221110cc4ef0e399089f5caf8694 oldLocations: @@ -7716,17 +7716,17 @@ repositoryId: 161691324 description: Generate TypeScript types from OpenAPI 3 specs created: '2018-12-13T20:28:01Z' - updated: '2024-11-04T23:01:14Z' + updated: '2024-11-06T02:49:12Z' language: TypeScript archived: false - stars: 5832 - watchers: 25 + stars: 5838 + watchers: 26 forks: 466 owner: openapi-ts logo: https://avatars.githubusercontent.com/u/172838200?v=4 license: MIT - repoEtag: '"2fd11c2b6f444abf4a3479a13e1525f637075e471c822f806c366db8c8427c95"' - repoLastModified: Mon, 04 Nov 2024 23:01:14 GMT + repoEtag: '"d72c81dff67c80f11f43bbb5e57f2ed1993bc52aaefa5b6590e287feaaa2f17c"' + repoLastModified: Wed, 06 Nov 2024 02:49:12 GMT foundInMaster: true oldLocations: - https://github.com/drwpow/openapi-typescript @@ -7742,17 +7742,17 @@ repositoryId: 88701696 description: Knife4j is a set of Swagger2 and OpenAPI3 All-in-one enhancement solution created: '2017-04-19T04:44:28Z' - updated: '2024-11-04T03:20:08Z' + updated: '2024-11-05T13:26:44Z' language: HTML archived: false - stars: 4128 + stars: 4130 watchers: 75 forks: 622 owner: xiaoymin logo: https://avatars.githubusercontent.com/u/7894406?v=4 license: Apache-2.0 - repoEtag: '"832314468ba8a0cc4a0f1378e26f2abf33f35756e13ec08e23ad862ca904742b"' - repoLastModified: Mon, 04 Nov 2024 03:20:08 GMT + repoEtag: '"9c3438056d9fdd9eb0e900c24f7aa28c2eea0da2fce9137e111de71156270167"' + repoLastModified: Tue, 05 Nov 2024 13:26:44 GMT category: SDK foundInMaster: true - source: openapi3 tags @@ -7768,17 +7768,17 @@ 🌐 Wikipedia for Web APIs. Directory of REST API definitions in OpenAPI 2.0/3.x format created: '2015-02-22T19:58:12Z' - updated: '2024-11-02T23:31:22Z' + updated: '2024-11-05T11:47:45Z' language: null archived: false - stars: 3871 + stars: 3873 watchers: 113 forks: 579 owner: APIs-guru logo: https://avatars.githubusercontent.com/u/10975548?v=4 license: CC0-1.0 - repoEtag: '"934627e499d116c54d0a2a5878dbf0ed303a688b8a7668edff6df4e47325cfdd"' - repoLastModified: Sat, 02 Nov 2024 23:31:22 GMT + repoEtag: '"4d462bbaf6de327a810431185359f35566203d4be4fb6b2ca50f7ca9264a2d3d"' + repoLastModified: Tue, 05 Nov 2024 11:47:45 GMT foundInMaster: true category: SDK id: 667f2aef78d9d19418fbd6c0a7835abb @@ -7802,17 +7802,17 @@ repositoryId: 196475719 description: Library for OpenAPI 3 with spring-boot created: '2019-07-11T23:08:20Z' - updated: '2024-11-04T13:51:05Z' + updated: '2024-11-06T03:23:24Z' language: Java archived: false - stars: 3282 + stars: 3285 watchers: 46 forks: 498 owner: springdoc logo: https://avatars.githubusercontent.com/u/52804136?v=4 license: Apache-2.0 - repoEtag: '"80983340d5efd30ee70d17b8e780d335ff1d086fefc497abb26d75375de52668"' - repoLastModified: Mon, 04 Nov 2024 13:51:05 GMT + repoEtag: '"69e1fded1d17f50115faf3f1fa1607dab7b0aca1cda383291c00509412386435"' + repoLastModified: Wed, 06 Nov 2024 03:23:24 GMT foundInMaster: true id: 901410cec129651fcf7374c79f824f27 - source: openapi3 tags @@ -7828,17 +7828,17 @@ Docker image with Uvicorn managed by Gunicorn for high-performance FastAPI web applications in Python with performance auto-tuning. created: '2019-01-04T17:33:29Z' - updated: '2024-11-04T22:26:10Z' + updated: '2024-11-06T01:54:43Z' language: Python archived: false - stars: 2705 + stars: 2706 watchers: 23 forks: 333 owner: tiangolo logo: https://avatars.githubusercontent.com/u/1326112?v=4 license: MIT - repoEtag: '"e50e8784b6f84e755b3684855e9e6da393831b41bc929cf3b472bc06788e0fe0"' - repoLastModified: Mon, 04 Nov 2024 22:26:10 GMT + repoEtag: '"db6d6c72e55ab15fdf5821fb789fe68f4fc8df7cd18893df28950ac0c22fd05b"' + repoLastModified: Wed, 06 Nov 2024 01:54:43 GMT foundInMaster: true category: Server Implementations id: d0f3fc0bd35fcadacc8ed2c531780739 @@ -7849,25 +7849,25 @@ v3: true repositoryMetadata: base64Readme: >- - IyBTd2FnZ2VyIENsaWVudCA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N3YWdnZXItYXBpL3N3YWdnZXIuaW8vd29yZHByZXNzL2ltYWdlcy9hc3NldHMvU1ctbG9nby1jbHIucG5nIiBoZWlnaHQ9IjUwIiBhbGlnbj0icmlnaHQiPgoKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1qcy9hY3Rpb25zL3dvcmtmbG93cy9ub2RlanMueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLWpzL2FjdGlvbnMpCgoqKlN3YWdnZXIgQ2xpZW50KiogaXMgYSBKYXZhU2NyaXB0IG1vZHVsZSB0aGF0IGFsbG93cyB5b3UgdG8gZmV0Y2gsIHJlc29sdmUsIGFuZCBpbnRlcmFjdCB3aXRoIFN3YWdnZXIvT3BlbkFQSSBkb2N1bWVudHMuCgojIyBOZXchCgoqKlRoaXMgaXMgdGhlIG5ldyB2ZXJzaW9uIG9mIHN3YWdnZXItanMsIDMueC4qKiBUaGUgbmV3IHZlcnNpb24gc3VwcG9ydHMgU3dhZ2dlciAyLjAgYXMgd2VsbCBhcyBPcGVuQVBJIDMuCgpXYW50IHRvIGxlYXJuIG1vcmU/IENoZWNrIG91dCBvdXIgW0ZBUV0oZG9jcy9taWdyYXRpb24vbWlncmF0aW9uLTIteC10by0zLXgubWQpLgoKRm9yIGZlYXR1cmVzIGtub3duIHRvIGJlIG1pc3NpbmcgZnJvbSAzLnggcGxlYXNlIHNlZSB0aGUgW0dyYXZleWFyZF0oZG9jcy9taWdyYXRpb24vZ3JhdmV5YXJkLTMteC5tZCkuCgoKRm9yIHRoZSBvbGRlciB2ZXJzaW9uIG9mIHN3YWdnZXItanMsIHJlZmVyIHRvIHRoZSBbKjIueCBicmFuY2gqXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1qcy90cmVlLzIueCkuCgo+ICpUaGUgbnBtIHBhY2thZ2UgaXMgY2FsbGVkIGBzd2FnZ2VyLWNsaWVudGAgYW5kIHRoZSBHaXRIdWIgcmVwb3NpdG9yeSBpcyBgc3dhZ2dlci1qc2AuCldlJ2xsIGJlIGNvbnNvbGlkYXRpbmcgdGhhdCBzb29uLiBKdXN0IGdpdmluZyB5b3UgdGhlIGhlYWRzLXVwLiBZb3UgbWF5IHNlZSByZWZlcmVuY2VzIHRvIGJvdGggbmFtZXMuKgoKIyMgQ29tcGF0aWJpbGl0eQpUaGUgT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGhhcyB1bmRlcmdvbmUgbXVsdGlwbGUgcmV2aXNpb25zIHNpbmNlIGluaXRpYWwgY3JlYXRpb24gaW4gMjAxMC4gCkNvbXBhdGliaWxpdHkgYmV0d2VlbiBTd2FnZ2VyIENsaWVudCBhbmQgdGhlIE9wZW5BUEkgU3BlY2lmaWNhdGlvbiBpcyBhcyBmb2xsb3dzOgoKU3dhZ2dlciBDbGllbnQgVmVyc2lvbiB8IFJlbGVhc2UgRGF0ZSB8IE9wZW5BUEkgU3BlYyBjb21wYXRpYmlsaXR5ICAgICAgICAgICAgIHwgTm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLQozLjE5LnggfCAyMDIzLTAxLTIzICAgfCAyLjAsIDMuMC4wLCAzLjAuMSwgMy4wLjIsIDMuMC4zLCAzLjEuMCB8IFt0YWcgdjMuMTkuMC1hbHBoYS4zXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1qcy9yZWxlYXNlcy90YWcvdjMuMTkuMC1hbHBoYS4zKQozLjEwLnggfCAyMDIwLTAxLTE3ICAgfCAyLjAsIDMuMC4wLCAzLjAuMSwgMy4wLjIsIDMuMC4zICAgICAgICB8IFt0YWcgdjMuMTAuMF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItanMvdHJlZS92My4xMC4wKQoyLjEuMzIgfCAyMDE3LTAxLTEyICAgfCAxLjAsIDEuMSwgMS4yICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt0YWcgdjIuMS4zMl0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItanMvdHJlZS92Mi4xLjMyKS4gVGhpcyBbcmVsZWFzZV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItanMvcmVsZWFzZXMvdGFnL3YyLjEuMzIpIGlzIG9ubHkgYXZhaWxhYmxlIG9uIEdpdEh1Yi4KCiMjIERvY3VtZW50YXRpb24KCiMjIyMgVXNhZ2UKCi0gW0luc3RhbGxhdGlvbl0oZG9jcy91c2FnZS9pbnN0YWxsYXRpb24ubWQpCi0gW1RhZ3MgSW50ZXJmYWNlXShkb2NzL3VzYWdlL3RhZ3MtaW50ZXJmYWNlLm1kKQotIFtIVFRQIGNsaWVudCBmb3IgT0FTIG9wZXJhdGlvbnNdKGRvY3MvdXNhZ2UvaHR0cC1jbGllbnQtZm9yLW9hcy1vcGVyYXRpb25zLm1kKQotIFtPcGVuQVBJIERlZmluaXRpb24gUmVzb2x2ZXJdKGRvY3MvdXNhZ2Uvb3BlbmFwaS1kZWZpbml0aW9uLXJlc29sdmVyLm1kKQotIFtIVFRQIENsaWVudF0oZG9jcy91c2FnZS9odHRwLWNsaWVudC5tZCkKLSBbU3dhZ2dlciBDbGllbnQgQVBJXShkb2NzL3VzYWdlL2FwaS5tZCkKCiMjIyMgRGV2ZWxvcG1lbnQKCi0gW0NvbnRyaWJ1dGluZ10oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpLy5naXRodWIvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kKQotIFtTZXR0aW5nIHVwXShkb2NzL2RldmVsb3BtZW50L3NldHRpbmctdXAubWQpCi0gW1NjcmlwdHNdKGRvY3MvZGV2ZWxvcG1lbnQvc2NyaXB0cy5tZCkKCiMjIyMgTWlncmF0aW9ucyAKCi0gW01pZ3JhdGlvbiBndWlkZV0oZG9jcy9taWdyYXRpb24vbWlncmF0aW9uLTIteC10by0zLXgubWQpCi0gW0dyYXZleWFyZF0oZG9jcy9taWdyYXRpb24vZ3JhdmV5YXJkLTMteC5tZCkKCiMjIyBSdW50aW1lIAoKIyMjIE5vZGUuanMKCmBzd2FnZ2VyLWNsaWVudGAgcmVxdWlyZXMgTm9kZS5qcyBgPj0xMi4yMC4wYCBhbmQgdXNlcyBkaWZmZXJlbnQgYGZldGNoYCBpbXBsZW1lbnRhdGlvbiBkZXBlbmRpbmcKb24gTm9kZS5qcyB2ZXJzaW9uLgoKLSBgPj0xMi4yMC4wIDwxOGAgLSBbbm9kZS1mZXRjaEAzXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9ub2RlLWZldGNoKSAKLSBgPj0xOGAgLSBbbmF0aXZlIE5vZGUuanMgZmV0Y2hdKGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC12MTgueC9kb2NzL2FwaS9nbG9iYWxzLmh0bWwjZmV0Y2gpCgo+IE5PVEU6IHN3YWdnZXItY2xpZW50IG1pbmltdW0gTm9kZS5qcyBydW50aW1lIHZlcnNpb24gYWxpZ25zIHdpdGggW05vZGUuanMgUmVsZWFzZXNdKGh0dHBzOi8vbm9kZWpzLm9yZy9lbi9hYm91dC9yZWxlYXNlcy8pCj4gd2hpY2ggbWVhbnMgdGhhdCB3ZSBjYW4gZHJvcCBzdXBwb3J0IGZvciAqKkVPTCoqIChFbmQgT2YgTGlmZSkgTm9kZS5qcyB2ZXJzaW9ucyB3aXRob3V0IGRvaW5nIG1ham9yIHZlcnNpb24gYnVtcC4KCiMjIyBCcm93c2VycwoKYHN3YWdnZXItY2xpZW50YCB3b3JrcyBpbiB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIENocm9tZSwgU2FmYXJpLCBGaXJlZm94LCBhbmQgRWRnZQphbmQgdXNlcyBbbmF0aXZlIGZldGNoXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJKSBpbXBsZW1lbnRhdGlvbgpwcm92aWRlZCBieSBlYWNoIHN1cHBvcnRlZCBicm93c2VyLgoKIyMgU2VjdXJpdHkgY29udGFjdAoKUGxlYXNlIGRpc2Nsb3NlIGFueSBzZWN1cml0eS1yZWxhdGVkIGlzc3VlcyBvciB2dWxuZXJhYmlsaXRpZXMgYnkgZW1haWxpbmcgW3NlY3VyaXR5QHN3YWdnZXIuaW9dKG1haWx0bzpzZWN1cml0eUBzd2FnZ2VyLmlvKSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgcHVibGljIGlzc3VlIHRyYWNrZXIuCg== - readmeEtag: '"90c8e04bced456ab4f9618a83fb0817ffa521993"' - readmeLastModified: Thu, 15 Aug 2024 07:23:37 GMT + IyBTd2FnZ2VyIENsaWVudCA8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N3YWdnZXItYXBpL3N3YWdnZXIuaW8vd29yZHByZXNzL2ltYWdlcy9hc3NldHMvU1ctbG9nby1jbHIucG5nIiBoZWlnaHQ9IjUwIiBhbGlnbj0icmlnaHQiPgoKWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1qcy9hY3Rpb25zL3dvcmtmbG93cy9ub2RlanMueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9zd2FnZ2VyLWpzL2FjdGlvbnMpCgoqKlN3YWdnZXIgQ2xpZW50KiogaXMgYSBKYXZhU2NyaXB0IG1vZHVsZSB0aGF0IGFsbG93cyB5b3UgdG8gZmV0Y2gsIHJlc29sdmUsIGFuZCBpbnRlcmFjdCB3aXRoIFN3YWdnZXIvT3BlbkFQSSBkb2N1bWVudHMuCgojIyBOZXchCgoqKlRoaXMgaXMgdGhlIG5ldyB2ZXJzaW9uIG9mIHN3YWdnZXItanMsIDMueC4qKiBUaGUgbmV3IHZlcnNpb24gc3VwcG9ydHMgU3dhZ2dlciAyLjAgYXMgd2VsbCBhcyBPcGVuQVBJIDMuCgpXYW50IHRvIGxlYXJuIG1vcmU/IENoZWNrIG91dCBvdXIgW0ZBUV0oZG9jcy9taWdyYXRpb24vbWlncmF0aW9uLTIteC10by0zLXgubWQpLgoKRm9yIGZlYXR1cmVzIGtub3duIHRvIGJlIG1pc3NpbmcgZnJvbSAzLnggcGxlYXNlIHNlZSB0aGUgW0dyYXZleWFyZF0oZG9jcy9taWdyYXRpb24vZ3JhdmV5YXJkLTMteC5tZCkuCgoKRm9yIHRoZSBvbGRlciB2ZXJzaW9uIG9mIHN3YWdnZXItanMsIHJlZmVyIHRvIHRoZSBbKjIueCBicmFuY2gqXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1qcy90cmVlLzIueCkuCgo+ICpUaGUgbnBtIHBhY2thZ2UgaXMgY2FsbGVkIGBzd2FnZ2VyLWNsaWVudGAgYW5kIHRoZSBHaXRIdWIgcmVwb3NpdG9yeSBpcyBgc3dhZ2dlci1qc2AuCldlJ2xsIGJlIGNvbnNvbGlkYXRpbmcgdGhhdCBzb29uLiBKdXN0IGdpdmluZyB5b3UgdGhlIGhlYWRzLXVwLiBZb3UgbWF5IHNlZSByZWZlcmVuY2VzIHRvIGJvdGggbmFtZXMuKgoKIyMgQ29tcGF0aWJpbGl0eQpUaGUgT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGhhcyB1bmRlcmdvbmUgbXVsdGlwbGUgcmV2aXNpb25zIHNpbmNlIGluaXRpYWwgY3JlYXRpb24gaW4gMjAxMC4gCkNvbXBhdGliaWxpdHkgYmV0d2VlbiBTd2FnZ2VyIENsaWVudCBhbmQgdGhlIE9wZW5BUEkgU3BlY2lmaWNhdGlvbiBpcyBhcyBmb2xsb3dzOgoKU3dhZ2dlciBDbGllbnQgVmVyc2lvbiB8IFJlbGVhc2UgRGF0ZSB8IE9wZW5BUEkgU3BlYyBjb21wYXRpYmlsaXR5ICAgICAgICAgICAgIHwgTm90ZXMKLS0tLS0tLS0tLS0tLS0tLS0tIHwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLQozLjE5LnggfCAyMDIzLTAxLTIzICAgfCAyLjAsIDMuMC4wLCAzLjAuMSwgMy4wLjIsIDMuMC4zLCAzLjEuMCB8IFt0YWcgdjMuMTkuMC1hbHBoYS4zXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1qcy9yZWxlYXNlcy90YWcvdjMuMTkuMC1hbHBoYS4zKQozLjEwLnggfCAyMDIwLTAxLTE3ICAgfCAyLjAsIDMuMC4wLCAzLjAuMSwgMy4wLjIsIDMuMC4zICAgICAgICB8IFt0YWcgdjMuMTAuMF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItanMvdHJlZS92My4xMC4wKQoyLjEuMzIgfCAyMDE3LTAxLTEyICAgfCAxLjAsIDEuMSwgMS4yICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt0YWcgdjIuMS4zMl0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItanMvdHJlZS92Mi4xLjMyKS4gVGhpcyBbcmVsZWFzZV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL3N3YWdnZXItanMvcmVsZWFzZXMvdGFnL3YyLjEuMzIpIGlzIG9ubHkgYXZhaWxhYmxlIG9uIEdpdEh1Yi4KCiMjIEFub255bWl6ZWQgYW5hbHl0aWNzCgpTd2FnZ2VyIENsaWVudCB1c2VzIFtTY2FyZl0oaHR0cHM6Ly9zY2FyZi5zaC8pIHRvIGNvbGxlY3QgW2Fub255bWl6ZWQgaW5zdGFsbGF0aW9uIGFuYWx5dGljc10oaHR0cHM6Ly9naXRodWIuY29tL3NjYXJmLXNoL3NjYXJmLWpzP3RhYj1yZWFkbWUtb3YtZmlsZSNhcy1hLXVzZXItb2YtYS1wYWNrYWdlLXVzaW5nLXNjYXJmLWpzLXdoYXQtaW5mb3JtYXRpb24tZG9lcy1zY2FyZi1qcy1zZW5kLWFib3V0LW1lKS4gVGhlc2UgYW5hbHl0aWNzIGhlbHAgc3VwcG9ydCB0aGUgbWFpbnRhaW5lcnMgb2YgdGhpcyBsaWJyYXJ5IGFuZCBPTkxZIHJ1biBkdXJpbmcgaW5zdGFsbGF0aW9uLiBUbyBbb3B0IG91dF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYXJmLXNoL3NjYXJmLWpzP3RhYj1yZWFkbWUtb3YtZmlsZSNhcy1hLXVzZXItb2YtYS1wYWNrYWdlLXVzaW5nLXNjYXJmLWpzLWhvdy1jYW4taS1vcHQtb3V0LW9mLWFuYWx5dGljcyksIHlvdSBjYW4gc2V0IHRoZSBgc2NhcmZTZXR0aW5ncy5lbmFibGVkYCBmaWVsZCB0byBgZmFsc2VgIGluIHlvdXIgcHJvamVjdCdzIGBwYWNrYWdlLmpzb25gOgoKYGBgCi8vIHBhY2thZ2UuanNvbgp7CiAgLy8gLi4uCiAgInNjYXJmU2V0dGluZ3MiOiB7CiAgICAiZW5hYmxlZCI6IGZhbHNlCiAgfQogIC8vIC4uLgp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGBTQ0FSRl9BTkFMWVRJQ1NgIHRvIGBmYWxzZWAgYXMgcGFydCBvZiB0aGUgZW52aXJvbm1lbnQgdGhhdCBpbnN0YWxscyB5b3VyIG5wbSBwYWNrYWdlcywgZS5nLiwgYFNDQVJGX0FOQUxZVElDUz1mYWxzZSBucG0gaW5zdGFsbGAuCgojIyBEb2N1bWVudGF0aW9uCgojIyMjIFVzYWdlCgotIFtJbnN0YWxsYXRpb25dKGRvY3MvdXNhZ2UvaW5zdGFsbGF0aW9uLm1kKQotIFtUYWdzIEludGVyZmFjZV0oZG9jcy91c2FnZS90YWdzLWludGVyZmFjZS5tZCkKLSBbSFRUUCBjbGllbnQgZm9yIE9BUyBvcGVyYXRpb25zXShkb2NzL3VzYWdlL2h0dHAtY2xpZW50LWZvci1vYXMtb3BlcmF0aW9ucy5tZCkKLSBbT3BlbkFQSSBEZWZpbml0aW9uIFJlc29sdmVyXShkb2NzL3VzYWdlL29wZW5hcGktZGVmaW5pdGlvbi1yZXNvbHZlci5tZCkKLSBbSFRUUCBDbGllbnRdKGRvY3MvdXNhZ2UvaHR0cC1jbGllbnQubWQpCi0gW1N3YWdnZXIgQ2xpZW50IEFQSV0oZG9jcy91c2FnZS9hcGkubWQpCgojIyMjIERldmVsb3BtZW50CgotIFtDb250cmlidXRpbmddKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS8uZ2l0aHViL2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCkKLSBbU2V0dGluZyB1cF0oZG9jcy9kZXZlbG9wbWVudC9zZXR0aW5nLXVwLm1kKQotIFtTY3JpcHRzXShkb2NzL2RldmVsb3BtZW50L3NjcmlwdHMubWQpCgojIyMjIE1pZ3JhdGlvbnMgCgotIFtNaWdyYXRpb24gZ3VpZGVdKGRvY3MvbWlncmF0aW9uL21pZ3JhdGlvbi0yLXgtdG8tMy14Lm1kKQotIFtHcmF2ZXlhcmRdKGRvY3MvbWlncmF0aW9uL2dyYXZleWFyZC0zLXgubWQpCgojIyMgUnVudGltZSAKCiMjIyBOb2RlLmpzCgpgc3dhZ2dlci1jbGllbnRgIHJlcXVpcmVzIE5vZGUuanMgYD49MTIuMjAuMGAgYW5kIHVzZXMgZGlmZmVyZW50IGBmZXRjaGAgaW1wbGVtZW50YXRpb24gZGVwZW5kaW5nCm9uIE5vZGUuanMgdmVyc2lvbi4KCi0gYD49MTIuMjAuMCA8MThgIC0gW25vZGUtZmV0Y2hAM10oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2Uvbm9kZS1mZXRjaCkgCi0gYD49MThgIC0gW25hdGl2ZSBOb2RlLmpzIGZldGNoXShodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvZ2xvYmFscy5odG1sI2ZldGNoKQoKPiBOT1RFOiBzd2FnZ2VyLWNsaWVudCBtaW5pbXVtIE5vZGUuanMgcnVudGltZSB2ZXJzaW9uIGFsaWducyB3aXRoIFtOb2RlLmpzIFJlbGVhc2VzXShodHRwczovL25vZGVqcy5vcmcvZW4vYWJvdXQvcmVsZWFzZXMvKQo+IHdoaWNoIG1lYW5zIHRoYXQgd2UgY2FuIGRyb3Agc3VwcG9ydCBmb3IgKipFT0wqKiAoRW5kIE9mIExpZmUpIE5vZGUuanMgdmVyc2lvbnMgd2l0aG91dCBkb2luZyBtYWpvciB2ZXJzaW9uIGJ1bXAuCgojIyMgQnJvd3NlcnMKCmBzd2FnZ2VyLWNsaWVudGAgd29ya3MgaW4gdGhlIGxhdGVzdCB2ZXJzaW9ucyBvZiBDaHJvbWUsIFNhZmFyaSwgRmlyZWZveCwgYW5kIEVkZ2UKYW5kIHVzZXMgW25hdGl2ZSBmZXRjaF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0ZldGNoX0FQSSkgaW1wbGVtZW50YXRpb24KcHJvdmlkZWQgYnkgZWFjaCBzdXBwb3J0ZWQgYnJvd3Nlci4KCiMjIFNlY3VyaXR5IGNvbnRhY3QKClBsZWFzZSBkaXNjbG9zZSBhbnkgc2VjdXJpdHktcmVsYXRlZCBpc3N1ZXMgb3IgdnVsbmVyYWJpbGl0aWVzIGJ5IGVtYWlsaW5nIFtzZWN1cml0eUBzd2FnZ2VyLmlvXShtYWlsdG86c2VjdXJpdHlAc3dhZ2dlci5pbyksIGluc3RlYWQgb2YgdXNpbmcgdGhlIHB1YmxpYyBpc3N1ZSB0cmFja2VyLgo= + readmeEtag: '"4578853bd7936e0fbf78854ffdbbbc88b5fad6c0"' + readmeLastModified: Tue, 05 Nov 2024 10:23:26 GMT repositoryId: 3455070 description: >- Javascript library to connect to swagger-enabled APIs via browser or nodejs created: '2012-02-16T00:08:43Z' - updated: '2024-11-01T23:13:25Z' + updated: '2024-11-05T10:23:30Z' language: JavaScript archived: false stars: 2624 watchers: 95 - forks: 761 + forks: 762 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"c744c942ad32328f5e46ef716ad0bffba2c0a14c88cc4745fa007bef14fa213a"' - repoLastModified: Fri, 01 Nov 2024 23:13:25 GMT + repoEtag: '"08d9c8a96036c2e03b92282013f7e56c811c3fb4e99e1e56c4cf6da951d9e940"' + repoLastModified: Tue, 05 Nov 2024 10:23:30 GMT foundInMaster: true category: Code Generators id: 5f98b79464c0723b688cff46ee3500c6 @@ -7883,17 +7883,17 @@ repositoryId: 244234763 description: Sane and flexible OpenAPI 3 schema generation for Django REST framework. created: '2020-03-01T22:36:54Z' - updated: '2024-11-04T21:59:17Z' + updated: '2024-11-06T00:32:36Z' language: Python archived: false - stars: 2386 + stars: 2388 watchers: 12 forks: 264 owner: tfranzel logo: https://avatars.githubusercontent.com/u/13507857?v=4 license: BSD-3-Clause - repoEtag: '"8e5095030d73e730439dc79dbe8e0fd03d58b85e2660cbf58ef2905edf3e20d6"' - repoLastModified: Mon, 04 Nov 2024 21:59:17 GMT + repoEtag: '"c768e713b434b098aa416753cf31f97a604db267c374111ed8d36b97f4780b93"' + repoLastModified: Wed, 06 Nov 2024 00:32:36 GMT foundInMaster: true category: Server Implementations id: 520f5c66c3e42a7b3fbface4f156c1dc @@ -7911,17 +7911,17 @@ A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML created: '2021-01-26T02:53:57Z' - updated: '2024-11-04T10:09:23Z' + updated: '2024-11-05T23:16:50Z' language: Python archived: false - stars: 2382 + stars: 2384 watchers: 19 forks: 72 owner: jcrist logo: https://avatars.githubusercontent.com/u/2783717?v=4 license: BSD-3-Clause - repoEtag: '"88635da91c79a40007b5c6aa9a8525941967ba47a7a95c61bcde541386384023"' - repoLastModified: Mon, 04 Nov 2024 10:09:23 GMT + repoEtag: '"1061f87ce787f375aa0076a242040efafe7bb3f95d1a2be7ccd6ebf2ffdd0ac2"' + repoLastModified: Tue, 05 Nov 2024 23:16:50 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -7944,17 +7944,17 @@ repositoryId: 203157084 description: Supercharge your API testing, catch bugs, and ensure compliance created: '2019-08-19T11:13:01Z' - updated: '2024-11-04T23:00:02Z' + updated: '2024-11-05T10:46:50Z' language: Python archived: false - stars: 2282 + stars: 2283 watchers: 21 forks: 163 owner: schemathesis logo: https://avatars.githubusercontent.com/u/70383271?v=4 license: MIT - repoEtag: '"a9e6d1acdd4d4511aabf003280b48c9517af4e6c42d9dd506a3529f0ff1ebdad"' - repoLastModified: Mon, 04 Nov 2024 23:00:02 GMT + repoEtag: '"3cfd9e8a79b55a22f4b754e9eb4b2c19cf5a78ebd6976bd2876059b72a42d951"' + repoLastModified: Tue, 05 Nov 2024 10:46:50 GMT foundInMaster: true id: f4032fb371a703acffa691c0f1239d45 oldLocations: @@ -7972,17 +7972,17 @@ A compiler for APIs described by the OpenAPI Specification with plugins for code generation and other API support tasks. created: '2016-11-15T19:21:53Z' - updated: '2024-11-02T08:47:37Z' + updated: '2024-11-06T03:24:48Z' language: Go archived: false - stars: 2097 + stars: 2098 watchers: 38 forks: 249 owner: google logo: https://avatars.githubusercontent.com/u/1342004?v=4 license: Apache-2.0 - repoEtag: '"00be808caf685c6ac392320ae69d129d8997f16f9620619d62a9feb43527a464"' - repoLastModified: Sat, 02 Nov 2024 08:47:37 GMT + repoEtag: '"a47964874238826093edcac36bfedeeab48f487cbfc185a0698cad8957b66049"' + repoLastModified: Wed, 06 Nov 2024 03:24:48 GMT foundInMaster: true category: Converters id: 46e070512676eb0fd196ee199e6a0b34 @@ -8008,7 +8008,7 @@ owner: rapi-doc logo: https://avatars.githubusercontent.com/u/104180085?v=4 license: MIT - repoEtag: '"5f522f061153d08dff8cff3086e2afc9dc79180c9a8d82387f7030e0c83fffd2"' + repoEtag: '"87bc72006339dc24a43f70d24108e4177bc6e74ded6658ae8520e26326fa12e4"' repoLastModified: Sun, 03 Nov 2024 23:43:10 GMT foundInMaster: true category: @@ -8030,17 +8030,17 @@ A node package wrapper for https://github.com/OpenAPITools/openapi-generator created: '2018-10-26T10:21:23Z' - updated: '2024-11-04T22:54:16Z' + updated: '2024-11-06T00:20:37Z' language: TypeScript archived: false - stars: 1448 + stars: 1449 watchers: 19 forks: 151 owner: OpenAPITools logo: https://avatars.githubusercontent.com/u/37325267?v=4 license: Apache-2.0 - repoEtag: '"6841cac88796b8a3e5e758b77bdc5a7d999f83c8f5acd3b41de1a03b23853d32"' - repoLastModified: Mon, 04 Nov 2024 22:54:16 GMT + repoEtag: '"f55e30bea5ff68f28c388f09d9b811a5eaab3093f675cbaf0355a03581b240b5"' + repoLastModified: Wed, 06 Nov 2024 00:20:37 GMT foundInMaster: true category: - Code Generators @@ -8089,17 +8089,17 @@ repositoryId: 372032505 description: OpenAPI v3 code generator for go created: '2021-05-29T17:25:48Z' - updated: '2024-11-04T00:20:51Z' + updated: '2024-11-06T03:31:37Z' language: Go archived: false - stars: 1414 + stars: 1416 watchers: 14 forks: 83 owner: ogen-go logo: https://avatars.githubusercontent.com/u/85122432?v=4 license: Apache-2.0 - repoEtag: '"fa9657a06e69a3023ee4ed7013a23363e0cbf6b49727ca15117ccd4d33f6e8dc"' - repoLastModified: Mon, 04 Nov 2024 00:20:51 GMT + repoEtag: '"8a84babaebb36bf9ec4f61f4388fbbe949a5c129d1d7be0f85060f86a2078d1b"' + repoLastModified: Wed, 06 Nov 2024 03:31:37 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -8115,17 +8115,17 @@ A pluggable API specification generator. Currently supports the OpenAPI Specification (f.k.a. the Swagger specification).. created: '2014-10-18T23:48:49Z' - updated: '2024-11-04T21:36:01Z' + updated: '2024-11-05T10:25:52Z' language: Python archived: false - stars: 1173 + stars: 1174 watchers: 24 forks: 177 owner: marshmallow-code logo: https://avatars.githubusercontent.com/u/10334301?v=4 license: MIT - repoEtag: '"5f8ba1b692758543e6de95cc2338326e736a60d672659fb7cf7d7afa136a39fd"' - repoLastModified: Mon, 04 Nov 2024 21:36:01 GMT + repoEtag: '"f1738d3b7bf54aa56ac92831cfabd765f22fc603471919d22d307dff2c288e08"' + repoLastModified: Tue, 05 Nov 2024 10:25:52 GMT foundInMaster: true category: Parsers id: c1528764f05dd585ca47886dd6dabb86 @@ -8141,17 +8141,17 @@ repositoryId: 329190167 description: A lightweight Python web API framework. created: '2021-01-13T04:08:48Z' - updated: '2024-11-04T14:43:11Z' + updated: '2024-11-05T20:24:52Z' language: Python archived: false - stars: 1034 + stars: 1036 watchers: 21 forks: 129 owner: apiflask logo: https://avatars.githubusercontent.com/u/78075725?v=4 license: MIT - repoEtag: '"748be6c8291a5b58adce4ba650c80ef2e8fcbd8411167d87ae5b333f1d1ffc83"' - repoLastModified: Mon, 04 Nov 2024 14:43:11 GMT + repoEtag: '"bd041785289c2ccbdb077a81a7aa8f7a699c304075eb8616c7ff29ee1357c217"' + repoLastModified: Tue, 05 Nov 2024 20:24:52 GMT category: Server Implementations foundInMaster: true oldLocations: @@ -8177,7 +8177,7 @@ owner: asteasolutions logo: https://avatars.githubusercontent.com/u/5244095?v=4 license: MIT - repoEtag: '"dd91771e48e1a333ba9848d09e92f8bde2922f40e99309b5fa81a2be699a86bd"' + repoEtag: '"d3e3cb47f8031283130f0d22c802a9983cfd4463f0d03be75f9ff53479ce6921"' repoLastModified: Tue, 05 Nov 2024 01:03:16 GMT category: Parsers foundInMaster: true @@ -8194,17 +8194,17 @@ A fast Java JSON schema validator that supports draft V4, V6, V7, V2019-09 and V2020-12 created: '2016-09-15T12:24:16Z' - updated: '2024-11-04T06:42:19Z' + updated: '2024-11-05T08:15:02Z' language: Java archived: false - stars: 854 + stars: 856 watchers: 42 forks: 325 owner: networknt logo: https://avatars.githubusercontent.com/u/8740739?v=4 license: Apache-2.0 - repoEtag: '"6693df99bfc69443772e8a04af969b4797e3549cda167634941a5cf5fb114a90"' - repoLastModified: Mon, 04 Nov 2024 06:42:19 GMT + repoEtag: '"89e884829543a325f8b163be89537190e4d6ccb3e58b8739aac6528774a58357"' + repoLastModified: Tue, 05 Nov 2024 08:15:02 GMT foundInMaster: true category: Parsers id: 69c6f349899d198b4045edb7ffa3fb74 @@ -8273,17 +8273,17 @@ repositoryId: 71464935 description: Convert Swagger 2.0 definitions to OpenAPI 3.0 and resolve/validate/lint created: '2016-10-20T13:17:42Z' - updated: '2024-10-21T23:35:26Z' + updated: '2024-11-05T21:35:15Z' language: JavaScript archived: false - stars: 705 + stars: 707 watchers: 15 forks: 129 owner: Mermade logo: https://avatars.githubusercontent.com/u/15950345?v=4 license: BSD-3-Clause - repoEtag: '"f51c95c56d8c1e92d5ede5dfd89f3c30e2b9184c8b81eee4285305311c951dc2"' - repoLastModified: Mon, 21 Oct 2024 23:35:26 GMT + repoEtag: '"41839c7735c4655a4e3751e5b74267c3a14249568a27f0644876b01d44a0e0a5"' + repoLastModified: Tue, 05 Nov 2024 21:35:15 GMT foundInMaster: true category: - Converters @@ -8408,17 +8408,17 @@ repositoryId: 766082951 description: Terminal UI to list, browse and run APIs defined with openapi spec. created: '2024-03-02T09:42:10Z' - updated: '2024-11-03T21:01:31Z' + updated: '2024-11-05T21:50:15Z' language: Rust archived: false - stars: 656 + stars: 659 watchers: 5 forks: 15 owner: zaghaghi logo: https://avatars.githubusercontent.com/u/111259?v=4 license: MIT - repoEtag: '"038fde43ea51ddaab4f02b800d43b50bc66c0e8dca8a20df503ceb67ec6d564c"' - repoLastModified: Sun, 03 Nov 2024 21:01:31 GMT + repoEtag: '"47a977772183384c50aa732b40bf75ff6f480ee9b65a856bd31c6a017600dcf1"' + repoLastModified: Tue, 05 Nov 2024 21:50:15 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -8434,7 +8434,7 @@ 😎 A list of awesome projects related to OpenAPI 3.0.x, curated by the community created: '2017-03-02T19:31:41Z' - updated: '2024-11-05T00:00:52Z' + updated: '2024-11-06T00:02:48Z' language: JavaScript archived: false stars: 629 @@ -8443,8 +8443,8 @@ owner: APIs-guru logo: https://avatars.githubusercontent.com/u/10975548?v=4 license: BSD-3-Clause - repoEtag: '"6b8b3964f75cda1ff1258227f994f3e66639c0936cfd21f149a61b79b797cb71"' - repoLastModified: Tue, 05 Nov 2024 00:00:52 GMT + repoEtag: '"c0565e72636848c8c54499ae8d4fca13b4faeecc094410ce65144a3ee50f71f6"' + repoLastModified: Wed, 06 Nov 2024 00:02:48 GMT foundInMaster: true category: Parsers id: 64d4029fd6b82879b746263cac7ce274 @@ -8486,17 +8486,17 @@ 一个实现了多种常用站点的易用化API的程序 / A program that implements easy-to-use APIs for a variety of commonly used sites. created: '2020-12-18T14:56:31Z' - updated: '2024-11-05T02:54:48Z' + updated: '2024-11-05T22:35:13Z' language: Python archived: false - stars: 547 + stars: 548 watchers: 10 forks: 83 owner: mixmoe logo: https://avatars.githubusercontent.com/u/68723928?v=4 license: Apache-2.0 - repoEtag: '"130bb1e7aec814c352641738e2418293ccb5c54c3296b89b857de7a4e6f826fe"' - repoLastModified: Tue, 05 Nov 2024 02:54:48 GMT + repoEtag: '"a324607f62a2395bb09812501aa9e8731cae1ca6d8eb3f7855a37836fc20cecf"' + repoLastModified: Tue, 05 Nov 2024 22:35:13 GMT foundInMaster: true category: Testing id: a5ce8925c7b03da0bff459d65f63458a @@ -8514,17 +8514,17 @@ Query, provision and operate Cloud and SaaS resources and APIs using an extensible SQL based framework created: '2022-01-03T08:20:06Z' - updated: '2024-10-30T21:43:04Z' + updated: '2024-11-06T01:43:12Z' language: Go archived: false - stars: 517 + stars: 522 watchers: 12 forks: 47 owner: stackql logo: https://avatars.githubusercontent.com/u/95105302?v=4 license: MIT - repoEtag: '"6f6a3a25839a2156d6dd41fb65f29594a222f5851ba472106aed2908b548acae"' - repoLastModified: Wed, 30 Oct 2024 21:43:04 GMT + repoEtag: '"efee9058e4294825c20f15fb7b06adb7ddfb32e1d13c1c9b69dc4a49aea6df6f"' + repoLastModified: Wed, 06 Nov 2024 01:43:12 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -8803,17 +8803,17 @@ repositoryId: 104184487 description: SqlAlchemy Flask-Restful Swagger Json:API OpenAPI created: '2017-09-20T07:56:55Z' - updated: '2024-11-03T02:44:35Z' + updated: '2024-11-05T14:22:56Z' language: Python archived: false - stars: 404 + stars: 405 watchers: 14 forks: 72 owner: thomaxxl logo: https://avatars.githubusercontent.com/u/4190750?v=4 license: GPL-3.0 - repoEtag: '"19386e0705e25e0cbacdf4f9df380c48ada005be63418b8dcb7dd97e25a7c5a9"' - repoLastModified: Sun, 03 Nov 2024 02:44:35 GMT + repoEtag: '"c1cf7a5bc00d6bc5dce62b941684ac6facbab0f3f8a66b8d0a05230cebd46e95"' + repoLastModified: Tue, 05 Nov 2024 14:22:56 GMT foundInMaster: true category: Server Implementations id: 1ccc4d969c768f04576d518679fb6489 @@ -8829,17 +8829,17 @@ repositoryId: 479982630 description: Clean Architecture Example using FastAPI framework created: '2022-04-10T10:23:51Z' - updated: '2024-11-04T07:07:18Z' + updated: '2024-11-06T02:13:39Z' language: Python archived: false - stars: 385 + stars: 389 watchers: 4 forks: 56 owner: 0xTheProDev logo: https://avatars.githubusercontent.com/u/14367736?v=4 license: MIT - repoEtag: '"8127d1f13b1c9751945276dd04ea6f504acf62e4a18132c9e0f55e00fd611f68"' - repoLastModified: Mon, 04 Nov 2024 07:07:18 GMT + repoEtag: '"79ae18fa9c05633c9e410fa9d81ec5124ef0e37f216f9da97e794ca0ba39c7f6"' + repoLastModified: Wed, 06 Nov 2024 02:13:39 GMT category: Server Implementations foundInMaster: true oldLocations: @@ -8899,7 +8899,7 @@ owner: swaggest logo: https://avatars.githubusercontent.com/u/19609628?v=4 license: MIT - repoEtag: '"2a4f00bbd2655952bdae4fdf9a8343be7e8a4748c1d90556727a61572596fdc7"' + repoEtag: '"cbb30bf47f2757a640750fb918011213817e50c16aadfac01ea6f4aa5cb8f545"' repoLastModified: Sun, 03 Nov 2024 00:26:34 GMT foundInMaster: true id: ecd2fef7bb4079bda209503f9fb9820b @@ -9061,17 +9061,17 @@ OpenAPI 3 and 3.1 schema generator and validator for Hono, itty-router and more! created: '2022-11-08T11:43:41Z' - updated: '2024-11-04T22:23:01Z' + updated: '2024-11-06T02:31:33Z' language: TypeScript archived: false - stars: 317 + stars: 320 watchers: 10 forks: 41 owner: cloudflare logo: https://avatars.githubusercontent.com/u/314135?v=4 license: MIT - repoEtag: '"56b5031ae4662064fed0e9f08306cf327cba86612d8fd8dc6f5f7d5a84a2e228"' - repoLastModified: Mon, 04 Nov 2024 22:23:01 GMT + repoEtag: '"4e294dc3d433f21d90277ea3bb9a12f46fc26f5775739e5c4115af855c262dc7"' + repoLastModified: Wed, 06 Nov 2024 02:31:33 GMT category: Server Implementations foundInMaster: true oldLocations: @@ -9090,7 +9090,7 @@ Esmerald framework - Highly scalable, performant, easy to learn, easy to code and for every sizeable and complex application created: '2022-10-18T11:50:26Z' - updated: '2024-11-03T14:29:45Z' + updated: '2024-11-05T19:25:02Z' language: Python archived: false stars: 316 @@ -9099,8 +9099,8 @@ owner: dymmond logo: https://avatars.githubusercontent.com/u/65982469?v=4 license: BSD-3-Clause - repoEtag: '"0809bcb554371bd3e5ae32d86b1f90cae8d873911341ab08d0f06c5b478c46c4"' - repoLastModified: Sun, 03 Nov 2024 14:29:45 GMT + repoEtag: '"6e2685d3e94911c8fa6979e97872aaf096adb88a4e57dbaa36e323c3ffd09dea"' + repoLastModified: Tue, 05 Nov 2024 19:25:02 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -9122,11 +9122,11 @@ archived: false stars: 313 watchers: 7 - forks: 183 + forks: 184 owner: asyncapi logo: https://avatars.githubusercontent.com/u/16401334?v=4 license: Apache-2.0 - repoEtag: '"2b4dc4560f0dbcfeb231504bcc213cde5c252dac900d17d86009f651ac33564e"' + repoEtag: '"b465ab1ee2dd16039f8d1bb0ad54d70d3c46d7b90c53c69d26876b494526d4f6"' repoLastModified: Fri, 01 Nov 2024 05:26:48 GMT foundInMaster: true - source: openapi3 tags @@ -9290,7 +9290,7 @@ owner: samchungy logo: https://avatars.githubusercontent.com/u/18017094?v=4 license: MIT - repoEtag: '"76c3b14edc251e89598462360a5bdee1dd1c07f5232d4a0ded9ad265fd2fc47a"' + repoEtag: '"b483052ea3be75e31ae14d7d970607b7442dd7858a02b94e5698acc9d5e1fbbb"' repoLastModified: Tue, 05 Nov 2024 01:03:14 GMT category: Parsers foundInMaster: true @@ -9330,17 +9330,17 @@ repositoryId: 206982975 description: null created: '2019-09-07T14:54:31Z' - updated: '2024-11-02T10:04:36Z' + updated: '2024-11-05T16:58:28Z' language: Java archived: false - stars: 258 + stars: 257 watchers: 15 forks: 359 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"5cc1148c25ff1398ac6dc8ee7dbbc2bdacf57b86e72dd8f22f060625adcc7ddc"' - repoLastModified: Sat, 02 Nov 2024 10:04:36 GMT + repoEtag: '"a1c669f17675ba38f268a7445fbffa0d788c1dd2557443fb5de968e7f8cf721e"' + repoLastModified: Tue, 05 Nov 2024 16:58:28 GMT foundInMaster: true category: - Code Generators @@ -9422,17 +9422,17 @@ Autogenered docs, Zod - BullMQ - Nodemailer - Docker - MongoDB (Mongoose) - Socket.io created: '2024-08-11T02:19:59Z' - updated: '2024-11-05T00:16:42Z' + updated: '2024-11-05T23:36:25Z' language: TypeScript archived: false - stars: 248 + stars: 251 watchers: 5 forks: 43 owner: muneebhashone logo: https://avatars.githubusercontent.com/u/88892379?v=4 license: MIT - repoEtag: '"ecda85ffc65a30960dffc402b355e339c466c1985951380f88d5f5106e59919e"' - repoLastModified: Tue, 05 Nov 2024 00:16:42 GMT + repoEtag: '"e659df2ac6b859e9696ae3b74511c03415814737274b7f5fa5192ae81a508589"' + repoLastModified: Tue, 05 Nov 2024 23:36:25 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -9504,12 +9504,12 @@ language: Go archived: false stars: 229 - watchers: 143 + watchers: 144 forks: 12 owner: grafana logo: https://avatars.githubusercontent.com/u/7195757?v=4 license: Apache-2.0 - repoEtag: '"82355973ad88a9e5b56bf26c49ac08dd7b1cfd545396f3b98608036f29bb7ced"' + repoEtag: '"3e42e513d0ba83f8d03c1d3140234c0504344a587989ca4f404299b79b5bf631"' repoLastModified: Wed, 21 Aug 2024 10:44:42 GMT foundInMaster: true category: @@ -9845,16 +9845,15 @@ id: b04ab57cb5fd068ea45591850bba85fc repositoryMetadata: base64Readme: >- - PGRpdiBhbGlnbj0ibGVmdCI+CiAgPGgxPlNwZWFrZWFzeTwvaDE+CiAgPHA+VGhlIHBsYXRmb3JtIHRvIGJ1aWxkLCB0ZXN0LCBhbmQgZGlzdHJpYnV0ZSBBUElzIHlvdXIgdXNlcnMg4p2k77iPPC9wPgogICA8YSBocmVmPSJodHRwczovL3NwZWFrZWFzeS5jb20vZG9jcy9jcmVhdGUtY2xpZW50LXNka3MvIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9zdGF0aWMvdjE/bGFiZWw9RG9jcyZtZXNzYWdlPVF1aWNrc3RhcnQmY29sb3I9MDAwJnN0eWxlPWZvci10aGUtYmFkZ2UiIC8+PC9hPgogICA8YSBocmVmPSJodHRwczovL2pvaW4uc2xhY2suY29tL3Qvc3BlYWtlYXN5LWRldi9zaGFyZWRfaW52aXRlL3p0LTFjd2IzZmx4ei1sUzVTeVp4QXNGXzNOT3E1eGM4Q2p3Ij48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9zdGF0aWMvdjE/bGFiZWw9U2xhY2smbWVzc2FnZT1Kb2luJmNvbG9yPTcyODlkYSZzdHlsZT1mb3ItdGhlLWJhZGdlIiAvPjwvYT4KICA8aDQ+PGI+VHJ1c3RlZCBCeTo8L2I+PC9oND4KICA8aDQ+CiAgCTxwPgogIAkJPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC92ZXJjZWwvdHJlZS9tYWluL3BhY2thZ2VzL3NkayIgdGFyZ2V0PSJfYmxhbmsiIG1hcmdpbi1yaWdodD0iMjBweCI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hNmZlYjBmZi02Y2I0LTQwNmYtOTc5Ny0yNDZkY2JkN2FlMDEiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9lNTA5NjcwOS0yYTUwLTQwMTAtYTcxOS1kNWY0Yzg0YTcyNzkiPgogIAkJCQk8aW1nIHdpZHRoPSIyMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTZmZWIwZmYtNmNiNC00MDZmLTk3OTctMjQ2ZGNiZDdhZTAxI2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJWZXJjZWwiPgogIAkJCTwvcGljdHVyZT4KICAJIAk8L2E+CiAgICAgIDxwaWN0dXJlPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgiPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MxNjBjM2U3LTIyZjgtNDUyMy05ZTI1LTBkZjE4MDJmZDZmZSI+CiAgICAgICAgPGltZyBoZWlnaHQ9IjgwIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkxpbmUiPgogICAgICA8L3BpY3R1cmU+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9taXN0cmFsYWkvY2xpZW50LXB5dGhvbiIgdGFyZ2V0PSJfYmxhbmsiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMmY3ZDQ2NmMtODY0ZS00YTQyLWFhN2UtZTljMjUxZGVjMjExIj4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMjliZDI2MTEtOTJmNC00NGZlLTkxZDUtNzhlNjc4MWNhNmMyIj4KICAJCQkJPGltZyB3aWR0aD0iMjAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzJmN2Q0NjZjLTg2NGUtNGE0Mi1hYTdlLWU5YzI1MWRlYzIxMSNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iTWlzdHJhbCI+CiAgCQkJPC9waWN0dXJlPgogIAkJPC9hPgogICAgICA8cGljdHVyZT4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4Ij4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMTYwYzNlNy0yMmY4LTQ1MjMtOWUyNS0wZGYxODAyZmQ2ZmUiPgogICAgICAgIDxpbWcgaGVpZ2h0PSI4MCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJMaW5lIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2xlcmsvY2xlcmstc2RrLXB5dGhvbiIgdGFyZ2V0PSJfYmxhbmsiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYjAzNTFjYWYtYmM5YS00ZjI1LThlYWMtNGU4ZjhiZjBlMDc4Ij4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMmIwNjMxYmYtZjJkMC00MzZiLWIwMDgtZmNhYmJiMTM0ZDUwIj4KICAJCQkJPGltZyB3aWR0aD0iMjAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2IwMzUxY2FmLWJjOWEtNGYyNS04ZWFjLTRlOGY4YmYwZTA3OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iQ2xlcmsiPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iODAiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iTGluZSFbZmlyZXdvcmtzLWdpdF0oaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzI2ZTgwYzg3LWM1M2MtNDUzMS1hNjA3LWNjNzg2NDZiZmRkNykKIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSIiIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2ViNDMyN2JjLTkxZmMtNDE5NS1iNjhmLTM5OTcxMmQ0YTI0ZCI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2FiYjRjNzcwLWFiOTItNDU5NS04MWIwLWE0NzM2ZmIxNGI3MiI+CiAgCQkJCTxpbWcgd2lkdGg9IjIwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9lYjQzMjdiYy05MWZjLTQxOTUtYjY4Zi0zOTk3MTJkNGEyNGQjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkZpcmV3b3JrcyI+CiAgCQkJPC9waWN0dXJlPgogIAkJPC9hPgogIAk8L3A+CiAgICA8YSBocmVmPSJodHRwczovL3NwZWFrZWFzeS5jb20vY3VzdG9tZXJzIj48cD4KICAgICAgRnVsbCBzaG93Y2FzZSDihpIKICAgIDwvcD48L2E+CiAgPC9oND4KPC9kaXY+CgojIyBHZW5lcmF0ZSBTREtzCgo8cD5Vc2UgU3BlYWtlYXN5IHRvIGdlbmVyYXRlIGlkaW9tYXRpYywgdHlwZS1zYWZlIFNES3MgeW91ciB1c2VycyB3aWxsIGxvdmUuPC9wPgo8YSBocmVmPSJodHRwczovL2FwcC5zcGVha2Vhc3kuY29tLyI+PGltZyBzcmM9Imh0dHBzOi8vY3VzdG9tLWljb24tYmFkZ2VzLmRlbW9sYWIuY29tL2JhZGdlLy1TdGFydCUyMEdlbmVyYXRpbmclMjAtMjEyMDE1P3N0eWxlPWZvci10aGUtYmFkZ2UmbG9nb0NvbG9yPUZCRTMzMSZsb2dvPXNwZWFrZWFzeSZsYWJlbENvbG9yPTU0NTQ1NCIgLz48L2E+Cgo8ZGl2IGFsaWduPSJsZWZ0Ij4KICA8aDE+CiAgCTxwPgogIAkJPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3BlYWtlYXN5LmNvbS9kb2NzL3Nkay1kZXNpZ24vdHlwZXNjcmlwdC9tZXRob2RvbG9neS10cyIgdGFyZ2V0PSJfYmxhbmsiIG1hcmdpbi1yaWdodD0iMjBweCI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy82YzM2YmNlMy0zNGNmLTRiNjgtYjZlOS1iZDE1MjJkZmM4YmYiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy82YzM2YmNlMy0zNGNmLTRiNjgtYjZlOS1iZDE1MjJkZmM4YmYiPgogIAkJCQk8aW1nIHdpZHRoPSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvNmMzNmJjZTMtMzRjZi00YjY4LWI2ZTktYmQxNTIyZGZjOGJmI2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJTY2FsYXIgQVBJIFJlZmVyZW5jZSI+CiAgCQkJPC9waWN0dXJlPgogIAkgCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iODAiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iU2NhbGFyIEFQSSBSZWZlcmVuY2UiPgogICAgICA8L3BpY3R1cmU+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vZG9jcy9zZGstZGVzaWduL3B5dGhvbi9tZXRob2RvbG9neS1weXRob24iIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzM0YTU3YzViLWU4MWQtNDIzOC1hMWE0LTJmMTI4OTYzMDU5OSI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzM0YTU3YzViLWU4MWQtNDIzOC1hMWE0LTJmMTI4OTYzMDU5OSI+CiAgCQkJCTxpbWcgd2lkdGg9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8zNGE1N2M1Yi1lODFkLTQyMzgtYTFhNC0yZjEyODk2MzA1OTkjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IlB5dGhvbiI+CiAgCQkJPC9waWN0dXJlPgogIAkJPC9hPgogICAgICA8cGljdHVyZT4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4Ij4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMTYwYzNlNy0yMmY4LTQ1MjMtOWUyNS0wZGYxODAyZmQ2ZmUiPgogICAgICAgIDxpbWcgaGVpZ2h0PSI4MCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJTY2FsYXIgQVBJIFJlZmVyZW5jZSI+CiAgICAgIDwvcGljdHVyZT4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3BlYWtlYXN5LmNvbS9kb2NzL3Nkay1kZXNpZ24vZ29sYW5nL21ldGhvZG9sb2d5LWdvIiB0YXJnZXQ9Il9ibGFuayI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy83YmU5Mzc5ZS1kM2FlLTQ0ZjctYWZkMC1hOWZlZTUyNmQ0MDIiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy83YmU5Mzc5ZS1kM2FlLTQ0ZjctYWZkMC1hOWZlZTUyNmQ0MDIiPgogIAkJCQk8aW1nIHdpZHRoPSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvN2JlOTM3OWUtZDNhZS00NGY3LWFmZDAtYTlmZWU1MjZkNDAyI2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJHb2xhbmciPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iODAiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iU2NhbGFyIEFQSSBSZWZlcmVuY2UiPgogICAgICA8L3BpY3R1cmU+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vZG9jcy9jcmVhdGUtdGVycmFmb3JtIiB0YXJnZXQ9Il9ibGFuayI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy83ODk5Y2JkNS0xM2MwLTQ0NWUtYjRjYS00MjlmZDIyNTk0NzciPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy83ODk5Y2JkNS0xM2MwLTQ0NWUtYjRjYS00MjlmZDIyNTk0NzciPgogIAkJCQk8aW1nIHdpZHRoPSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvNzg5OWNiZDUtMTNjMC00NDVlLWI0Y2EtNDI5ZmQyMjU5NDc3I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJUZXJyYWZvcm0iPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAJPC9wPgogICAgPHA+CiAgCQk8YSBocmVmPSJodHRwczovL3d3dy5zcGVha2Vhc3kuY29tL2RvY3Mvc2RrLWRlc2lnbi9qYXZhL21ldGhvZG9sb2d5LWphdmEiIHRhcmdldD0iX2JsYW5rIiBtYXJnaW4tcmlnaHQ9IjIwcHgiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvOWNjNWE4ZDgtY2UxNi00ODdkLTkwMzMtZGI0YjM2NDMyM2NiIj4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvOWNjNWE4ZDgtY2UxNi00ODdkLTkwMzMtZGI0YjM2NDMyM2NiIj4KICAJCQkJPGltZyB3aWR0aD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzljYzVhOGQ4LWNlMTYtNDg3ZC05MDMzLWRiNGIzNjQzMjNjYiNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iSmF2YSI+CiAgCQkJPC9waWN0dXJlPgogIAkgCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iTGluZSI+CiAgICAgIDwvcGljdHVyZT4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3BlYWtlYXN5LmNvbS9kb2NzL3Nkay1kZXNpZ24vY3NoYXJwL21ldGhvZG9sb2d5LWNzaGFycCIgdGFyZ2V0PSJfYmxhbmsiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMWY1YzRhOWMtZjg0MS00YzU2LThkM2MtYmNiNDNhYzRlZWY3Ij4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMWY1YzRhOWMtZjg0MS00YzU2LThkM2MtYmNiNDNhYzRlZWY3Ij4KICAJCQkJPGltZyB3aWR0aD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzFmNWM0YTljLWY4NDEtNGM1Ni04ZDNjLWJjYjQzYWM0ZWVmNyNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iQ3NoYXJwIj4KICAJCQk8L3BpY3R1cmU+CiAgCQk8L2E+CiAgICAgIDxwaWN0dXJlPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgiPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MxNjBjM2U3LTIyZjgtNDUyMy05ZTI1LTBkZjE4MDJmZDZmZSI+CiAgICAgICAgPGltZyBoZWlnaHQ9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkxpbmUiPgogICAgICA8L3BpY3R1cmU+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vZG9jcy9zZGstZGVzaWduL3BocC9tZXRob2RvbG9neS1waHAiIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzE1ZjZhNmM3LWViNzEtNDY2Yy1iYmFhLWQ3YTk3NGEyNWI1YyI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzE1ZjZhNmM3LWViNzEtNDY2Yy1iYmFhLWQ3YTk3NGEyNWI1YyI+CiAgCQkJCTxpbWcgd2lkdGg9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8xNWY2YTZjNy1lYjcxLTQ2NmMtYmJhYS1kN2E5NzRhMjViNWMjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IlBIUCI+CiAgCQkJPC9waWN0dXJlPgogIAkJPC9hPgogICAgICA8cGljdHVyZT4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4Ij4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMTYwYzNlNy0yMmY4LTQ1MjMtOWUyNS0wZGYxODAyZmQ2ZmUiPgogICAgICAgIDxpbWcgaGVpZ2h0PSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJMaW5lIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5zcGVha2Vhc3kuY29tL2RvY3Mvc2RrLWRlc2lnbi9ydWJ5L21ldGhvZG9sb2d5LXJ1YnkiIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MwMWY0ZDIxLWMwNWEtNGQ3Ny1hNjVhLWM3ZjRlNzJiMTk5MyI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MwMWY0ZDIxLWMwNWEtNGQ3Ny1hNjVhLWM3ZjRlNzJiMTk5MyI+CiAgCQkJCTxpbWcgd2lkdGg9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMDFmNGQyMS1jMDVhLTRkNzctYTY1YS1jN2Y0ZTcyYjE5OTMjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IlJ1YnkiPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAJPC9wPgogIDwvaDE+CjwvZGl2PgoKIyMgQ0xJIGluc3RhbGxhdGlvbgoKIyMjIEhvbWVicmV3IChtYWNPUyBhbmQgTGludXgpCgpgYGBiYXNoCmJyZXcgaW5zdGFsbCBzcGVha2Vhc3ktYXBpL2hvbWVicmV3LXRhcC9zcGVha2Vhc3kKYGBgCgojIyMgU2NyaXB0IChtYWNPUyBhbmQgTGludXgpCgpgYGBiYXNoCmN1cmwgLWZzU0wgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3NwZWFrZWFzeS1hcGkvc3BlYWtlYXN5L21haW4vaW5zdGFsbC5zaCB8IHNoCmBgYAoKIyMjIENob2NvbGF0ZXkgKFdpbmRvd3MpCgpgYGBjbWQKY2hvY28gaW5zdGFsbCBzcGVha2Vhc3kKYGBgCgojIyMgTWFudWFsIGluc3RhbGxhdGlvbgoKRG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlIGZvciB5b3VyIHBsYXRmb3JtIGZyb20gdGhlIFtyZWxlYXNlcyBwYWdlXShodHRwczovL2dpdGh1Yi5jb20vc3BlYWtlYXN5LWFwaS9zcGVha2Vhc3kvcmVsZWFzZXMpLCBleHRyYWN0LCBhbmQgYWRkIHRoZSBiaW5hcnkgdG8geW91ciBwYXRoLgoKIyMjIEtlZXBpbmcgdXAgdG8gZGF0ZQoKVGhlIENMSSB3aWxsIHdhcm4geW91IGlmIHlvdSdyZSBydW5uaW5nIGFuIG91dGRhdGVkIHZlcnNpb24uIFRvIHVwZGF0ZSB0aGUgQ0xJIHJ1bjoKCmBgYGJhc2gKc3BlYWtlYXN5IHVwZGF0ZQpgYGAKCiMjIENvbW1vbiBDTEkgY29tbWFuZHMKCnwgIENvbW1hbmQgICAgfCAgICBEZXNjcmlwdGlvbiAgIHwKfDotLS0tLS0tLS0tLS18Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAp8IGBhdXRoYCAgICAgIHwgTG9nIGluICYgb3V0IG9mIHlvdXIgb3JnYW5pemF0aW9uJ3Mgd29ya3NwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBxdWlja3N0YXJ0YHwgQ3JlYXRlIGFuIGlkaW9tYXRpYyBjbGllbnQgU0RLIG9yIHRhcmdldCwgc3VjaCBhcyBhIFRlcnJhZm9ybSBQcm92aWRlciwgZnJvbSB5b3VyIEFQSSBzcGVjcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgYHJ1bmAgICAgICAgfCBSZWdlbmVyYXRlIGV4aXN0aW5nIFNESy90YXJnZXQgZnJvbSB5b3VyIEFQSSBzcGVjcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBgbGludGAgICAgICB8IFZhbGlkYXRlIHRoZSBjb3JyZWN0bmVzcyBvZiB5b3VyIEFQSSBzcGVjcy4gYHNwZWFrZWFzeSBydW5gIGFsc28gaW5jbHVkZXMgYSB2YWxpZGF0aW9uIHN0ZXAgYmVmb3JlIGdlbmVyYXRpb24uIHwKfCBgc3VnZ2VzdGAgICB8IFVzZSBhbiBMTE0gdG8gYXV0b2NvcnJlY3QgeW91ciBzcGVjIHZhbGlkYXRpb24gZmFpbHVyZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBtZXJnZWAgICAgIHwgV29yayB3aXRoIHlvdXIgZXhpc3RpbmcgZG9jdW1lbnRhdGlvbiB3b3JrZmxvd3MgYnkgbWVyZ2luZyB5b3VyIEFQSSBzcGVjcyBpbnRvIGEgc2luZ2xlIHNwZWMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgYHN0YXR1c2AgICAgfCBSZXZpZXcgYWxsIFNESy90YXJnZXRzIGluIGN1cnJlbnQgd29ya3NwYWNlLiB8Cg== - readmeEtag: '"920f36ec80d85a5e87b0c42f0200f1f6acfe5e8f"' - readmeLastModified: Mon, 04 Nov 2024 23:55:20 GMT + PGRpdiBhbGlnbj0ibGVmdCI+CiAgPGgxPlNwZWFrZWFzeTwvaDE+CiAgPHA+VGhlIHBsYXRmb3JtIHRvIGJ1aWxkLCB0ZXN0LCBhbmQgZGlzdHJpYnV0ZSBBUElzIHRvIHlvdXIgdXNlcnMg4p2k77iPLiBCdWlsZGluZyByZWFsbHkgaGlnaCBxdWFsaXR5IEFQSXMgaXMgaGFyZC4gU3BlYWtlYXN5IGlzIGEgc2V0IG9mIE9wZW5BUEkgdG9vbHMgdG8gbWFrZSBpdCBlYXNpZXIuIDwvcD4KICAgPGEgaHJlZj0iaHR0cHM6Ly9zcGVha2Vhc3kuY29tL2RvY3MvY3JlYXRlLWNsaWVudC1zZGtzLyI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vc3RhdGljL3YxP2xhYmVsPURvY3MmbWVzc2FnZT1RdWlja3N0YXJ0JmNvbG9yPTAwMCZzdHlsZT1mb3ItdGhlLWJhZGdlIiAvPjwvYT4KICAgPGEgaHJlZj0iaHR0cHM6Ly9qb2luLnNsYWNrLmNvbS90L3NwZWFrZWFzeS1kZXYvc2hhcmVkX2ludml0ZS96dC0xY3diM2ZseHotbFM1U3laeEFzRl8zTk9xNXhjOENqdyI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vc3RhdGljL3YxP2xhYmVsPVNsYWNrJm1lc3NhZ2U9Sm9pbiZjb2xvcj03Mjg5ZGEmc3R5bGU9Zm9yLXRoZS1iYWRnZSIgLz48L2E+CiAgPGg0PjxiPlRydXN0ZWQgQnk6PC9iPjwvaDQ+CiAgPGg0PgogIAk8cD4KICAJCTxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvdmVyY2VsL3RyZWUvbWFpbi9wYWNrYWdlcy9zZGsiIHRhcmdldD0iX2JsYW5rIiBtYXJnaW4tcmlnaHQ9IjIwcHgiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTZmZWIwZmYtNmNiNC00MDZmLTk3OTctMjQ2ZGNiZDdhZTAxIj4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvZTUwOTY3MDktMmE1MC00MDEwLWE3MTktZDVmNGM4NGE3Mjc5Ij4KICAJCQkJPGltZyB3aWR0aD0iMjAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E2ZmViMGZmLTZjYjQtNDA2Zi05Nzk3LTI0NmRjYmQ3YWUwMSNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iVmVyY2VsIj4KICAJCQk8L3BpY3R1cmU+CiAgCSAJPC9hPgogICAgICA8cGljdHVyZT4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4Ij4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMTYwYzNlNy0yMmY4LTQ1MjMtOWUyNS0wZGYxODAyZmQ2ZmUiPgogICAgICAgIDxpbWcgaGVpZ2h0PSI4MCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJMaW5lIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWlzdHJhbGFpL2NsaWVudC1weXRob24iIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzJmN2Q0NjZjLTg2NGUtNGE0Mi1hYTdlLWU5YzI1MWRlYzIxMSI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzI5YmQyNjExLTkyZjQtNDRmZS05MWQ1LTc4ZTY3ODFjYTZjMiI+CiAgCQkJCTxpbWcgd2lkdGg9IjIwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8yZjdkNDY2Yy04NjRlLTRhNDItYWE3ZS1lOWMyNTFkZWMyMTEjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9Ik1pc3RyYWwiPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iODAiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iTGluZSI+CiAgICAgIDwvcGljdHVyZT4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NsZXJrL2NsZXJrLXNkay1weXRob24iIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2IwMzUxY2FmLWJjOWEtNGYyNS04ZWFjLTRlOGY4YmYwZTA3OCI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzJiMDYzMWJmLWYyZDAtNDM2Yi1iMDA4LWZjYWJiYjEzNGQ1MCI+CiAgCQkJCTxpbWcgd2lkdGg9IjIwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9iMDM1MWNhZi1iYzlhLTRmMjUtOGVhYy00ZThmOGJmMGUwNzgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkNsZXJrIj4KICAJCQk8L3BpY3R1cmU+CiAgCQk8L2E+CiAgICAgIDxwaWN0dXJlPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgiPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MxNjBjM2U3LTIyZjgtNDUyMy05ZTI1LTBkZjE4MDJmZDZmZSI+CiAgICAgICAgPGltZyBoZWlnaHQ9IjgwIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkxpbmUhW2ZpcmV3b3Jrcy1naXRdKGh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8yNmU4MGM4Ny1jNTNjLTQ1MzEtYTYwNy1jYzc4NjQ2YmZkZDcpCiI+CiAgICAgIDwvcGljdHVyZT4KICAgICAgPGEgaHJlZj0iIiB0YXJnZXQ9Il9ibGFuayI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9lYjQzMjdiYy05MWZjLTQxOTUtYjY4Zi0zOTk3MTJkNGEyNGQiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hYmI0Yzc3MC1hYjkyLTQ1OTUtODFiMC1hNDczNmZiMTRiNzIiPgogIAkJCQk8aW1nIHdpZHRoPSIyMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvZWI0MzI3YmMtOTFmYy00MTk1LWI2OGYtMzk5NzEyZDRhMjRkI2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJGaXJld29ya3MiPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAJPC9wPgogICAgPGEgaHJlZj0iaHR0cHM6Ly9zcGVha2Vhc3kuY29tL2N1c3RvbWVycyI+PHA+CiAgICAgIEZ1bGwgc2hvd2Nhc2Ug4oaSCiAgICA8L3A+PC9hPgogIDwvaDQ+CjwvZGl2PgoKIyMgR2VuZXJhdGUgUG9saXNoZWQgYW5kIFR5cGUtU2FmZSBDbGllbnQgTGlicmFyaWVzCgo8cD5Vc2UgU3BlYWtlYXN5IHRvIGdlbmVyYXRlIGlkaW9tYXRpYywgdHlwZS1zYWZlIFNES3MgeW91ciB1c2VycyB3aWxsIGxvdmUuIDkgTGFuZ3VhZ2VzIGFuZCBjb3VudGluZy48L3A+CjxhIGhyZWY9Imh0dHBzOi8vYXBwLnNwZWFrZWFzeS5jb20vIj48aW1nIHNyYz0iaHR0cHM6Ly9jdXN0b20taWNvbi1iYWRnZXMuZGVtb2xhYi5jb20vYmFkZ2UvLVN0YXJ0JTIwR2VuZXJhdGluZyUyMC0yMTIwMTU/c3R5bGU9Zm9yLXRoZS1iYWRnZSZsb2dvQ29sb3I9RkJFMzMxJmxvZ289c3BlYWtlYXN5JmxhYmVsQ29sb3I9NTQ1NDU0IiAvPjwvYT4KPGEgaHJlZj0iaHR0cHM6Ly95b3V0dS5iZS8tY1NaR1V2VDUtOD9zaT1Wd0pCUGNPR3EwZzJSNGNJIj48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9zdGF0aWMvdjE/bGFiZWw9RG9jcyZtZXNzYWdlPVdhdGNoIERlbW8mY29sb3I9MDAwJnN0eWxlPWZvci10aGUtYmFkZ2UiIC8+PC9hPgoKPGRpdiBhbGlnbj0ibGVmdCI+CiAgPGgxPgogIAk8cD4KICAJCTxhIGhyZWY9Imh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vZG9jcy9zZGstZGVzaWduL3R5cGVzY3JpcHQvbWV0aG9kb2xvZ3ktdHMiIHRhcmdldD0iX2JsYW5rIiBtYXJnaW4tcmlnaHQ9IjIwcHgiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvNmMzNmJjZTMtMzRjZi00YjY4LWI2ZTktYmQxNTIyZGZjOGJmIj4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvNmMzNmJjZTMtMzRjZi00YjY4LWI2ZTktYmQxNTIyZGZjOGJmIj4KICAJCQkJPGltZyB3aWR0aD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzZjMzZiY2UzLTM0Y2YtNGI2OC1iNmU5LWJkMTUyMmRmYzhiZiNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iU2NhbGFyIEFQSSBSZWZlcmVuY2UiPgogIAkJCTwvcGljdHVyZT4KICAJIAk8L2E+CiAgICAgIDxwaWN0dXJlPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgiPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MxNjBjM2U3LTIyZjgtNDUyMy05ZTI1LTBkZjE4MDJmZDZmZSI+CiAgICAgICAgPGltZyBoZWlnaHQ9IjgwIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IlNjYWxhciBBUEkgUmVmZXJlbmNlIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5zcGVha2Vhc3kuY29tL2RvY3Mvc2RrLWRlc2lnbi9weXRob24vbWV0aG9kb2xvZ3ktcHl0aG9uIiB0YXJnZXQ9Il9ibGFuayI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8zNGE1N2M1Yi1lODFkLTQyMzgtYTFhNC0yZjEyODk2MzA1OTkiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8zNGE1N2M1Yi1lODFkLTQyMzgtYTFhNC0yZjEyODk2MzA1OTkiPgogIAkJCQk8aW1nIHdpZHRoPSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMzRhNTdjNWItZTgxZC00MjM4LWExYTQtMmYxMjg5NjMwNTk5I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJQeXRob24iPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iODAiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iU2NhbGFyIEFQSSBSZWZlcmVuY2UiPgogICAgICA8L3BpY3R1cmU+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vZG9jcy9zZGstZGVzaWduL2dvbGFuZy9tZXRob2RvbG9neS1nbyIgdGFyZ2V0PSJfYmxhbmsiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvN2JlOTM3OWUtZDNhZS00NGY3LWFmZDAtYTlmZWU1MjZkNDAyIj4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvN2JlOTM3OWUtZDNhZS00NGY3LWFmZDAtYTlmZWU1MjZkNDAyIj4KICAJCQkJPGltZyB3aWR0aD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzdiZTkzNzllLWQzYWUtNDRmNy1hZmQwLWE5ZmVlNTI2ZDQwMiNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iR29sYW5nIj4KICAJCQk8L3BpY3R1cmU+CiAgCQk8L2E+CiAgICAgIDxwaWN0dXJlPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgiPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MxNjBjM2U3LTIyZjgtNDUyMy05ZTI1LTBkZjE4MDJmZDZmZSI+CiAgICAgICAgPGltZyBoZWlnaHQ9IjgwIiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IlNjYWxhciBBUEkgUmVmZXJlbmNlIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5zcGVha2Vhc3kuY29tL2RvY3MvY3JlYXRlLXRlcnJhZm9ybSIgdGFyZ2V0PSJfYmxhbmsiPgogIAkJCTxwaWN0dXJlPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvNzg5OWNiZDUtMTNjMC00NDVlLWI0Y2EtNDI5ZmQyMjU5NDc3Ij4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvNzg5OWNiZDUtMTNjMC00NDVlLWI0Y2EtNDI5ZmQyMjU5NDc3Ij4KICAJCQkJPGltZyB3aWR0aD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzc4OTljYmQ1LTEzYzAtNDQ1ZS1iNGNhLTQyOWZkMjI1OTQ3NyNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iVGVycmFmb3JtIj4KICAJCQk8L3BpY3R1cmU+CiAgCQk8L2E+CiAgCTwvcD4KICAgIDxwPgogIAkJPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3BlYWtlYXN5LmNvbS9kb2NzL3Nkay1kZXNpZ24vamF2YS9tZXRob2RvbG9neS1qYXZhIiB0YXJnZXQ9Il9ibGFuayIgbWFyZ2luLXJpZ2h0PSIyMHB4Ij4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzljYzVhOGQ4LWNlMTYtNDg3ZC05MDMzLWRiNGIzNjQzMjNjYiI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzljYzVhOGQ4LWNlMTYtNDg3ZC05MDMzLWRiNGIzNjQzMjNjYiI+CiAgCQkJCTxpbWcgd2lkdGg9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy85Y2M1YThkOC1jZTE2LTQ4N2QtOTAzMy1kYjRiMzY0MzIzY2IjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkphdmEiPgogIAkJCTwvcGljdHVyZT4KICAJIAk8L2E+CiAgICAgIDxwaWN0dXJlPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgiPgogICAgICAgIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2MxNjBjM2U3LTIyZjgtNDUyMy05ZTI1LTBkZjE4MDJmZDZmZSI+CiAgICAgICAgPGltZyBoZWlnaHQ9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9hN2UzMjA0NS1hNTNhLTQzM2EtOTA4Zi0xZjUzMzhiMTc3NTgjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkxpbmUiPgogICAgICA8L3BpY3R1cmU+CiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vZG9jcy9zZGstZGVzaWduL2NzaGFycC9tZXRob2RvbG9neS1jc2hhcnAiIHRhcmdldD0iX2JsYW5rIj4KICAJCQk8cGljdHVyZT4KICAJCQkJPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzFmNWM0YTljLWY4NDEtNGM1Ni04ZDNjLWJjYjQzYWM0ZWVmNyI+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzFmNWM0YTljLWY4NDEtNGM1Ni04ZDNjLWJjYjQzYWM0ZWVmNyI+CiAgCQkJCTxpbWcgd2lkdGg9IjEwMHB4IiBzcmM9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8xZjVjNGE5Yy1mODQxLTRjNTYtOGQzYy1iY2I0M2FjNGVlZjcjZ2gtbGlnaHQtbW9kZS1vbmx5IiBhbHQ9IkNzaGFycCI+CiAgCQkJPC9waWN0dXJlPgogIAkJPC9hPgogICAgICA8cGljdHVyZT4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4Ij4KICAgICAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMTYwYzNlNy0yMmY4LTQ1MjMtOWUyNS0wZGYxODAyZmQ2ZmUiPgogICAgICAgIDxpbWcgaGVpZ2h0PSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYTdlMzIwNDUtYTUzYS00MzNhLTkwOGYtMWY1MzM4YjE3NzU4I2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJMaW5lIj4KICAgICAgPC9waWN0dXJlPgogICAgICA8YSBocmVmPSJodHRwczovL3d3dy5zcGVha2Vhc3kuY29tL2RvY3Mvc2RrLWRlc2lnbi9waHAvbWV0aG9kb2xvZ3ktcGhwIiB0YXJnZXQ9Il9ibGFuayI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8xNWY2YTZjNy1lYjcxLTQ2NmMtYmJhYS1kN2E5NzRhMjViNWMiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy8xNWY2YTZjNy1lYjcxLTQ2NmMtYmJhYS1kN2E5NzRhMjViNWMiPgogIAkJCQk8aW1nIHdpZHRoPSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvMTVmNmE2YzctZWI3MS00NjZjLWJiYWEtZDdhOTc0YTI1YjVjI2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJQSFAiPgogIAkJCTwvcGljdHVyZT4KICAJCTwvYT4KICAgICAgPHBpY3R1cmU+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCI+CiAgICAgICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzE2MGMzZTctMjJmOC00NTIzLTllMjUtMGRmMTgwMmZkNmZlIj4KICAgICAgICA8aW1nIGhlaWdodD0iMTAwcHgiIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzL2E3ZTMyMDQ1LWE1M2EtNDMzYS05MDhmLTFmNTMzOGIxNzc1OCNnaC1saWdodC1tb2RlLW9ubHkiIGFsdD0iTGluZSI+CiAgICAgIDwvcGljdHVyZT4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cuc3BlYWtlYXN5LmNvbS9kb2NzL3Nkay1kZXNpZ24vcnVieS9tZXRob2RvbG9neS1ydWJ5IiB0YXJnZXQ9Il9ibGFuayI+CiAgCQkJPHBpY3R1cmU+CiAgCQkJCTxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogbGlnaHQpIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMDFmNGQyMS1jMDVhLTRkNzctYTY1YS1jN2Y0ZTcyYjE5OTMiPgogIAkJCQk8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vZ2l0aHViLmNvbS91c2VyLWF0dGFjaG1lbnRzL2Fzc2V0cy9jMDFmNGQyMS1jMDVhLTRkNzctYTY1YS1jN2Y0ZTcyYjE5OTMiPgogIAkJCQk8aW1nIHdpZHRoPSIxMDBweCIgc3JjPSJodHRwczovL2dpdGh1Yi5jb20vdXNlci1hdHRhY2htZW50cy9hc3NldHMvYzAxZjRkMjEtYzA1YS00ZDc3LWE2NWEtYzdmNGU3MmIxOTkzI2doLWxpZ2h0LW1vZGUtb25seSIgYWx0PSJSdWJ5Ij4KICAJCQk8L3BpY3R1cmU+CiAgCQk8L2E+CiAgCTwvcD4KICA8L2gxPgo8L2Rpdj4KCjxoMj4KCTxwPkhvdyBpdCB3b3JrczwvcD4KCQkJPHBpY3R1cmU+CgkJCQk8aW1nIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL3VzZXItYXR0YWNobWVudHMvYXNzZXRzLzUwYTg3YmRjLTUxMDktNDZhOS1hMWI1LTA4MmEyYjI2NDM1ZSIgYWx0PSJTcGVha2Vhc3kgV29ya2Zsb3ciPgoJCQk8L3BpY3R1cmU+CgkJPC9hPgo8L2gyPgoKIyMjIEZlYXR1cmVzCgoqIFNESyBjb2RlIHRoYXQgbG9va3MgeW91IHdyb3RlIGl0LiBPcHRpbWlzZWQgZm9yIHBlcmZvcm1hbmNlLCBkZWJ1Z2dhYmlsaXR5IGFuZCBtb2Rlcm4gaWRpb21hdGljcy4KKiBDb21wbGV0ZSBUZXJyYWZvcm0gUHJvdmlkZXJzIGJ1aWx0IG9uIGEgVHlwZS1zYWZlIEdvIFNESy4gCiogQ29udHJhY3QgVGVzdCBnZW5lcmF0aW9uIHdpdGggYSBwcmUgYnVpbHQgbW9jay1zZXJ2ZXIgKFtQb3dlcmVkIGJ5IEFyYXp6b10oaHR0cHM6Ly93d3cuc3BlYWtlYXN5LmNvbS9vcGVuYXBpL2FyYXp6bykpCiogR2VuZXJhdGUgY2xlYW4gY29kZS1zYW1wbGVzIGZvciBzeW5jaW5nIHdpdGggQVBJIGRvY3MuCiogTWFrZSBgbnBtIGluc3RhbGwgeW91ci1hcGlgLiBNYW5hZ2UgdmVyc2lvbmluZyBhbmQgcHVibGlzaGluZyB0byBwYWNrYWdlIG1hbmFnZXJzCiogTW9kZXJuIE9wZW5BUEkgMy5YIHRvb2xjaGFpbiBmb3IgbGludGluZywgY2xlYW5pbmcsIGRpZmYtaW5nIGFuZCBlZGl0aW5nIHNwZWNzLiAoW1Bvd2VyZWQgYnkgT3ZlcmxheXNdKGh0dHBzOi8vd3d3LnNwZWFrZWFzeS5jb20vb3BlbmFwaS9vdmVybGF5cykpCgpDaGVjayBvdXQgdGhlIFtyb2FkbWFwXShodHRwczovL3d3dy5zcGVha2Vhc3lhcGkuZGV2L3JvYWRtYXApIGZvciB3aGF0cyBjb21pbmcgdXAgc29vbiEKCiMjIENMSSBpbnN0YWxsYXRpb24KCiMjIyBIb21lYnJldyAobWFjT1MgYW5kIExpbnV4KQoKYGBgYmFzaApicmV3IGluc3RhbGwgc3BlYWtlYXN5LWFwaS9ob21lYnJldy10YXAvc3BlYWtlYXN5CmBgYAoKIyMjIFNjcmlwdCAobWFjT1MgYW5kIExpbnV4KQoKYGBgYmFzaApjdXJsIC1mc1NMIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zcGVha2Vhc3ktYXBpL3NwZWFrZWFzeS9tYWluL2luc3RhbGwuc2ggfCBzaApgYGAKCiMjIyBDaG9jb2xhdGV5IChXaW5kb3dzKQoKYGBgY21kCmNob2NvIGluc3RhbGwgc3BlYWtlYXN5CmBgYAoKIyMjIE1hbnVhbCBpbnN0YWxsYXRpb24KCkRvd25sb2FkIHRoZSBsYXRlc3QgcmVsZWFzZSBmb3IgeW91ciBwbGF0Zm9ybSBmcm9tIHRoZSBbcmVsZWFzZXMgcGFnZV0oaHR0cHM6Ly9naXRodWIuY29tL3NwZWFrZWFzeS1hcGkvc3BlYWtlYXN5L3JlbGVhc2VzKSwgZXh0cmFjdCwgYW5kIGFkZCB0aGUgYmluYXJ5IHRvIHlvdXIgcGF0aC4KCiMjIyBLZWVwaW5nIHVwIHRvIGRhdGUKClRoZSBDTEkgd2lsbCB3YXJuIHlvdSBpZiB5b3UncmUgcnVubmluZyBhbiBvdXRkYXRlZCB2ZXJzaW9uLiBUbyB1cGRhdGUgdGhlIENMSSBydW46CgpgYGBiYXNoCnNwZWFrZWFzeSB1cGRhdGUKYGBgCgojIyBDb21tb24gQ0xJIGNvbW1hbmRzCgp8ICBDb21tYW5kICAgIHwgICAgRGVzY3JpcHRpb24gICB8Cnw6LS0tLS0tLS0tLS0tfDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKfCBgYXV0aGAgICAgICB8IExvZyBpbiAmIG91dCBvZiB5b3VyIG9yZ2FuaXphdGlvbidzIHdvcmtzcGFjZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBgcXVpY2tzdGFydGB8IENyZWF0ZSBhbiBpZGlvbWF0aWMgY2xpZW50IFNESyBvciB0YXJnZXQsIHN1Y2ggYXMgYSBUZXJyYWZvcm0gUHJvdmlkZXIsIGZyb20geW91ciBBUEkgc3BlY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBydW5gICAgICAgIHwgUmVnZW5lcmF0ZSBleGlzdGluZyBTREsvdGFyZ2V0IGZyb20geW91ciBBUEkgc3BlY3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgYGxpbnRgICAgICAgfCBWYWxpZGF0ZSB0aGUgY29ycmVjdG5lc3Mgb2YgeW91ciBBUEkgc3BlY3MuIGBzcGVha2Vhc3kgcnVuYCBhbHNvIGluY2x1ZGVzIGEgdmFsaWRhdGlvbiBzdGVwIGJlZm9yZSBnZW5lcmF0aW9uLiB8CnwgYHN1Z2dlc3RgICAgfCBVc2UgYW4gTExNIHRvIGF1dG9jb3JyZWN0IHlvdXIgc3BlYyB2YWxpZGF0aW9uIGZhaWx1cmVzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBgbWVyZ2VgICAgICB8IFdvcmsgd2l0aCB5b3VyIGV4aXN0aW5nIGRvY3VtZW50YXRpb24gd29ya2Zsb3dzIGJ5IG1lcmdpbmcgeW91ciBBUEkgc3BlY3MgaW50byBhIHNpbmdsZSBzcGVjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IGBzdGF0dXNgICAgIHwgUmV2aWV3IGFsbCBTREsvdGFyZ2V0cyBpbiBjdXJyZW50IHdvcmtzcGFjZS4gfAoKIyMgQ29tbXVuaXR5CgpXZSBsb3ZlIGNoYXR0aW5nIGFib3V0IE9wZW5BUEkgYW5kIEFQSSBEZXNpZ24uIENvbWUgY2hhdCB3aXRoIHVzIG9uIFtzbGFja10oaHR0cHM6Ly9qb2luLnNsYWNrLmNvbS90L3NwZWFrZWFzeS1kZXYvc2hhcmVkX2ludml0ZS96dC0xY3diM2ZseHotbFM1U3laeEFzRl8zTk9xNXhjOENqdykuCg== + readmeEtag: '"67625322a5142829a7948fafda6cd0bbd6b15131"' + readmeLastModified: Tue, 05 Nov 2024 23:40:40 GMT repositoryId: 543052826 description: >- - Build APIs your users love ❤️ with Speakeasy. Best in class, robust SDKs, - terraform providers and contract tests for your API. OpenAPI first and - native. + Build APIs your users love ❤️ with Speakeasy. Polished and type-safe SDKs, + terraform providers and contract tests for your API. OpenAPI native. created: '2022-09-29T10:13:15Z' - updated: '2024-11-04T23:55:24Z' + updated: '2024-11-05T23:40:44Z' language: JavaScript archived: false stars: 196 @@ -9863,8 +9862,8 @@ owner: speakeasy-api logo: https://avatars.githubusercontent.com/u/91446104?v=4 license: NOASSERTION - repoEtag: '"82ff7448037251c4c745de062a146375811083a8ff1bb80032c9f6941099433e"' - repoLastModified: Mon, 04 Nov 2024 23:55:24 GMT + repoEtag: '"85a9a37688855fed7d65120d3d274f1de2dd8ab78ada25786e13c1228d976d10"' + repoLastModified: Tue, 05 Nov 2024 23:40:44 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -9905,25 +9904,25 @@ id: 17db61563d8b069fd3d4a63d36459a68 repositoryMetadata: base64Readme: >- - WyFbQnVpbGRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbCkKWyFbU21va2UgVGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9zbW9rZS10ZXN0cy55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL3Ntb2tlLXRlc3RzLnltbCkKWyFbTnVHZXRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnVnZXQvdi9yZWZpdHRlcj9jb2xvcj1ibHVlKV0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL3JlZml0dGVyKQpbIVtRdWFsaXR5IEdhdGUgU3RhdHVzXShodHRwczovL3NvbmFyY2xvdWQuaW8vYXBpL3Byb2plY3RfYmFkZ2VzL21lYXN1cmU/cHJvamVjdD1jaHJpc3RpYW5oZWxsZV9yZWZpdHRlciZtZXRyaWM9YWxlcnRfc3RhdHVzKV0oaHR0cHM6Ly9zb25hcmNsb3VkLmlvL3N1bW1hcnkvbmV3X2NvZGU/aWQ9Y2hyaXN0aWFuaGVsbGVfcmVmaXR0ZXIpClshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9ncmFwaC9iYWRnZS5zdmc/dG9rZW49MjQyWVQxTjZUMildKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlcikKCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1CQURHRTpTVEFSVCAtIERvIG5vdCByZW1vdmUgb3IgbW9kaWZ5IHRoaXMgc2VjdGlvbiAtLT4KWyFbQWxsIENvbnRyaWJ1dG9yc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9hbGxfY29udHJpYnV0b3JzLTUzLW9yYW5nZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXSgjY29udHJpYnV0b3JzLSkKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUJBREdFOkVORCAtLT4KCiMgUmVmaXR0ZXIKUmVmaXR0ZXIgaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIGEgQyMgUkVTVCBBUEkgQ2xpZW50IHVzaW5nIHRoZSBbUmVmaXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGl2ZXVpL3JlZml0KSBsaWJyYXJ5LiBSZWZpdHRlciBjYW4gZ2VuZXJhdGUgdGhlIFJlZml0IGludGVyZmFjZSBhbmQgY29udHJhY3RzIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4gUmVmaXR0ZXIgY291bGQgZm9ybWF0IHRoZSBnZW5lcmF0ZWQgUmVmaXQgaW50ZXJmYWNlIHRvIGJlIG1hbmFnZWQgYnkgW0FwaXpyXShodHRwczovL3d3dy5hcGl6ci5uZXQpICh2NispIGFuZCBnZW5lcmF0ZSBzb21lIHJlZ2lzdHJhdGlvbiBoZWxwZXJzIHRvby4KClJlZml0dGVyIGNvbWVzIGluIDIgZm9ybXM6Ci0gQSBbLk5FVCBDTEkgVG9vbF0oI2NsaS10b29sKSBkaXN0cmlidXRlZCB2aWEgW251Z2V0Lm9yZ10oaHR0cDovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvcmVmaXR0ZXIpIHRoYXQgb3V0cHV0cyBhIHNpbmdsZSBDIyBmaWxlIG9uIGRpc2sKLSBBIFtDIyBTb3VyY2UgR2VuZXJhdG9yXSgjc291cmNlLWdlbmVyYXRvcikgdmlhIHRoZSBbUmVmaXR0ZXIuU291cmNlR2VuZXJhdG9yXShodHRwOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9yZWZpdHRlci5zb3VyY2VnZW5lcmF0b3IpIHBhY2thZ2UgdGhhdCBnZW5lcmF0ZXMgY29kZSBvbiBjb21waWxlIHRpbWUgYmFzZWQgb24gYSBbLnJlZml0dGVyXSgjLnJlZml0dGVyLWZpbGUtZm9ybWF0KSB3aXRoaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5LgoKIyMgQ0xJIFRvb2wKCiMjIyBJbnN0YWxsYXRpb246CgpUaGUgdG9vbCBpcyBwYWNrYWdlZCBhcyBhIC5ORVQgVG9vbCBhbmQgaXMgcHVibGlzaGVkIHRvIG51Z2V0Lm9yZy4gWW91IGNhbiBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHRvb2wgbGlrZSB0aGlzOgoKYGBgc2hlbGwKZG90bmV0IHRvb2wgaW5zdGFsbCAtLWdsb2JhbCBSZWZpdHRlcgpgYGAKCiMjIyBVc2FnZToKCmBgYHNoZWxsCiQgcmVmaXR0ZXIgLS1oZWxwCmBgYAoKYGBgdGV4dApVU0FHRToKICAgIHJlZml0dGVyIFtVUkwgb3IgaW5wdXQgZmlsZV0gW09QVElPTlNdCgpFWEFNUExFUzoKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uCiAgICByZWZpdHRlciBodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92My9vcGVuYXBpLnlhbWwKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tc2V0dGluZ3MtZmlsZSAuL29wZW5hcGkucmVmaXR0ZXIgLS1vdXRwdXQgLi9HZW5lcmF0ZWRDb2RlLmNzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiIC0tb3V0cHV0IC4vR2VuZXJhdGVkQ29kZS5jcwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLWludGVybmFsCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW91dHB1dCAuL0lHZW5lcmF0ZWRDb2RlLmNzIC0taW50ZXJmYWNlLW9ubHkKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tb3V0cHV0IC4vR2VuZXJhdGVkQ29udHJhY3RzLmNzIC0tY29udHJhY3Qtb25seQogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS11c2UtYXBpLXJlc3BvbnNlCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLWNhbmNlbGxhdGlvbi10b2tlbnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbm8tb3BlcmF0aW9uLWhlYWRlcnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbm8tYWNjZXB0LWhlYWRlcnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdXNlLWlzby1kYXRlLWZvcm1hdAogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAiWW91ci5BZGRpdGlvbmFsLk5hbWVzcGFjZSIgLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAiWW91ci5PdGhlci5BZGRpdGlvbmFsLk5hbWVzcGFjZSIKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbXVsdGlwbGUtaW50ZXJmYWNlcyBCeUVuZHBvaW50CiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXRhZyBQZXQgLS10YWcgU3RvcmUgLS10YWcgVXNlcgogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1tYXRjaC1wYXRoICdeL3BldC8uKicKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdHJpbS11bnVzZWQtc2NoZW1hCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXRyaW0tdW51c2VkLXNjaGVtYSAgLS1rZWVwLXNjaGVtYSAnXk1vZGVsJCcgLS1rZWVwLXNjaGVtYSAnXlBlcnNvbi4rJwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uby1kZXByZWNhdGVkLW9wZXJhdGlvbnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tb3BlcmF0aW9uLW5hbWUtdGVtcGxhdGUgJ3tvcGVyYXRpb25OYW1lfUFzeW5jJwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1vcHRpb25hbC1udWxsYWJsZS1wYXJhbWV0ZXJzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXVzZS1wb2x5bW9ycGhpYy1zZXJpYWxpemF0aW9uCgpBUkdVTUVOVFM6CiAgICBbVVJMIG9yIGlucHV0IGZpbGVdICAgIFVSTCBvciBmaWxlIHBhdGggdG8gT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGZpbGUKCk9QVElPTlM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRzIGhlbHAgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRzIHZlcnNpb24gaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtcywgLS1zZXR0aW5ncy1maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCB0byAucmVmaXR0ZXIgc2V0dGluZ3MgZmlsZS4gU3BlY2lmeWluZyB0aGlzIHdpbGwgaWdub3JlIGFsbCBvdGhlciBzZXR0aW5ncyAoZXhjZXB0IGZvciAtLW91dHB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbiwgLS1uYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvZGUgICAgRGVmYXVsdCBuYW1lc3BhY2UgdG8gdXNlIGZvciBnZW5lcmF0ZWQgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jb250cmFjdHMtbmFtZXNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBuYW1lc3BhY2UgdG8gdXNlIGZvciBnZW5lcmF0ZWQgY29udHJhY3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbywgLS1vdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dC5jcyAgICAgICAgUGF0aCB0byBPdXRwdXQgZmlsZSBvciBmb2xkZXIgKGlmIG11bHRpcGxlIGZpbGVzIGFyZSBnZW5lcmF0ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jb250cmFjdHMtb3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IHBhdGggZm9yIGdlbmVyYXRlZCBjb250cmFjdHMuIEVuYWJsaW5nIHRoaXMgYXV0b21hdGljYWxseSBlbmFibGVzIGdlbmVyYXRpbmcgbXVsdGlwbGUgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hdXRvLWdlbmVyYXRlZC1oZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxhdXRvLWdlbmVyYXRlZD4gaGVhZGVyIHRvIG91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hY2NlcHQtaGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxBY2NlcHQ+IGhlYWRlciB0byBvdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcmZhY2Utb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgY29udHJhY3QgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jb250cmFjdC1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgY2xpZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtYXBpLXJlc3BvbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIFRhc2s8SUFwaVJlc3BvbnNlPFQ+PiBpbnN0ZWFkIG9mIFRhc2s8VD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2Utb2JzZXJ2YWJsZS1yZXNwb25zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIElPYnNlcnZhYmxlIGluc3RlYWQgb2YgVGFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBhY2Nlc3NpYmlsaXR5IG9mIHRoZSBnZW5lcmF0ZWQgdHlwZXMgdG8gJ2ludGVybmFsJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jYW5jZWxsYXRpb24tdG9rZW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNhbmNlbGxhdGlvbiB0b2tlbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1vcGVyYXRpb24taGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgb3BlcmF0aW9uIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1sb2dnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgbG9nIGVycm9ycyBvciBjb2xsZWN0IHRlbGVtZXRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFkZGl0aW9uYWwgbmFtZXNwYWNlIHRvIGdlbmVyYXRlZCB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1leGNsdWRlLW5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjbHVkZSBuYW1lc3BhY2Ugb24gZ2VuZXJhdGVkIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtaXNvLWRhdGUtZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbGljaXRseSBmb3JtYXQgZGF0ZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBpbiBJU08gODYwMSBzdGFuZGFyZCBkYXRlIGZvcm1hdCB1c2luZyBkZWxpbWl0ZXJzICgyMDIzLTA2LTE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tdWx0aXBsZS1pbnRlcmZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgYSBSZWZpdCBpbnRlcmZhY2UgZm9yIGVhY2ggZW5kcG9pbnQuIE1heSBiZSBvbmUgb2YgQnlFbmRwb2ludCwgQnlUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tdWx0aXBsZS1maWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbXVsdGlwbGUgZmlsZXMgaW5zdGVhZCBvZiBhIHNpbmdsZSBsYXJnZSBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG91dHB1dCBmaWxlcyBjYW4gYmUgdGhlIGZvbGxvd2luZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBSZWZpdEludGVyZmFjZXMuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEZXBlbmRlbmN5SW5qZWN0aW9uLmNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBDb250cmFjdHMuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tYXRjaC1wYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIFBhdGhzIHRoYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gTWF5IGJlIHNldCBtdWx0aXBsZSB0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIEVuZHBvaW50cyB0aGF0IGNvbnRhaW4gdGhpcyB0YWcuIE1heSBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIHJlc3VsdCBpbiBPUidlZCBldmFsdWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1za2lwLXZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCB2YWxpZGF0aW9uIG9mIHRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1kZXByZWNhdGVkLW9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgZGVwcmVjYXRlZCBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1vcGVyYXRpb24tbmFtZS10ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgb3BlcmF0aW9uIG5hbWVzIHVzaW5nIHBhdHRlcm4uIFdoZW4gdXNpbmcgLS1tdWx0aXBsZS1pbnRlcmZhY2VzIEJ5RW5kcG9pbnQsIHRoaXMgaXMgbmFtZSBvZiB0aGUgRXhlY3V0ZSgpIG1ldGhvZCBpbiB0aGUgaW50ZXJmYWNlCiAgICAgICAgLS1vcHRpb25hbC1udWxsYWJsZS1wYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbnVsbGFibGUgcGFyYW1ldGVycyBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS10cmltLXVudXNlZC1zY2hlbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB1bnJlZmVyZW5jZWQgY29tcG9uZW50cyBzY2hlbWEgdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBhIG1pbmltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1rZWVwLXNjaGVtYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2UgdG8ga2VlcCBtYXRjaGluZyBzY2hlbWEsIHVzZXMgcmVndWxhciBleHByZXNzaW9ucy4gVXNlIHRvZ2V0aGVyIHdpdGggIi0tdHJpbS11bnVzZWQtc2NoZW1hIi4gQ2FuIGJlIHNldCBtdWx0aXBsZSB0aW1lcyAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1iYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3Qgc2hvdyBkb25hdGlvbiBiYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1za2lwLWRlZmF1bHQtYWRkaXRpb25hbC1wcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIHRydWUgdG8gc2tpcCBkZWZhdWx0IGFkZGl0aW9uYWwgcHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1vcGVyYXRpb24tbmFtZS1nZW5lcmF0b3IgICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgVGhlIE5Td2FnIElPcGVyYXRpb25OYW1lR2VuZXJhdG9yIGltcGxlbWVudGF0aW9uIHRvIHVzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IGJlIG9uZSBvZjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tT3BlcmF0aW9uSWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tUGF0aFNlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRPcGVyYXRpb25JZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRPcGVyYXRpb25OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRQYXRoU2VnbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTaW5nbGVDbGllbnRGcm9tT3BlcmF0aW9uSWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTaW5nbGVDbGllbnRGcm9tUGF0aFNlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvL2FwaS9SZWZpdHRlci5Db3JlLk9wZXJhdGlvbk5hbWVHZW5lcmF0b3JUeXBlcy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbW11dGFibGUtcmVjb3JkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgY29udHJhY3RzIGFzIGltbXV0YWJsZSByZWNvcmRzIGluc3RlYWQgb2YgY2xhc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtYXBpenIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIEFwaXpyIGJ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBZGRpbmcgYSBmaW5hbCBJQXBpenJSZXF1ZXN0T3B0aW9ucyBvcHRpb25zIHBhcmFtZXRlciB0byBhbGwgZ2VuZXJhdGVkIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBQcm92aWRpbmcgY2FuY2VsbGF0aW9uIHRva2VucyBieSBBcGl6ciByZXF1ZXN0IG9wdGlvbnMgaW5zdGVhZCBvZiBhIGRlZGljYXRlZCBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBVc2luZyBtZXRob2Qgb3ZlcmxvYWRzIGluc3RlYWQgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBodHRwczovL3d3dy5hcGl6ci5uZXQgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBBcGl6ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtZHluYW1pYy1xdWVyeXN0cmluZy1wYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHdyYXBwaW5nIG11bHRpcGxlIHF1ZXJ5IHBhcmFtZXRlcnMgaW50byBhIHNpbmdsZSBjb21wbGV4IG9uZS4gRGVmYXVsdCBpcyBubyB3cmFwcGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGl2ZXVpL3JlZml0P3RhYj1yZWFkbWUtb3YtZmlsZSNkeW5hbWljLXF1ZXJ5c3RyaW5nLXBhcmFtZXRlcnMgZm9yIG1vcmUgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtcG9seW1vcnBoaWMtc2VyaWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIFN5c3RlbS5UZXh0Lkpzb24gcG9seW1vcnBoaWMgc2VyaWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKVG8gZ2VuZXJhdGUgY29kZSBmcm9tIGFuIE9wZW5BUEkgc3BlY2lmaWNhdGlvbnMgZmlsZSwgcnVuIHRoZSBmb2xsb3dpbmc6CgpgYGBzaGVsbAokIHJlZml0dGVyIFtwYXRoIHRvIE9wZW5BUEkgc3BlYyBmaWxlXSAtLW5hbWVzcGFjZSAiW1lvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlXSIKYGBgCgpUaGlzIHdpbGwgZ2VuZXJhdGUgYSBmaWxlIGNhbGxlZCBgT3V0cHV0LmNzYCB3aGljaCBjb250YWlucyB0aGUgUmVmaXQgaW50ZXJmYWNlIGFuZCBjb250cmFjdCBjbGFzc2VzIGdlbmVyYXRlZCB1c2luZyBbTlN3YWddKGh0dHBzOi8vZ2l0aHViLmNvbS9SaWNvU3V0ZXIvTlN3YWcpCgojIyBTb3VyY2UgR2VuZXJhdG9yCgpSZWZpdHRlciBpcyBhdmFpbGFibGUgYXMgYSBDIyBTb3VyY2UgR2VuZXJhdG9yIHRoYXQgdXNlcyB0aGUgW1JlZml0dGVyLkNvcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci90cmVlL21haW4vc3JjL1JlZml0dGVyLkNvcmUpIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYSBSRVNUIEFQSSBDbGllbnQgdXNpbmcgdGhlIFtSZWZpdF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0aXZldWkvcmVmaXQpIGxpYnJhcnkuIFJlZml0dGVyIGNhbiBnZW5lcmF0ZSB0aGUgUmVmaXQgaW50ZXJmYWNlIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4gUmVmaXR0ZXIgY291bGQgZm9ybWF0IHRoZSBnZW5lcmF0ZWQgUmVmaXQgaW50ZXJmYWNlIHRvIGJlIG1hbmFnZWQgYnkgW0FwaXpyXShodHRwczovL3d3dy5hcGl6ci5uZXQpIGFuZCBnZW5lcmF0ZSBzb21lIHJlZ2lzdHJhdGlvbiBoZWxwZXJzIHRvby4KClRoZSBSZWZpdHRlciBzb3VyY2UgZ2VuZXJhdG9yIGlzIGEgYml0IHVudHJhZGl0aW9uYWwgaW4gYSBzZW5zZSB0aGF0IGl0IGNyZWF0ZXMgYSBmb2xkZXIgY2FsbGVkIGBHZW5lcmF0ZWRgIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIHRoZSBgLnJlZml0dGVyYCBmaWxlIGFuZCBnZW5lcmF0ZXMgZmlsZXMgdG8gZGlzayB1bmRlciB0aGUgYEdlbmVyYXRlZGAgZm9sZGVyIChjYW4gYmUgY2hhbmdlZCB3aXRoIGAtLW91dHB1dEZvbGRlcmApLiBUaGUgc291cmNlIGdlbmVyYXRvciBvdXRwdXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBwcm9qZWN0IGFuZCBjb21taXR0ZWQgdG8gc291cmNlIGNvbnRyb2wuIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIHdheSB0byB0cmlnZ2VyIHRoZSBSZWZpdCBzb3VyY2UgZ2VuZXJhdG9yIHRvIHBpY2t1cCB0aGUgUmVmaXR0ZXIgZ2VuZXJhdGVkIGNvZGUgCgoqKiooVHJhbnNsYXRpb246IEkgY291bGRuJ3QgZm9yIHRoZSBsaWZlIG9mIG1lIGZpZ3VyZSBob3cgdG8gZ2V0IHRoYXQgdG8gd29yaywgc29ycnkpKioqCgojIyMgSW5zdGFsbGF0aW9uCgpUaGUgc291cmNlIGdlbmVyYXRvciBpcyBkaXN0cmlidXRlZCBhcyBhIE51R2V0IHBhY2thZ2UgYW5kIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gdGhlIHByb2plY3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGdlbmVyYXRlZCBjb2RlCgpgYGBzaGVsbApkb3RuZXQgYWRkIHBhY2thZ2UgUmVmaXR0ZXIuU291cmNlR2VuZXJhdG9yCmBgYAoKIyMjIFVzYWdlCgpUaGlzIHNvdXJjZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIGNvZGUgYmFzZWQgb24gYW55IGAucmVmaXR0ZXJgIGZpbGUgaW5jbHVkZWQgdG8gdGhlIHByb2plY3QgYXMgYEFkZGl0aW9uYWxGaWxlc2AuCgpUaGUgZ2VuZXJhdG9yIGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdCBhbGwgYC5yZWZpdHRlcmAgZmlsZXMgaW5zaWRlIHRoZSBwcm9qZWN0IHRoYXQgcmVmZXJlbmNlZCB0aGUgYFJlZml0dGVyLlNvdXJjZUdlbmVyYXRvcmAgcGFja2FnZSBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBpbmNsdWRlIHRoZW0gbWFudWFsbHkgYXMgYEFkZGl0aW9uYWxGaWxlc2AKCiMjIyAuUmVmaXR0ZXIgRmlsZSBmb3JtYXQKClRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBgLnJlZml0dGVyYCBmaWxlCgpgYGBqcwp7CiAgIm9wZW5BcGlQYXRoIjogIi9wYXRoL3RvL3lvdXIvb3BlbkFQSSIsIC8vIFJlcXVpcmVkCiAgIm5hbWVzcGFjZSI6ICJPcmcuU3lzdGVtLlNlcnZpY2UuQXBpLkdlbmVyYXRlZENvZGUiLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1HZW5lcmF0ZWRDb2RlCiAgImNvbnRyYWN0c05hbWVzcGFjZSI6ICJPcmcuU3lzdGVtLlNlcnZpY2UuQXBpLkdlbmVyYXRlZENvZGUuQ29udHJhY3RzIiwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9R2VuZXJhdGVkQ29kZQogICJuYW1pbmciOiB7CiAgICAidXNlT3BlbkFwaVRpdGxlIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAgICJpbnRlcmZhY2VOYW1lIjogIk15QXBpQ2xpZW50IiAvLyBPcHRpb25hbC4gRGVmYXVsdD1BcGlDbGllbnQKICB9LAogICJnZW5lcmF0ZUNvbnRyYWN0cyI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAiZ2VuZXJhdGVDbGllbnRzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJnZW5lcmF0ZVhtbERvY0NvZGVDb21tZW50cyI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAiZ2VuZXJhdGVTdGF0dXNDb2RlQ29tbWVudHMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgImFkZEF1dG9HZW5lcmF0ZWRIZWFkZXIiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgImFkZEFjY2VwdEhlYWRlcnMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgInJldHVybklBcGlSZXNwb25zZSI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICJyZXNwb25zZVR5cGVPdmVycmlkZSI6IHsgLy8gT3B0aW9uYWwuIERlZmF1bHQ9e30KICAgICJGaWxlX1VwbG9hZCI6ICJJQXBpUmVzcG9uc2UiLAogICAgIkZpbGVfRG93bmxvYWQiOiAiU3lzdGVtLk5ldC5IdHRwLkh0dHBDb250ZW50IgogIH0sCiAgImdlbmVyYXRlT3BlcmF0aW9uSGVhZGVycyI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAidHlwZUFjY2Vzc2liaWxpdHkiOiAiUHVibGljIiwgLy8gT3B0aW9uYWwuIFZhbHVlcz1QdWJsaWN8SW50ZXJuYWwuIERlZmF1bHQ9UHVibGljCiAgInVzZUNhbmNlbGxhdGlvblRva2VucyI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICJ1c2VJc29EYXRlRm9ybWF0IjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgIm11bHRpcGxlSW50ZXJmYWNlcyI6ICJCeUVuZHBvaW50IiwgLy8gT3B0aW9uYWwuIE1heSBiZSBvbmUgb2YgIkJ5RW5kcG9pbnQiIG9yICJCeVRhZyIKICAiZ2VuZXJhdGVEZXByZWNhdGVkT3BlcmF0aW9ucyI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgIm9wZXJhdGlvbk5hbWVUZW1wbGF0ZSI6ICJ7b3BlcmF0aW9uTmFtZX1Bc3luYyIsIC8vIE9wdGlvbmFsLiBNdXN0IGNvbnRhaW4ge29wZXJhdGlvbk5hbWV9IHdoZW4gbXVsdGlwbGVJbnRlcmZhY2VzICE9IEJ5RW5kcG9pbnQKICAib3B0aW9uYWxQYXJhbWV0ZXJzIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgIm91dHB1dEZvbGRlciI6ICIuLi9DdXN0b21PdXRwdXQiIC8vIE9wdGlvbmFsLiBEZWZhdWx0PS4vR2VuZXJhdGVkCiAgIm91dHB1dEZpbGVuYW1lIjogIlJlZml0SW50ZXJmYWNlLmNzIiwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9T3V0cHV0LmNzIGZvciBDTEkgdG9vbAogICJjb250cmFjdHNPdXRwdXRGb2xkZXIiOiAiLi4vQ29udHJhY3RzIiwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9TlVMTAogICJnZW5lcmF0ZU11bHRpcGxlRmlsZXMiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAiYWRkaXRpb25hbE5hbWVzcGFjZXMiOiBbIC8vIE9wdGlvbmFsCiAgICAiTmFtZXNwYWNlMSIsCiAgICAiTmFtZXNwYWNlMiIKICBdLAogICJpbmNsdWRlVGFncyI6IFsgLy8gT3B0aW9uYWwuIE9wZW5BUEkgVGFnIHRvIGluY2x1ZGUgd2hlbiBnZW5lcmF0aW5nIGNvZGUKICAgICJQZXQiLAogICAgIlN0b3JlIiwKICAgICJVc2VyIgogIF0sCiAgImluY2x1ZGVQYXRoTWF0Y2hlcyI6IFsgLy8gT3B0aW9uYWwuIE9ubHkgaW5jbHVkZSBQYXRocyB0aGF0IG1hdGNoIHRoZSBwcm92aWRlZCByZWd1bGFyIGV4cHJlc3Npb24KICAgICJeL3BldC8uKiIsCiAgICAiXi9zdG9yZS8uKiIKICBdLAogICJ0cmltVW51c2VkU2NoZW1hIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgImtlZXBTY2hlbWFQYXR0ZXJucyI6IFsgLy8gT3B0aW9uYWwuIEZvcmNlIHRvIGtlZXAgbWF0Y2hpbmcgc2NoZW1hLCB1c2VzIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFVzZSB0b2dldGhlciB3aXRoIHRyaW1VbnVzZWRTY2hlbWE9dHJ1ZQogICAgIl5Nb2RlbCQiLAogICAgIl5QZXJzb24uKyIKICBdLAogICJnZW5lcmF0ZURlZmF1bHRBZGRpdGlvbmFsUHJvcGVydGllcyI6IHRydWUsIC8vIE9wdGlvbmFsLiBkZWZhdWx0PXRydWUKICAib3BlcmF0aW9uTmFtZUdlbmVyYXRvciI6ICJEZWZhdWx0IiwgLy8gT3B0aW9uYWwuIE1heSBiZSBvbmUgb2YgRGVmYXVsdCwgTXVsdGlwbGVDbGllbnRzRnJvbU9wZXJhdGlvbklkLCBNdWx0aXBsZUNsaWVudHNGcm9tUGF0aFNlZ21lbnRzLCBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRPcGVyYXRpb25JZCwgTXVsdGlwbGVDbGllbnRzRnJvbUZpcnN0VGFnQW5kT3BlcmF0aW9uTmFtZSwgTXVsdGlwbGVDbGllbnRzRnJvbUZpcnN0VGFnQW5kUGF0aFNlZ21lbnRzLCBTaW5nbGVDbGllbnRGcm9tT3BlcmF0aW9uSWQsIFNpbmdsZUNsaWVudEZyb21QYXRoU2VnbWVudHMKICAiaW1tdXRhYmxlUmVjb3JkcyI6IGZhbHNlLAogICJ1c2VEeW5hbWljUXVlcnlzdHJpbmdQYXJhbWV0ZXJzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAidXNlUG9seW1vcnBoaWNTZXJpYWxpemF0aW9uIiwgZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgImRlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyI6IHsgLy8gT3B0aW9uYWwKICAgICJiYXNlVXJsIjogImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwgLy8gT3B0aW9uYWwuIExlYXZlIHRoaXMgYmxhbmsgdG8gc2V0IHRoZSBiYXNlIGFkZHJlc3MgbWFudWFsbHkKICAgICJodHRwTWVzc2FnZUhhbmRsZXJzIjogWyAvLyBPcHRpb25hbAogICAgICAgICJBdXRob3JpemF0aW9uTWVzc2FnZUhhbmRsZXIiLCAKICAgICAgICAiVGVsZW1ldHJ5TWVzc2FnZUhhbmRsZXIiIAogICAgXSwKICAgICJ1c2VQb2xseSI6IHRydWUsIC8vIERFUFJFQ0FURUQgLSBVc2UgInRyYW5zaWVudEVycm9ySGFuZGxlciI6ICJOb25lfFBvbGx5fEh0dHBSZXNpbGllbmNlIiBpbnN0ZWFkCiAgICAidHJhbnNpZW50RXJyb3JIYW5kbGVyIjogIkh0dHBSZXNpbGllbmNlIiwgLy8gT3B0aW9uYWwuIFNldCB0aGlzIHRvIGNvbmZpZ3VyZSB0cmFuc2llbnQgZXJyb3IgaGFuZGxpbmcgd2l0aCBhIHJldHJ5IHBvbGljeSB0aGF0IHVzZXMgYSBqaXR0ZXJlZCBiYWNrb2ZmLiBNYXkgYmUgb25lIG9mIE5vbmUsIFBvbGx5LCBIdHRwUmVzaWxpZW5jZQogICAgIm1heFJldHJ5Q291bnQiOiAzLCAvLyBPcHRpb25hbC4gRGVmYXVsdD02CiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUgLy8gT3B0aW9uYWwuIERlZmF1bHQ9MS4wCiAgfSwKICAiYXBpenJTZXR0aW5ncyI6IHsgLy8gT3B0aW9uYWwKICAgICJ3aXRoUmVxdWVzdE9wdGlvbnMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgICAid2l0aFJlZ2lzdHJhdGlvbkhlbHBlciI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgICAid2l0aENhY2hlUHJvdmlkZXIiOiAiSW5NZW1vcnkiLCAvLyBPcHRpb25hbC4gVmFsdWVzPU5vbmV8QWthdmFjaGV8TW9ua2V5Q2FjaGV8SW5NZW1vcnl8RGlzdHJpYnV0ZWRBc1N0cmluZ3xEaXN0cmlidXRlZEFzQnl0ZUFycmF5LiBEZWZhdWx0PU5vbmUKICAgICJ3aXRoUHJpb3JpdHkiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICAgIndpdGhNZWRpYXRpb24iOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICAgIndpdGhPcHRpb25hbE1lZGlhdGlvbiI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgICAid2l0aE1hcHBpbmdQcm92aWRlciI6ICJBdXRvTWFwcGVyIiwgLy8gT3B0aW9uYWwuIFZhbHVlcz1Ob25lfEF1dG9NYXBwZXJ8TWFwc3Rlci4gRGVmYXVsdD1Ob25lCiAgICAid2l0aEZpbGVUcmFuc2ZlciI6IHRydWUgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICB9LAogICJjb2RlR2VuZXJhdG9yU2V0dGluZ3MiOiB7IC8vIE9wdGlvbmFsLiBEZWZhdWx0IHNldHRpbmdzIGFyZSB0aGUgdmFsdWVzIHNldCBpbiB0aGlzIGV4YW1wbGUKICAgICJyZXF1aXJlZFByb3BlcnRpZXNNdXN0QmVEZWZpbmVkIjogdHJ1ZSwKICAgICJnZW5lcmF0ZURhdGFBbm5vdGF0aW9ucyI6IHRydWUsCiAgICAiYW55VHlwZSI6ICJvYmplY3QiLAogICAgImRhdGVUeXBlIjogIlN5c3RlbS5EYXRlVGltZU9mZnNldCIsCiAgICAiZGF0ZVRpbWVUeXBlIjogIlN5c3RlbS5EYXRlVGltZU9mZnNldCIsCiAgICAidGltZVR5cGUiOiAiU3lzdGVtLlRpbWVTcGFuIiwKICAgICJ0aW1lU3BhblR5cGUiOiAiU3lzdGVtLlRpbWVTcGFuIiwKICAgICJhcnJheVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUNvbGxlY3Rpb24iLAogICAgImRpY3Rpb25hcnlUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklEaWN0aW9uYXJ5IiwKICAgICJhcnJheUluc3RhbmNlVHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbiIsCiAgICAiZGljdGlvbmFyeUluc3RhbmNlVHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5IiwKICAgICJhcnJheUJhc2VUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5PYmplY3RNb2RlbC5Db2xsZWN0aW9uIiwKICAgICJkaWN0aW9uYXJ5QmFzZVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeSIsCiAgICAicHJvcGVydHlTZXR0ZXJBY2Nlc3NNb2RpZmllciI6ICIiLAogICAgImdlbmVyYXRlSW1tdXRhYmxlQXJyYXlQcm9wZXJ0aWVzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVJbW11dGFibGVEaWN0aW9uYXJ5UHJvcGVydGllcyI6IGZhbHNlLAogICAgImhhbmRsZVJlZmVyZW5jZXMiOiBmYWxzZSwKICAgICJqc29uU2VyaWFsaXplclNldHRpbmdzVHJhbnNmb3JtYXRpb25NZXRob2QiOiBudWxsLAogICAgImdlbmVyYXRlSnNvbk1ldGhvZHMiOiBmYWxzZSwKICAgICJlbmZvcmNlRmxhZ0VudW1zIjogZmFsc2UsCiAgICAiaW5saW5lTmFtZWREaWN0aW9uYXJpZXMiOiBmYWxzZSwKICAgICJpbmxpbmVOYW1lZFR1cGxlcyI6IHRydWUsCiAgICAiaW5saW5lTmFtZWRBcnJheXMiOiBmYWxzZSwKICAgICJnZW5lcmF0ZU9wdGlvbmFsUHJvcGVydGllc0FzTnVsbGFibGUiOiBmYWxzZSwKICAgICJnZW5lcmF0ZU51bGxhYmxlUmVmZXJlbmNlVHlwZXMiOiBmYWxzZSwKICAgICJnZW5lcmF0ZU5hdGl2ZVJlY29yZHMiOiBmYWxzZSwKICAgICJnZW5lcmF0ZURlZmF1bHRWYWx1ZXMiOiB0cnVlLAogICAgImlubGluZU5hbWVkQW55IjogZmFsc2UsCiAgICAiZXhjbHVkZWRUeXBlTmFtZXMiOiBbCiAgICAgICJFeGNsdWRlZFR5cGVGb28iLAogICAgICAiRXhjbHVkZWRUeXBlQmFyIgogICAgXQogIH0KfQpgYGAKCi0gYG9wZW5BcGlQYXRoYCAtIHBvaW50cyB0byB0aGUgT3BlbkFQSSBTcGVjaWZpY2F0aW9ucyBmaWxlLiBUaGlzIGNhbiBiZSB0aGUgcGF0aCB0byBhIGZpbGUgc3RvcmVkIG9uIGRpc2ssIHJlbGF0aXZlIHRvIHRoZSBgLnJlZml0dGVyYCBmaWxlLiBUaGlzIGNhbiBhbHNvIGJlIGEgVVJMIHRvIGEgcmVtb3RlIGZpbGUgdGhhdCB3aWxsIGJlIGRvd25sb2FkZWQgb3ZlciBIVFRQL0hUVFBTCi0gYG5hbWVzcGFjZWAgLSB0aGUgbmFtZXNwYWNlIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIGRlZmF1bHRzIHRvIGBHZW5lcmF0ZWRDb2RlYAotIGBuYW1pbmcudXNlT3BlbkFwaVRpdGxlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIE9wZW5BcGkgdGl0bGUgc2hvdWxkIGJlIHVzZWQuIERlZmF1bHQgaXMgYHRydWVgCi0gYG5hbWluZy5pbnRlcmZhY2VOYW1lYCAtIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgaW50ZXJmYWNlLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggYElgIHNvIGlmIHRoaXMgc2V0IHRvIGBNeUFwaUNsaWVudGAgdGhlbiB0aGUgZ2VuZXJhdGVkIGludGVyZmFjZSBpcyBjYWxsZWQgYElNeUFwaUNsaWVudGAuIERlZmF1bHQgaXMgYEFwaUNsaWVudGAKLSBgZ2VuZXJhdGVDb250cmFjdHNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBjb250cmFjdHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gQSB1c2UgY2FzZSBmb3IgdGhpcyBpcyBzZXZlcmFsIEFQSSBjbGllbnRzIHVzZSB0aGUgc2FtZSBjb250cmFjdHMuIERlZmF1bHQgaXMgYHRydWVgCi0gYGdlbmVyYXRlQ2xpZW50c2A6ICAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgY2xpZW50cyBzaG91bGQgYmUgZ2VuZXJhdGVkLiBBIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRvIHNlcGVyYXRlIGNsaWVudHMgYW5kIGNvbnRyYWN0cyBpbiB0d28gZ2VuZXJhdGlvbgotIGBnZW5lcmF0ZVhtbERvY0NvZGVDb21tZW50c2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgZ2VuZXJhdGVTdGF0dXNDb2RlQ29tbWVudHNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgWE1MIGRvY3MgZm9yIGBBcGlFeGNlcHRpb25gIGFuZCBgSUFwaVJlc3BvbnNlYCBjb250YWluIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBmb3IgZXZlcnkgZG9jdW1lbnRlZCBzdGF0dXMgY29kZS4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQXV0b0dlbmVyYXRlZEhlYWRlcmAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQWNjZXB0SGVhZGVyc2AgLSAgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBhZGQgYWNjZXB0IGhlYWRlcnMgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXS4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgcmV0dXJuSUFwaVJlc3BvbnNlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmV0dXJuIGBJQXBpUmVzcG9uc2U8VD5gIG9iamVjdHMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGByZXNwb25zZVR5cGVPdmVycmlkZWAgLSBhIGRpY3Rpb25hcnkgd2l0aCBvcGVyYXRpb24gaWRzIChhcyBzcGVjaWZpZWQgaW4gdGhlIE9wZW5BUEkgZG9jdW1lbnQpIGFuZCBhIHBhcnRpY3VsYXIgcmV0dXJuIHR5cGUgdG8gdXNlLiBUaGUgdHlwZXMgYXJlIHdyYXBwZWQgaW4gYSB0YXNrLCBidXQgb3RoZXJ3aXNlIHVubW9kaWZpZWQgKHNvIG1ha2Ugc3VyZSB0byBzcGVjaWZ5IG9yIGltcG9ydCB0aGVpciBuYW1lc3BhY2VzKS4gRGVmYXVsdCBpcyBge31gCi0gYGdlbmVyYXRlT3BlcmF0aW9uSGVhZGVyc2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHVzZSBvcGVyYXRpb24gaGVhZGVycyBpbiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuIERlZmF1bHQgaXMgYHRydWVgCi0gYHR5cGVBY2Nlc3NpYmlsaXR5YCAtIHRoZSBnZW5lcmF0ZWQgdHlwZSBhY2Nlc3NpYmlsaXR5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBQdWJsaWNgIGFuZCBgSW50ZXJuYWxgLiBEZWZhdWx0IGlzIGBQdWJsaWNgCi0gYHVzZUNhbmNlbGxhdGlvblRva2Vuc2AgLSBVc2UgY2FuY2VsbGF0aW9uIHRva2VucyBpbiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGB1c2VJc29EYXRlRm9ybWF0YCAtIFNldCB0byBgdHJ1ZWAgdG8gZXhwbGljaXRseSBmb3JtYXQgZGF0ZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBpbiBJU08gODYwMSBzdGFuZGFyZCBkYXRlIGZvcm1hdCB1c2luZyBkZWxpbWl0ZXJzIChmb3IgZXhhbXBsZTogMjAyMy0wNi0xNSkuIERlZmF1bHQgaXMgYGZhbHNlYAotIGBtdWx0aXBsZUludGVyZmFjZXNgIC0gU2V0IHRvIGBCeUVuZHBvaW50YCB0byBnZW5lcmF0ZSBhbiBpbnRlcmZhY2UgZm9yIGVhY2ggZW5kcG9pbnQsIG9yIGBCeVRhZ2AgdG8gZ3JvdXAgRW5kcG9pbnRzIGJ5IHRoZWlyIFRhZyAobGlrZSBTd2FnZ2VyVUkgZ3JvdXBzIHRoZW0pLgotIGBvdXRwdXRGb2xkZXJgIC0gYSBzdHJpbmcgZGVzY3JpYmluZyBhIHJlbGF0aXZlIHBhdGggdG8gYSBkZXNpcmVkIG91dHB1dCBmb2xkZXIuIERlZmF1bHQgaXMgYC4vR2VuZXJhdGVkYAotIGBvdXRwdXRGaWxlbmFtZWAgLSBPdXRwdXQgZmlsZW5hbWUuIERlZmF1bHQgaXMgYE91dHB1dC5jc2Agd2hlbiB1c2VkIGZyb20gdGhlIENMSSB0b29sLCBvdGhlcndpc2UgaXRzIHRoZSAucmVmaXR0ZXIgZmlsZW5hbWUuIFNvIGBQZXRzdG9yZS5yZWZpdHRlcmAgYmVjb21lcyBgUGV0c3RvcmUuY3NgLgotIGBhZGRpdGlvbmFsTmFtZXNwYWNlc2AgLSBBIGNvbGxlY3Rpb24gb2YgYWRkaXRpb25hbCBuYW1lc3BhY2VzIHRvIGluY2x1ZGUgaW4gdGhlIGdlbmVyYXRlZCBmaWxlLiBBIHVzZSBjYXNlIGZvciB0aGlzIGlzIHdoZW4geW91IHdhbnQgdG8gcmV1c2UgY29udHJhY3RzIGZyb20gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYW4gdGhlIGdlbmVyYXRlZCBjb2RlLiBEZWZhdWx0IGlzIGVtcHR5Ci0gYGluY2x1ZGVUYWdzYCAtIEEgY29sbGVjdGlvbiBvZiB0YWdzIHRvIHVzZSBhIGZpbHRlciBmb3IgaW5jbHVkaW5nIGVuZHBvaW50cyB0aGF0IGNvbnRhaW4gdGhpcyB0YWcuCi0gYGluY2x1ZGVQYXRoTWF0Y2hlc2AgLSBBIGNvbGxlY3Rpb24gb2YgcmVndWxhciBleHByZXNzaW9ucyB1c2VkIHRvIGZpbHRlciBwYXRocy4KLSBgZ2VuZXJhdGVEZXByZWNhdGVkT3BlcmF0aW9uc2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGRlcHJlY2F0ZWQgb3BlcmF0aW9ucyBzaG91bGQgYmUgZ2VuZXJhdGVkIG9yIHNraXBwZWQuIERlZmF1bHQgaXMgYHRydWVgCi0gYG9wZXJhdGlvbk5hbWVUZW1wbGF0ZWAgLSBHZW5lcmF0ZSBvcGVyYXRpb24gbmFtZXMgdXNpbmcgcGF0dGVybi4gVGhpcyBtdXN0IGNvbnRhaW4gdGhlIHN0cmluZyB7b3BlcmF0aW9uTmFtZX0uIEFuIGV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBjb3VsZCBiZSBge29wZXJhdGlvbk5hbWV9QXN5bmNgIHRvIHN1ZmZpeCBhbGwgbWV0aG9kIG5hbWVzIHdpdGggQXN5bmMKLSBgb3B0aW9uYWxQYXJhbWV0ZXJzYCAtIEdlbmVyYXRlIG5vbi1yZXF1aXJlZCBwYXJhbWV0ZXJzIGFzIG51bGxhYmxlIG9wdGlvbmFsIHBhcmFtZXRlcnMKLSBgdHJpbVVudXNlZFNjaGVtYWAgLSBSZW1vdmVzIHVucmVmZXJlbmNlZCBjb21wb25lbnRzIHNjaGVtYSB0byBrZWVwIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IHRvIGEgbWluaW11bQotIGBrZWVwU2NoZW1hUGF0dGVybnNgOiBBIGNvbGxlY3Rpb24gb2YgcmVndWxhciBleHByZXNzaW9ucyB0byBmb3JjZSB0byBrZWVwIG1hdGNoaW5nIHNjaGVtYS4gVGhpcyBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggYHRyaW1VbnVzZWRTY2hlbWFgCi0gYGdlbmVyYXRlRGVmYXVsdEFkZGl0aW9uYWxQcm9wZXJ0aWVzYDogU2V0IHRvIGBmYWxzZWAgdG8gc2tpcCBkZWZhdWx0IGFkZGl0aW9uYWwgcHJvcGVydGllcy4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgb3BlcmF0aW9uTmFtZUdlbmVyYXRvcmA6IFRoZSBOU3dhZyBgSU9wZXJhdGlvbk5hbWVHZW5lcmF0b3JgIGltcGxlbWVudGF0aW9uIHRvIHVzZS4gU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvL2FwaS9SZWZpdHRlci5Db3JlLk9wZXJhdGlvbk5hbWVHZW5lcmF0b3JUeXBlcy5odG1sCi0gYGltbXV0YWJsZVJlY29yZHNgOiBTZXQgdG8gYHRydWVgIHRvIGdlbmVyYXRlIGNvbnRyYWN0cyBhcyBpbW11dGFibGUgcmVjb3JkcyBpbnN0ZWFkIG9mIGNsYXNzZXMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGB1c2VEeW5hbWljUXVlcnlzdHJpbmdQYXJhbWV0ZXJzYDogU2V0IHRvIGB0cnVlYCB0byB3cmFwIG11bHRpcGxlIHF1ZXJ5IHBhcmFtZXRlcnMgaW50byBhIHNpbmdsZSBjb21wbGV4IG9uZS4gRGVmYXVsdCBpcyBgZmFsc2VgIChubyB3cmFwcGluZykuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3RpdmV1aS9yZWZpdD90YWI9cmVhZG1lLW92LWZpbGUjZHluYW1pYy1xdWVyeXN0cmluZy1wYXJhbWV0ZXJzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIGBkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3NgIC0gU2V0dGluZyB0aGlzIHdpbGwgZ2VuZXJhdGVkIGV4dGVuc2lvbiBtZXRob2RzIHRvIGBJU2VydmljZUNvbGxlY3Rpb25gIGZvciBjb25maWd1cmluZyBSZWZpdCBjbGllbnRzCiAgLSBgYmFzZVVybGAgLSBVc2VkIGFzIHRoZSBIdHRwQ2xpZW50IGJhc2UgYWRkcmVzcy4gTGVhdmUgdGhpcyBibGFuayB0byBtYW51YWxseSBzZXQgdGhlIGJhc2UgVVJMCiAgLSBgaHR0cE1lc3NhZ2VIYW5kbGVyc2AgLSBBIGNvbGxlY3Rpb24gb2YgYEh0dHBNZXNzYWdlSGFuZGxlcmAgdGhhdCBpcyBhZGRlZCB0byB0aGUgSHR0cENsaWVudCBwaXBlbGluZQogIC0gYHVzZVBvbGx5YCAtIChERVBSRUNBVEVEKSBTZXQgdGhpcyB0byB0cnVlIHRvIGNvbmZpZ3VyZSB0aGUgSHR0cENsaWVudCB0byB1c2UgUG9sbHkgdXNpbmcgYSByZXRyeSBwb2xpY3kgd2l0aCBhIGppdHRlcmVkIGJhY2tvZmYKICAtIGB0cmFuc2llbnRFcnJvckhhbmRsZXJgOiBTZXQgdGhpcyB0byBjb25maWd1cmUgdHJhbnNpZW50IGVycm9yIGhhbmRsaW5nIHdpdGggYSByZXRyeSBwb2xpY3kgdGhhdCB1c2VzIGEgaml0dGVyZWQgYmFja29mZi4gU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvL2FwaS9SZWZpdHRlci5Db3JlLlRyYW5zaWVudEVycm9ySGFuZGxlci5odG1sCiAgLSBgZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHNgIC0gVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGluaXRpYWwgcmV0cnkgYmFja29mZi4gRGVmYXVsdCBpcyAxIHNlY29uZAotIGBhcGl6clNldHRpbmdzYCAtIFNldHRpbmcgdGhpcyB3aWxsIGZvcm1hdCBSZWZpdCBpbnRlcmZhY2UgdG8gYmUgbWFuYWdlZCBieSBBcGl6ci4gU2VlIGh0dHBzOi8vd3d3LmFwaXpyLm5ldCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIC0gYHdpdGhSZXF1ZXN0T3B0aW9uc2AgLSBUZWxscyBpZiB0aGUgUmVmaXQgaW50ZXJmYWNlIG1ldGhvZHMgc2hvdWxkIGhhdmUgYSBmaW5hbCBJQXBpenJSZXF1ZXN0T3B0aW9ucyBvcHRpb25zIHBhcmFtZXRlcgogIC0gYHdpdGhSZWdpc3RyYXRpb25IZWxwZXJgIC0gVGVsbHMgaWYgUmVmaXR0ZXIgc2hvdWxkIGdlbmVyYXRlIEFwaXpyIHJlZ2lzdHJhdGlvbiBoZWxwZXJzIChleHRlbmRlZCB3aXRoIGRlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyBzZXQsIG90aGVyd2lzZSBzdGF0aWMpCiAgLSBgd2l0aENhY2hlUHJvdmlkZXJgIC0gU2V0IHRoZSBjYWNoZSBwcm92aWRlciB0byBiZSB1c2VkCiAgLSBgd2l0aFByaW9yaXR5YCAtIFRlbGxzIGlmIEFwaXpyIHNob3VsZCBoYW5kbGUgcmVxdWVzdCBwcmlvcml0eQogIC0gYHdpdGhNZWRpYXRpb25gIC0gVGVsbHMgaWYgQXBpenIgc2hvdWxkIGhhbmRsZSByZXF1ZXN0IG1lZGlhdGlvbiAoZXh0ZW5kZWQgb25seSkKICAtIGB3aXRoT3B0aW9uYWxNZWRpYXRpb25gIC0gVGVsbHMgaWYgQXBpenIgc2hvdWxkIGhhbmRsZSBvcHRpb25hbCByZXF1ZXN0IG1lZGlhdGlvbiAoZXh0ZW5kZWQgb25seSkKICAtIGB3aXRoTWFwcGluZ1Byb3ZpZGVyYCAtIFNldCB0aGUgbWFwcGluZyBwcm92aWRlciB0byBiZSB1c2VkCiAgLSBgd2l0aEZpbGVUcmFuc2ZlcmAgLSBUZWxscyBpZiBBcGl6ciBzaG91bGQgaGFuZGxlIGZpbGUgdHJhbnNmZXIKLSBgY29kZUdlbmVyYXRvclNldHRpbmdzYCAtIFNldHRpbmcgdGhpcyBhbGxvd3MgY3VzdG9taXphdGlvbiBvZiB0aGUgTlN3YWcgZ2VuZXJhdGVkIHR5cGVzIGFuZCBjb250cmFjdHMKICAtIGByZXF1aXJlZFByb3BlcnRpZXNNdXN0QmVEZWZpbmVkYCAtIERlZmF1bHQgaXMgdHJ1ZSwKICAtIGBnZW5lcmF0ZURhdGFBbm5vdGF0aW9uc2AgLSBEZWZhdWx0IGlzIHRydWUsCiAgLSBgYW55VHlwZWAgLSBEZWZhdWx0IGlzIGBvYmplY3RgLAogIC0gYGRhdGVUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5EYXRlVGltZU9mZnNldGAsCiAgLSBgZGF0ZVRpbWVUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5EYXRlVGltZU9mZnNldGAsCiAgLSBgdGltZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLlRpbWVTcGFuYCwKICAtIGB0aW1lU3BhblR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLlRpbWVTcGFuYCwKICAtIGBhcnJheVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUNvbGxlY3Rpb25gLAogIC0gYGRpY3Rpb25hcnlUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklEaWN0aW9uYXJ5YCwKICAtIGBhcnJheUluc3RhbmNlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbmAsCiAgLSBgZGljdGlvbmFyeUluc3RhbmNlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YCwKICAtIGBhcnJheUJhc2VUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5PYmplY3RNb2RlbC5Db2xsZWN0aW9uYCwKICAtIGBkaWN0aW9uYXJ5QmFzZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAsCiAgLSBgcHJvcGVydHlTZXR0ZXJBY2Nlc3NNb2RpZmllcmAgLSBEZWZhdWx0IGlzIGBgLAogIC0gYGdlbmVyYXRlSW1tdXRhYmxlQXJyYXlQcm9wZXJ0aWVzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVJbW11dGFibGVEaWN0aW9uYXJ5UHJvcGVydGllc2AgLSBEZWZhdWx0IGlzIGZhbHNlLAogIC0gYGhhbmRsZVJlZmVyZW5jZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBqc29uU2VyaWFsaXplclNldHRpbmdzVHJhbnNmb3JtYXRpb25NZXRob2RgIC0gRGVmYXVsdCBpcyBudWxsLAogIC0gYGdlbmVyYXRlSnNvbk1ldGhvZHNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBlbmZvcmNlRmxhZ0VudW1zYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgaW5saW5lTmFtZWREaWN0aW9uYXJpZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBpbmxpbmVOYW1lZFR1cGxlc2AgLSBEZWZhdWx0IGlzIHRydWUsCiAgLSBgaW5saW5lTmFtZWRBcnJheXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBnZW5lcmF0ZU9wdGlvbmFsUHJvcGVydGllc0FzTnVsbGFibGVgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBnZW5lcmF0ZU51bGxhYmxlUmVmZXJlbmNlVHlwZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBnZW5lcmF0ZU5hdGl2ZVJlY29yZHNgIC0gRGVmYXVsdCBpcyBmYWxzZQogIC0gYGdlbmVyYXRlRGVmYXVsdFZhbHVlc2AgLSBEZWZhdWx0IGlzIHRydWUKICAtIGBpbmxpbmVOYW1lZEFueWAgLSBEZWZhdWx0IGlzIGZhbHNlCiAgLSBgZXhjbHVkZWRUeXBlTmFtZXNgIC0gRGVmYXVsdCBpcyBlbXB0eQoKCiMgVXNpbmcgdGhlIGdlbmVyYXRlZCBjb2RlCgpIZXJlJ3MgYW4gZXhhbXBsZSBnZW5lcmF0ZWQgb3V0cHV0IGZyb20gdGhlIFtTd2FnZ2VyIFBldHN0b3JlIGV4YW1wbGVdKGh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8pIHVzaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzCgoqKkNMSSBUb29sKioKCmBgYGJhc2gKJCByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiCmBgYAoKKipTb3VyY2UgR2VuZXJhdG9yICoqKi5yZWZpdHRlcioqKiBmaWxlKioKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuL29wZW5hcGkuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZSIKfQpgYGAKCioqT3V0cHV0KioKCmBgYGNzCnVzaW5nIFJlZml0Owp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRleHQuSnNvbi5TZXJpYWxpemF0aW9uOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwoKbmFtZXNwYWNlIFlvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlCnsKICAgIFtTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCiAgICBwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVN3YWdnZXJQZXRzdG9yZQogICAgewogICAgICAgIC8vLyA8c3VtbWFyeT5VcGRhdGUgYW4gZXhpc3RpbmcgcGV0PC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5VcGRhdGUgYW4gZXhpc3RpbmcgcGV0IGJ5IElkPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+VXBkYXRlIGFuIGV4aXN0ZW50IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5WYWxpZGF0aW9uIGV4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUHV0KCIvcGV0IildCiAgICAgICAgVGFzazxQZXQ+IFVwZGF0ZVBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+QWRkIGEgbmV3IHBldCB0byB0aGUgc3RvcmU8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+Q3JlYXRlIGEgbmV3IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUG9zdCgiL3BldCIpXQogICAgICAgIFRhc2s8UGV0PiBBZGRQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkZpbmRzIFBldHMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5NdWx0aXBsZSBzdGF0dXMgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGZvciBmaWx0ZXI8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBzdGF0dXMgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5U3RhdHVzKFtRdWVyeV0gU3RhdHVzPyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RmluZHMgUGV0cyBieSB0YWdzPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5NdWx0aXBsZSB0YWdzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzLiBVc2UgdGFnMSwgdGFnMiwgdGFnMyBmb3IgdGVzdGluZy48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWdzIj5UYWdzIHRvIGZpbHRlciBieTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHRhZyB2YWx1ZTwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5VGFncyhbUXVlcnkoQ29sbGVjdGlvbkZvcm1hdC5NdWx0aSldIElFbnVtZXJhYmxlPHN0cmluZz4gdGFncyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kIHBldCBieSBJRDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+UmV0dXJucyBhIHNpbmdsZSBwZXQ8L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+SUQgb2YgcGV0IHRvIHJldHVybjwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+UGV0IG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrPFBldD4gR2V0UGV0QnlJZChsb25nIHBldElkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZXMgYSBwZXQgaW4gdGhlIHN0b3JlIHdpdGggZm9ybSBkYXRhPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+TmFtZSBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1cyI+U3RhdHVzIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkLjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbUG9zdCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzayBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RGVsZXRlcyBhIHBldDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5QZXQgaWQgdG8gZGVsZXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgICAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgcGV0IHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtEZWxldGUoIi9wZXQve3BldElkfSIpXQogICAgICAgIFRhc2sgRGVsZXRlUGV0KGxvbmcgcGV0SWQsIFtIZWFkZXIoImFwaV9rZXkiKV0gc3RyaW5nIGFwaV9rZXkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+dXBsb2FkcyBhbiBpbWFnZTwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5JRCBvZiBwZXQgdG8gdXBkYXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFkZGl0aW9uYWxNZXRhZGF0YSI+QWRkaXRpb25hbCBNZXRhZGF0YTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtQb3N0KCIvcGV0L3twZXRJZH0vdXBsb2FkSW1hZ2UiKV0KICAgICAgICBUYXNrPEFwaVJlc3BvbnNlPiBVcGxvYWRGaWxlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIGFkZGl0aW9uYWxNZXRhZGF0YSwgIFN0cmVhbVBhcnQgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5SZXR1cm5zIHBldCBpbnZlbnRvcmllcyBieSBzdGF0dXM8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXM8L3JlbWFya3M+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvc3RvcmUvaW52ZW50b3J5IildCiAgICAgICAgVGFzazxJRGljdGlvbmFyeTxzdHJpbmcsIGludD4+IEdldEludmVudG9yeSgpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+UGxhY2UgYW4gb3JkZXIgZm9yIGEgcGV0PC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5QbGFjZSBhIG5ldyBvcmRlciBpbiB0aGUgc3RvcmU8L3JlbWFya3M+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIGlucHV0PC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUG9zdCgiL3N0b3JlL29yZGVyIildCiAgICAgICAgVGFzazxPcmRlcj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPD0gNSBvciA+IDEwLiBPdGhlciB2YWx1ZXMgd2lsbCBnZW5lcmF0ZWQgZXhjZXB0aW9uczwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9yZGVySWQiPklEIG9mIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvc3RvcmUvb3JkZXIve29yZGVySWR9IildCiAgICAgICAgVGFzazxPcmRlcj4gR2V0T3JkZXJCeUlkKGxvbmcgb3JkZXJJZCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgcHVyY2hhc2Ugb3JkZXIgYnkgSUQ8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPkZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8IDEwMDAuIEFueXRoaW5nIGFib3ZlIDEwMDAgb3Igbm9uaW50ZWdlcnMgd2lsbCBnZW5lcmF0ZSBBUEkgZXJyb3JzPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JkZXJJZCI+SUQgb2YgdGhlIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtEZWxldGUoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrIERlbGV0ZU9yZGVyKGxvbmcgb3JkZXJJZCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5DcmVhdGUgdXNlcjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGVkIHVzZXIgb2JqZWN0PC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veG1sIildCiAgICAgICAgW1Bvc3QoIi91c2VyIildCiAgICAgICAgVGFzayBDcmVhdGVVc2VyKFtCb2R5XSBVc2VyIGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+Q3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXk8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9yZW1hcmtzPgogICAgICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgICAgICBUYXNrPFVzZXI+IENyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dChbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSB1c2VyIG5hbWUgZm9yIGxvZ2luPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBhc3N3b3JkIj5UaGUgcGFzc3dvcmQgZm9yIGxvZ2luIGluIGNsZWFyIHRleHQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3VzZXIvbG9naW4iKV0KICAgICAgICBUYXNrPHN0cmluZz4gTG9naW5Vc2VyKFtRdWVyeV0gc3RyaW5nIHVzZXJuYW1lLCBbUXVlcnldIHN0cmluZyBwYXNzd29yZCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5Mb2dzIG91dCBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIHNlc3Npb248L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgICAgIFRhc2sgTG9nb3V0VXNlcigpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+R2V0IHVzZXIgYnkgdXNlciBuYW1lPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSBuYW1lIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZC4gVXNlIHVzZXIxIGZvciB0ZXN0aW5nLjwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+VXNlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrPFVzZXI+IEdldFVzZXJCeU5hbWUoc3RyaW5nIHVzZXJuYW1lKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5uYW1lIHRoYXQgbmVlZCB0byBiZSBkZWxldGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlVwZGF0ZSBhbiBleGlzdGVudCB1c2VyIGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIFVwZGF0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lLCBbQm9keV0gVXNlciBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSB1c2VyPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5UaGUgbmFtZSB0aGF0IG5lZWRzIHRvIGJlIGRlbGV0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkLjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtEZWxldGUoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIERlbGV0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lKTsKICAgIH0KfQpgYGAKCkhlcmUncyBhbiBleGFtcGxlIGdlbmVyYXRlZCBvdXRwdXQgZnJvbSB0aGUgW1N3YWdnZXIgUGV0c3RvcmUgZXhhbXBsZV0oaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pbykgY29uZmlndXJlZCB0byB3cmFwIHRoZSByZXR1cm4gdHlwZSBpbiBgSUFwaVJlc3BvbnNlPFQ+YAoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLXVzZS1hcGktcmVzcG9uc2UKYGBgCgoqKlNvdXJjZSBHZW5lcmF0b3IgKioqLnJlZml0dGVyKioqIGZpbGUqKgoKYGBganNvbgp7CiAgIm9wZW5BcGlQYXRoIjogIi4vb3BlbmFwaS5qc29uIiwKICAibmFtZXNwYWNlIjogIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiwKICAicmV0dXJuSUFwaVJlc3BvbnNlIjogdHJ1ZQp9CmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uVGV4dC5Kc29uLlNlcmlhbGl6YXRpb247CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CgpuYW1lc3BhY2UgWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUKewogICAgW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KICAgIHB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJU3dhZ2dlclBldHN0b3JlCiAgICB7CiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPlVwZGF0ZSBhbiBleGlzdGluZyBwZXQgYnkgSWQ8L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5VcGRhdGUgYW4gZXhpc3RlbnQgcGV0IGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5QZXQgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+VmFsaWRhdGlvbiBleGNlcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtQdXQoIi9wZXQiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxQZXQ+PiBVcGRhdGVQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5BZGQgYSBuZXcgcGV0IHRvIHRoZSBzdG9yZTwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPkNyZWF0ZSBhIG5ldyBwZXQgaW4gdGhlIHN0b3JlPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjIwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW1Bvc3QoIi9wZXQiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxQZXQ+PiBBZGRQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkZpbmRzIFBldHMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5NdWx0aXBsZSBzdGF0dXMgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGZvciBmaWx0ZXI8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHN0YXR1cyB2YWx1ZTwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8SUNvbGxlY3Rpb248UGV0Pj4+IEZpbmRQZXRzQnlTdGF0dXMoW1F1ZXJ5XSBTdGF0dXM/IHN0YXR1cyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHRhZ3M8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPk11bHRpcGxlIHRhZ3MgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MuIFVzZSB0YWcxLCB0YWcyLCB0YWczIGZvciB0ZXN0aW5nLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRhZ3MiPlRhZ3MgdG8gZmlsdGVyIGJ5PC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjIwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB0YWcgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvcGV0L2ZpbmRCeVRhZ3MiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxJQ29sbGVjdGlvbjxQZXQ+Pj4gRmluZFBldHNCeVRhZ3MoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RmluZCBwZXQgYnkgSUQ8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBzaW5nbGUgcGV0PC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0byByZXR1cm48L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+UGV0IG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8UGV0Pj4gR2V0UGV0QnlJZChsb25nIHBldElkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZXMgYSBwZXQgaW4gdGhlIHN0b3JlIHdpdGggZm9ybSBkYXRhPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+TmFtZSBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1cyI+U3RhdHVzIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW1Bvc3QoIi9wZXQve3BldElkfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RGVsZXRlcyBhIHBldDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5QZXQgaWQgdG8gZGVsZXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgcGV0IHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZT4gRGVsZXRlUGV0KGxvbmcgcGV0SWQsIFtIZWFkZXIoImFwaV9rZXkiKV0gc3RyaW5nIGFwaV9rZXkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+dXBsb2FkcyBhbiBpbWFnZTwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5JRCBvZiBwZXQgdG8gdXBkYXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFkZGl0aW9uYWxNZXRhZGF0YSI+QWRkaXRpb25hbCBNZXRhZGF0YTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtQb3N0KCIvcGV0L3twZXRJZH0vdXBsb2FkSW1hZ2UiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxBcGlSZXNwb25zZT4+IFVwbG9hZEZpbGUobG9uZyBwZXRJZCwgW1F1ZXJ5XSBzdHJpbmcgYWRkaXRpb25hbE1ldGFkYXRhLCAgU3RyZWFtUGFydCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlJldHVybnMgcGV0IGludmVudG9yaWVzIGJ5IHN0YXR1czwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+UmV0dXJucyBhIG1hcCBvZiBzdGF0dXMgY29kZXMgdG8gcXVhbnRpdGllczwvcmVtYXJrcz4KICAgICAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi9zdG9yZS9pbnZlbnRvcnkiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxJRGljdGlvbmFyeTxzdHJpbmcsIGludD4+PiBHZXRJbnZlbnRvcnkoKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlBsYWNlIGFuIG9yZGVyIGZvciBhIHBldDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+UGxhY2UgYSBuZXcgb3JkZXIgaW4gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIGlucHV0PC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW1Bvc3QoIi9zdG9yZS9vcmRlciIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPE9yZGVyPj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPD0gNSBvciA+IDEwLiBPdGhlciB2YWx1ZXMgd2lsbCBnZW5lcmF0ZWQgZXhjZXB0aW9uczwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9yZGVySWQiPklEIG9mIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5PcmRlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvc3RvcmUvb3JkZXIve29yZGVySWR9IildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8T3JkZXI+PiBHZXRPcmRlckJ5SWQobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSBwdXJjaGFzZSBvcmRlciBieSBJRDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+Rm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDwgMTAwMC4gQW55dGhpbmcgYWJvdmUgMTAwMCBvciBub25pbnRlZ2VycyB3aWxsIGdlbmVyYXRlIEFQSSBlcnJvcnM8L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvcmRlcklkIj5JRCBvZiB0aGUgb3JkZXIgdGhhdCBuZWVkcyB0byBiZSBkZWxldGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5PcmRlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtEZWxldGUoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZT4gRGVsZXRlT3JkZXIobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPkNyZWF0ZWQgdXNlciBvYmplY3Q8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdC48L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veG1sIildCiAgICAgICAgW1Bvc3QoIi91c2VyIildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U+IENyZWF0ZVVzZXIoW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5DcmVhdGVzIGxpc3Qgb2YgdXNlcnMgd2l0aCBnaXZlbiBpbnB1dCBhcnJheTwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+Q3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXk8L3JlbWFya3M+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW1Bvc3QoIi91c2VyL2NyZWF0ZVdpdGhMaXN0IildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8VXNlcj4+IENyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dChbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSB1c2VyIG5hbWUgZm9yIGxvZ2luPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBhc3N3b3JkIj5UaGUgcGFzc3dvcmQgZm9yIGxvZ2luIGluIGNsZWFyIHRleHQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lL3Bhc3N3b3JkIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3VzZXIvbG9naW4iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxzdHJpbmc+PiBMb2dpblVzZXIoW1F1ZXJ5XSBzdHJpbmcgdXNlcm5hbWUsIFtRdWVyeV0gc3RyaW5nIHBhc3N3b3JkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkxvZ3Mgb3V0IGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIgc2Vzc2lvbjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQuPC9yZXR1cm5zPgogICAgICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBMb2dvdXRVc2VyKCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+VGhlIG5hbWUgdGhhdCBuZWVkcyB0byBiZSBmZXRjaGVkLiBVc2UgdXNlcjEgZm9yIHRlc3RpbmcuPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjIwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFVzZXI+PiBHZXRVc2VyQnlOYW1lKHN0cmluZyB1c2VybmFtZSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5VcGRhdGUgdXNlcjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+bmFtZSB0aGF0IG5lZWQgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5VcGRhdGUgYW4gZXhpc3RlbnQgdXNlciBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdC48L3JldHVybnM+CiAgICAgICAgW1B1dCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBVcGRhdGVVc2VyKHN0cmluZyB1c2VybmFtZSwgW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgdXNlcjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+VGhlIG5hbWUgdGhhdCBuZWVkcyB0byBiZSBkZWxldGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdXNlcm5hbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5Vc2VyIG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0RlbGV0ZSgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBEZWxldGVVc2VyKHN0cmluZyB1c2VybmFtZSk7CiAgICB9Cn0KYGBgCgpIZXJlJ3MgYW4gZXhhbXBsZSBnZW5lcmF0ZWQgb3V0cHV0IGZyb20gdGhlIFtTd2FnZ2VyIFBldHN0b3JlIGV4YW1wbGVdKGh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8pIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgYW4gaW50ZXJmYWNlIGZvciBlYWNoIGVuZHBvaW50CgoqKkNMSSBUb29sKioKCmBgYGJhc2gKJCByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiIC0tbXVsdGlwbGUtaW50ZXJmYWNlcyBCeUVuZHBvaW50CmBgYAoKKipTb3VyY2UgR2VuZXJhdG9yICoqKi5yZWZpdHRlcioqKiBmaWxlKioKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuL29wZW5hcGkuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZSIsCiAgIm11bHRpcGxlSW50ZXJmYWNlcyI6ICJCeUVuZHBvaW50Igp9CmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJVXBkYXRlUGV0RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+VXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZDwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+VXBkYXRlIGFuIGV4aXN0ZW50IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlZhbGlkYXRpb24gZXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUHV0KCIvcGV0IildCiAgICBUYXNrPFBldD4gRXhlY3V0ZShbQm9keV0gUGV0IGJvZHkpOwp9CgovLy8gPHN1bW1hcnk+QWRkIGEgbmV3IHBldCB0byB0aGUgc3RvcmU8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJQWRkUGV0RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGUgYSBuZXcgcGV0IGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+U3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW1Bvc3QoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKFtCb2R5XSBQZXQgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHN0YXR1czwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElGaW5kUGV0c0J5U3RhdHVzRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkZpbmRzIFBldHMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPk11bHRpcGxlIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3M8L3JlbWFya3M+CiAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1cyI+U3RhdHVzIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCBmb3IgZmlsdGVyPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHN0YXR1cyB2YWx1ZTwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICBUYXNrPElDb2xsZWN0aW9uPFBldD4+IEV4ZWN1dGUoW1F1ZXJ5XSBTdGF0dXM/IHN0YXR1cyk7Cn0KCi8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHRhZ3M8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRmluZFBldHNCeVRhZ3NFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+RmluZHMgUGV0cyBieSB0YWdzPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPk11bHRpcGxlIHRhZ3MgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MuIFVzZSB0YWcxLCB0YWcyLCB0YWczIGZvciB0ZXN0aW5nLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0idGFncyI+VGFncyB0byBmaWx0ZXIgYnk8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdGFnIHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICBUYXNrPElDb2xsZWN0aW9uPFBldD4+IEV4ZWN1dGUoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwp9CgovLy8gPHN1bW1hcnk+RmluZCBwZXQgYnkgSUQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0UGV0QnlJZEVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5GaW5kIHBldCBieSBJRDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5SZXR1cm5zIGEgc2luZ2xlIHBldDwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0byByZXR1cm48L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9wZXQve3BldElkfSIpXQogICAgVGFzazxQZXQ+IEV4ZWN1dGUobG9uZyBwZXRJZCk7Cn0KCi8vLyA8c3VtbWFyeT5VcGRhdGVzIGEgcGV0IGluIHRoZSBzdG9yZSB3aXRoIGZvcm0gZGF0YTwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVQZXRXaXRoRm9ybUVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5VcGRhdGVzIGEgcGV0IGluIHRoZSBzdG9yZSB3aXRoIGZvcm0gZGF0YTwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJuYW1lIj5OYW1lIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJzdGF0dXMiPlN0YXR1cyBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkLjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIGlucHV0PC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW1Bvc3QoIi9wZXQve3BldElkfSIpXQogICAgVGFzayBFeGVjdXRlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIG5hbWUsIFtRdWVyeV0gc3RyaW5nIHN0YXR1cyk7Cn0KCi8vLyA8c3VtbWFyeT5EZWxldGVzIGEgcGV0PC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSURlbGV0ZVBldEVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5EZWxldGVzIGEgcGV0PC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+UGV0IGlkIHRvIGRlbGV0ZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBwZXQgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2sgRXhlY3V0ZShsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKfQoKLy8vIDxzdW1tYXJ5PnVwbG9hZHMgYW4gaW1hZ2U8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJVXBsb2FkRmlsZUVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT51cGxvYWRzIGFuIGltYWdlPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+SUQgb2YgcGV0IHRvIHVwZGF0ZTwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImFkZGl0aW9uYWxNZXRhZGF0YSI+QWRkaXRpb25hbCBNZXRhZGF0YTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+CiAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvcmV0dXJucz4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtQb3N0KCIvcGV0L3twZXRJZH0vdXBsb2FkSW1hZ2UiKV0KICAgIFRhc2s8QXBpUmVzcG9uc2U+IEV4ZWN1dGUobG9uZyBwZXRJZCwgW1F1ZXJ5XSBzdHJpbmcgYWRkaXRpb25hbE1ldGFkYXRhLCAgU3RyZWFtUGFydCBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PlJldHVybnMgcGV0IGludmVudG9yaWVzIGJ5IHN0YXR1czwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElHZXRJbnZlbnRvcnlFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+UmV0dXJucyBwZXQgaW52ZW50b3JpZXMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXM8L3JlbWFya3M+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9zdG9yZS9pbnZlbnRvcnkiKV0KICAgIFRhc2s8SURpY3Rpb25hcnk8c3RyaW5nLCBpbnQ+PiBFeGVjdXRlKCk7Cn0KCi8vLyA8c3VtbWFyeT5QbGFjZSBhbiBvcmRlciBmb3IgYSBwZXQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJUGxhY2VPcmRlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5QbGFjZSBhbiBvcmRlciBmb3IgYSBwZXQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+UGxhY2UgYSBuZXcgb3JkZXIgaW4gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgaW5wdXQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUG9zdCgiL3N0b3JlL29yZGVyIildCiAgICBUYXNrPE9yZGVyPiBFeGVjdXRlKFtCb2R5XSBPcmRlciBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PkZpbmQgcHVyY2hhc2Ugb3JkZXIgYnkgSUQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0T3JkZXJCeUlkRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkZpbmQgcHVyY2hhc2Ugb3JkZXIgYnkgSUQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+Rm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDw9IDUgb3IgPiAxMC4gT3RoZXIgdmFsdWVzIHdpbGwgZ2VuZXJhdGVkIGV4Y2VwdGlvbnM8L3JlbWFya3M+CiAgICAvLy8gPHBhcmFtIG5hbWU9Im9yZGVySWQiPklEIG9mIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzazxPcmRlcj4gRXhlY3V0ZShsb25nIG9yZGVySWQpOwp9CgovLy8gPHN1bW1hcnk+RGVsZXRlIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSURlbGV0ZU9yZGVyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSBwdXJjaGFzZSBvcmRlciBieSBJRDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9yczwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JkZXJJZCI+SUQgb2YgdGhlIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0RlbGV0ZSgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzayBFeGVjdXRlKGxvbmcgb3JkZXJJZCk7Cn0KCi8vLyA8c3VtbWFyeT5DcmVhdGUgdXNlcjwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElDcmVhdGVVc2VyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGVkIHVzZXIgb2JqZWN0PC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veG1sIildCiAgICBbUG9zdCgiL3VzZXIiKV0KICAgIFRhc2sgRXhlY3V0ZShbQm9keV0gVXNlciBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUNyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dEVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5DcmVhdGVzIGxpc3Qgb2YgdXNlcnMgd2l0aCBnaXZlbiBpbnB1dCBhcnJheTwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5DcmVhdGVzIGxpc3Qgb2YgdXNlcnMgd2l0aCBnaXZlbiBpbnB1dCBhcnJheTwvcmVtYXJrcz4KICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgIFRhc2s8VXNlcj4gRXhlY3V0ZShbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUxvZ2luVXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+VGhlIHVzZXIgbmFtZSBmb3IgbG9naW48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJwYXNzd29yZCI+VGhlIHBhc3N3b3JkIGZvciBsb2dpbiBpbiBjbGVhciB0ZXh0PC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lL3Bhc3N3b3JkIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3VzZXIvbG9naW4iKV0KICAgIFRhc2s8c3RyaW5nPiBFeGVjdXRlKFtRdWVyeV0gc3RyaW5nIHVzZXJuYW1lLCBbUXVlcnldIHN0cmluZyBwYXNzd29yZCk7Cn0KCi8vLyA8c3VtbWFyeT5Mb2dzIG91dCBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIHNlc3Npb248L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJTG9nb3V0VXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5Mb2dzIG91dCBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIHNlc3Npb248L3N1bW1hcnk+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgVGFzayBFeGVjdXRlKCk7Cn0KCi8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0VXNlckJ5TmFtZUVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CiAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5UaGUgbmFtZSB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuIFVzZSB1c2VyMSBmb3IgdGVzdGluZy48L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdXNlcm5hbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgVGFzazxVc2VyPiBFeGVjdXRlKHN0cmluZyB1c2VybmFtZSk7Cn0KCi8vLyA8c3VtbWFyeT5VcGRhdGUgdXNlcjwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVVc2VyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+bmFtZSB0aGF0IG5lZWQgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlVwZGF0ZSBhbiBleGlzdGVudCB1c2VyIGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgIFRhc2sgRXhlY3V0ZShzdHJpbmcgdXNlcm5hbWUsIFtCb2R5XSBVc2VyIGJvZHkpOwp9CgovLy8gPHN1bW1hcnk+RGVsZXRlIHVzZXI8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRGVsZXRlVXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgdXNlcjwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSBuYW1lIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+VXNlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbRGVsZXRlKCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrIEV4ZWN1dGUoc3RyaW5nIHVzZXJuYW1lKTsKfQpgYGAKCkhlcmUncyBhbiBleGFtcGxlIGdlbmVyYXRlZCBvdXRwdXQgZnJvbSB0aGUgW1N3YWdnZXIgUGV0c3RvcmUgZXhhbXBsZV0oaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pbykgY29uZmlndXJlZCB0byBnZW5lcmF0ZSBhbiBpbnRlcmZhY2Ugd2l0aCBkeW5hbWljIHF1ZXJ5c3RyaW5nIHBhcmVtZXRlcnMKCioqQ0xJIFRvb2wqKgoKYGBgYmFzaAokIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbmFtZXNwYWNlICJZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZSIgLS11c2UtZHluYW1pYy1xdWVyeXN0cmluZy1wYXJhbWV0ZXJzCmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElTd2FnZ2VyUGV0c3RvcmVPcGVuQVBJMzAKewogICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+VXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZDwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+VXBkYXRlIGFuIGV4aXN0ZW50IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlZhbGlkYXRpb24gZXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUHV0KCIvcGV0IildCiAgICBUYXNrPFBldD4gVXBkYXRlUGV0KFtCb2R5XSBQZXQgYm9keSk7CgogICAgLy8vIDxzdW1tYXJ5PkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGUgYSBuZXcgcGV0IGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+U3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW1Bvc3QoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBBZGRQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAvLy8gPHN1bW1hcnk+RmluZHMgUGV0cyBieSBzdGF0dXM8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+TXVsdGlwbGUgc3RhdHVzIHZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nczwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGZvciBmaWx0ZXI8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgc3RhdHVzIHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvcGV0L2ZpbmRCeVN0YXR1cyIpXQogICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5U3RhdHVzKFtRdWVyeV0gU3RhdHVzPyBzdGF0dXMpOwoKICAgIC8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHRhZ3M8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+TXVsdGlwbGUgdGFncyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncy4gVXNlIHRhZzEsIHRhZzIsIHRhZzMgZm9yIHRlc3RpbmcuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWdzIj5UYWdzIHRvIGZpbHRlciBieTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB0YWcgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9wZXQvZmluZEJ5VGFncyIpXQogICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5VGFncyhbUXVlcnkoQ29sbGVjdGlvbkZvcm1hdC5NdWx0aSldIElFbnVtZXJhYmxlPHN0cmluZz4gdGFncyk7CgogICAgLy8vIDxzdW1tYXJ5PkZpbmQgcGV0IGJ5IElEPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBzaW5nbGUgcGV0PC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+SUQgb2YgcGV0IHRvIHJldHVybjwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+UGV0IG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3BldC97cGV0SWR9IildCiAgICBUYXNrPFBldD4gR2V0UGV0QnlJZChsb25nIHBldElkKTsKCiAgICAvLy8gPHN1bW1hcnk+VXBkYXRlcyBhIHBldCBpbiB0aGUgc3RvcmUgd2l0aCBmb3JtIGRhdGE8L3N1bW1hcnk+CiAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5JRCBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icXVlcnlQYXJhbXMiPlRoZSBkeW5hbWljIHF1ZXJ5c3RyaW5nIHBhcmFtZXRlciB3cmFwcGluZyBhbGwgb3RoZXJzLjwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtQb3N0KCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2sgVXBkYXRlUGV0V2l0aEZvcm0obG9uZyBwZXRJZCwgW1F1ZXJ5XSBVcGRhdGVQZXRXaXRoRm9ybVF1ZXJ5UGFyYW1zIHF1ZXJ5UGFyYW1zKTsKCiAgICAvLy8gPHN1bW1hcnk+RGVsZXRlcyBhIHBldDwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPlBldCBpZCB0byBkZWxldGU8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgcGV0IHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0RlbGV0ZSgiL3BldC97cGV0SWR9IildCiAgICBUYXNrIERlbGV0ZVBldChsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKCiAgICAvLy8gPHN1bW1hcnk+dXBsb2FkcyBhbiBpbWFnZTwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0byB1cGRhdGU8L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJhZGRpdGlvbmFsTWV0YWRhdGEiPkFkZGl0aW9uYWwgTWV0YWRhdGE8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPgogICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L3JldHVybnM+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUG9zdCgiL3BldC97cGV0SWR9L3VwbG9hZEltYWdlIildCiAgICBUYXNrPEFwaVJlc3BvbnNlPiBVcGxvYWRGaWxlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIGFkZGl0aW9uYWxNZXRhZGF0YSwgIFN0cmVhbVBhcnQgYm9keSk7CgogICAgLy8vIDxzdW1tYXJ5PlJldHVybnMgcGV0IGludmVudG9yaWVzIGJ5IHN0YXR1czwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5SZXR1cm5zIGEgbWFwIG9mIHN0YXR1cyBjb2RlcyB0byBxdWFudGl0aWVzPC9yZW1hcmtzPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvc3RvcmUvaW52ZW50b3J5IildCiAgICBUYXNrPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4gR2V0SW52ZW50b3J5KCk7CgogICAgLy8vIDxzdW1tYXJ5PlBsYWNlIGFuIG9yZGVyIGZvciBhIHBldDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5QbGFjZSBhIG5ldyBvcmRlciBpbiB0aGUgc3RvcmU8L3JlbWFya3M+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtQb3N0KCIvc3RvcmUvb3JkZXIiKV0KICAgIFRhc2s8T3JkZXI+IFBsYWNlT3JkZXIoW0JvZHldIE9yZGVyIGJvZHkpOwoKICAgIC8vLyA8c3VtbWFyeT5GaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8PSA1IG9yID4gMTAuIE90aGVyIHZhbHVlcyB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJvcmRlcklkIj5JRCBvZiBvcmRlciB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQ8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPk9yZGVyIG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzazxPcmRlcj4gR2V0T3JkZXJCeUlkKGxvbmcgb3JkZXJJZCk7CgogICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSBwdXJjaGFzZSBvcmRlciBieSBJRDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9yczwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JkZXJJZCI+SUQgb2YgdGhlIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0RlbGV0ZSgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzayBEZWxldGVPcmRlcihsb25nIG9yZGVySWQpOwoKICAgIC8vLyA8c3VtbWFyeT5DcmVhdGUgdXNlcjwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+Q3JlYXRlZCB1c2VyIG9iamVjdDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIGFwcGxpY2F0aW9uL3htbCIpXQogICAgW1Bvc3QoIi91c2VyIildCiAgICBUYXNrIENyZWF0ZVVzZXIoW0JvZHldIFVzZXIgYm9keSk7CgogICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9yZW1hcmtzPgogICAgLy8vIDxyZXR1cm5zPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtQb3N0KCIvdXNlci9jcmVhdGVXaXRoTGlzdCIpXQogICAgVGFzazxVc2VyPiBDcmVhdGVVc2Vyc1dpdGhMaXN0SW5wdXQoW0JvZHldIElFbnVtZXJhYmxlPFVzZXI+IGJvZHkpOwoKICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJxdWVyeVBhcmFtcyI+VGhlIGR5bmFtaWMgcXVlcnlzdHJpbmcgcGFyYW1ldGVyIHdyYXBwaW5nIGFsbCBvdGhlcnMuPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lL3Bhc3N3b3JkIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvdXNlci9sb2dpbiIpXQogICAgVGFzazxzdHJpbmc+IExvZ2luVXNlcihbUXVlcnldIExvZ2luVXNlclF1ZXJ5UGFyYW1zIHF1ZXJ5UGFyYW1zKTsKCiAgICAvLy8gPHN1bW1hcnk+TG9ncyBvdXQgY3VycmVudCBsb2dnZWQgaW4gdXNlciBzZXNzaW9uPC9zdW1tYXJ5PgogICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICBbR2V0KCIvdXNlci9sb2dvdXQiKV0KICAgIFRhc2sgTG9nb3V0VXNlcigpOwoKICAgIC8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CiAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5UaGUgbmFtZSB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuIFVzZSB1c2VyMSBmb3IgdGVzdGluZy48L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdXNlcm5hbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrPFVzZXI+IEdldFVzZXJCeU5hbWUoc3RyaW5nIHVzZXJuYW1lKTsKCiAgICAvLy8gPHN1bW1hcnk+VXBkYXRlIHVzZXI8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5uYW1lIHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZDwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlVwZGF0ZSBhbiBleGlzdGVudCB1c2VyIGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgIFRhc2sgVXBkYXRlVXNlcihzdHJpbmcgdXNlcm5hbWUsIFtCb2R5XSBVc2VyIGJvZHkpOwoKICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgdXNlcjwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSBuYW1lIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+VXNlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbRGVsZXRlKCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrIERlbGV0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lKTsKCgp9ICAgIAoKcHVibGljIGNsYXNzIFVwZGF0ZVBldFdpdGhGb3JtUXVlcnlQYXJhbXMKewogICAgICAgIAogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIE5hbWUgb2YgcGV0IHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZAogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtRdWVyeV0gCiAgICBwdWJsaWMgc3RyaW5nIE5hbWUgeyBnZXQ7IHNldDsgfQoKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBTdGF0dXMgb2YgcGV0IHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZAogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtRdWVyeV0gCiAgICBwdWJsaWMgc3RyaW5nIFN0YXR1cyB7IGdldDsgc2V0OyB9Cgp9CgpwdWJsaWMgY2xhc3MgTG9naW5Vc2VyUXVlcnlQYXJhbXMKewogICAgICAgIAogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFRoZSB1c2VyIG5hbWUgZm9yIGxvZ2luCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW1F1ZXJ5XSAKICAgIHB1YmxpYyBzdHJpbmcgVXNlcm5hbWUgeyBnZXQ7IHNldDsgfQoKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBUaGUgcGFzc3dvcmQgZm9yIGxvZ2luIGluIGNsZWFyIHRleHQKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbUXVlcnldIAogICAgcHVibGljIHN0cmluZyBQYXNzd29yZCB7IGdldDsgc2V0OyB9Cgp9CmBgYAoKIyMgUmVzdFNlcnZpY2UKCkhlcmUncyBhbiBleGFtcGxlIHVzYWdlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBhYm92ZQoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKCm5hbWVzcGFjZSBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCmludGVybmFsIGNsYXNzIFByb2dyYW0KewogICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgVGFzayBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIGNsaWVudCA9IFJlc3RTZXJ2aWNlLkZvcjxJU3dhZ2dlclBldHN0b3JlPigiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiKTsKICAgICAgICB2YXIgcGV0ID0gYXdhaXQgY2xpZW50LkdldFBldEJ5SWQoMSk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIjIyBVc2luZyBUYXNrPFQ+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJOYW1lOiB7cGV0Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3BldC5DYXRlZ29yeS5OYW1lfSIpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiU3RhdHVzOiB7cGV0LlN0YXR1c30iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwoKICAgICAgICB2YXIgY2xpZW50MiA9IFJlc3RTZXJ2aWNlLkZvcjxXaXRoQXBpUmVzcG9uc2UuSVN3YWdnZXJQZXRzdG9yZT4oImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIik7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgY2xpZW50Mi5HZXRQZXRCeUlkKDIpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJIVFRQIFN0YXR1cyBDb2RlOiB7cmVzcG9uc2UuU3RhdHVzQ29kZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIk5hbWU6IHtyZXNwb25zZS5Db250ZW50Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3Jlc3BvbnNlLkNvbnRlbnQuQ2F0ZWdvcnkuTmFtZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIlN0YXR1czoge3Jlc3BvbnNlLkNvbnRlbnQuU3RhdHVzfSIpOwogICAgfQp9CmBgYAoKVGhlIGBSZXN0U2VydmljZWAgY2xhc3MgZ2VuZXJhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGBJU3dhZ2dlclBldHN0b3JlYCB0aGF0IHVzZXMgYEh0dHBDbGllbnRgIHRvIG1ha2UgaXRzIGNhbGxzLiAKClRoZSBjb2RlIGFib3ZlIHdoZW4gcnVuIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGAKIyMgVXNpbmcgVGFzazxUPiBhcyByZXR1cm4gdHlwZSAjIwpOYW1lOiBHYXRpdG90b3RvdG8KQ2F0ZWdvcnk6IENoYXVjaXRvClN0YXR1czogU29sZAoKIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjCkhUVFAgU3RhdHVzIENvZGU6IE9LCk5hbWU6IEdhdGl0b3RvdG90bwpDYXRlZ29yeTogQ2hhdWNpdG8KU3RhdHVzOiBTb2xkCmBgYAoKIyMgQVNQLk5FVCBDb3JlIGFuZCBIdHRwQ2xpZW50RmFjdG9yeQoKSGVyZSdzIGFuIGV4YW1wbGUgTWluaW1hbCBBUEkgd2l0aCB0aGUgW2BSZWZpdC5IdHRwQ2xpZW50RmFjdG9yeWBdKGh0dHBzOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9SZWZpdC5IdHRwQ2xpZW50RmFjdG9yeSkgbGlicmFyeToKCmBgYGNzCnVzaW5nIFJlZml0Owp1c2luZyBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCnZhciBidWlsZGVyID0gV2ViQXBwbGljYXRpb24uQ3JlYXRlQnVpbGRlcihhcmdzKTsKYnVpbGRlci5TZXJ2aWNlcy5BZGRFbmRwb2ludHNBcGlFeHBsb3JlcigpOwpidWlsZGVyLlNlcnZpY2VzLkFkZFN3YWdnZXJHZW4oKTsKYnVpbGRlci5TZXJ2aWNlcwogICAgLkFkZFJlZml0Q2xpZW50PElTd2FnZ2VyUGV0c3RvcmU+KCkKICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpOwoKdmFyIGFwcCA9IGJ1aWxkZXIuQnVpbGQoKTsKYXBwLk1hcEdldCgKICAgICAgICAiL3BldC97aWQ6bG9uZ30iLAogICAgICAgIGFzeW5jIChJU3dhZ2dlclBldHN0b3JlIHBldHN0b3JlLCBsb25nIGlkKSA9PgogICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLk9rKGF3YWl0IHBldHN0b3JlLkdldFBldEJ5SWQoaWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoUmVmaXQuQXBpRXhjZXB0aW9uIGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLlN0YXR1c0NvZGUoKGludCllLlN0YXR1c0NvZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIC5XaXRoTmFtZSgiR2V0UGV0QnlJZCIpCiAgICAuV2l0aE9wZW5BcGkoKTsKCmFwcC5Vc2VIdHRwc1JlZGlyZWN0aW9uKCk7CmFwcC5Vc2VTd2FnZ2VyVUkoKTsKYXBwLlVzZVN3YWdnZXIoKTsKYXBwLlJ1bigpOwpgYGAKCgouTkVUIENvcmUgc3VwcG9ydHMgcmVnaXN0ZXJpbmcgdGhlIGdlbmVyYXRlZCBgSVN3YWdnZXJQZXRzdG9yZWAgaW50ZXJmYWNlIHZpYSBgSHR0cENsaWVudEZhY3RvcnlgCgpUaGUgZm9sbG93aW5nIHJlcXVlc3QgdG8gdGhlIEFQSSBhYm92ZQpgYGBzaGVsbAokIGN1cmwgLVggJ0dFVCcgJ2h0dHBzOi8vbG9jYWxob3N0OjUwMDEvcGV0LzEnIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nCmBgYAoKUmV0dXJucyBhIHJlc3BvbnNlIHRoYXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKYGBganNvbgp7CiAgImlkIjogMSwKICAibmFtZSI6ICJTcGVjaWFsX2NoYXJfb3duZXJfIUAjJF4mKClgLnRlc3RpbmciLAogICJwaG90b1VybHMiOiBbCiAgICAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9yZXNvdXJjZXMvcGhvdG9zLzYyMzM4OTA5NS5qcGciCiAgXSwKICAidGFncyI6IFtdLAogICJzdGF0dXMiOiAiU29sZCIKfQpgYGAKCiMjIERlcGVuZGVuY3kgSW5qZWN0aW9uCgpSZWZpdHRlciBzdXBwb3J0cyBnZW5lcmF0aW5nIGJvb3RzdHJhcHBpbmcgY29kZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBjb252ZW5pZW50bHkgY29uZmlndXJlIGFsbCBnZW5lcmF0ZWQgUmVmaXQgaW50ZXJmYWNlcyBieSBjYWxsaW5nIGEgc2luZ2xlIGV4dGVuc2lvbiBtZXRob2QgdG8gYElTZXJ2aWNlQ29sbGVjdGlvbmAuCgpUaGlzIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZSBsaWtlIHRoaXM6CgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi4vT3BlbkFQSS92My4wL3BldHN0b3JlLmpzb24iLAogICJuYW1lc3BhY2UiOiAiUGV0c3RvcmUiLAogICJkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3MiOiB7CiAgICAiYmFzZVVybCI6ICJodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92MyIsCiAgICAiaHR0cE1lc3NhZ2VIYW5kbGVycyI6IFsgIlRlbGVtZXRyeURlbGVnYXRpbmdIYW5kbGVyIiBdLAogICAgInRyYW5zaWVudEVycm9ySGFuZGxlciI6ICJQb2xseSIsCiAgICAibWF4UmV0cnlDb3VudCI6IDMsCiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUKICB9Cn0KYGBgCgp3aGljaCB3aWxsIGdlbmVyYXRlIGFuIGV4dGVuc2lvbiBtZXRob2QgdG8gYElTZXJ2aWNlQ29sbGVjdGlvbmAgY2FsbGVkIGBDb25maWd1cmVSZWZpdENsaWVudHMoKWAuIFRoZSBnZW5lcmF0ZWQgZXh0ZW5zaW9uIG1ldGhvZCBkZXBlbmRzIG9uIFtgUmVmaXQuSHR0cENsaWVudEZhY3RvcnlgXShodHRwczovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvUmVmaXQuSHR0cENsaWVudEZhY3RvcnkpIGxpYnJhcnkgYW5kIGxvb2tzIGxpa2UgdGhpczoKCmBgYGNzCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVJlZml0Q2xpZW50cygKICAgIHRoaXMgSVNlcnZpY2VDb2xsZWN0aW9uIHNlcnZpY2VzLCAKICAgIEFjdGlvbjxJSHR0cENsaWVudEJ1aWxkZXI+PyBidWlsZGVyID0gZGVmYXVsdCwgCiAgICBSZWZpdFNldHRpbmdzPyBzZXR0aW5ncyA9IGRlZmF1bHQpCnsKICAgIHZhciBjbGllbnRCdWlsZGVySVN3YWdnZXJQZXRzdG9yZSA9IHNlcnZpY2VzCiAgICAgICAgLkFkZFJlZml0Q2xpZW50PElTd2FnZ2VyUGV0c3RvcmU+KHNldHRpbmdzKQogICAgICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpCiAgICAgICAgLkFkZEh0dHBNZXNzYWdlSGFuZGxlcjxUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlcj4oKTsKCiAgICBjbGllbnRCdWlsZGVySVN3YWdnZXJQZXRzdG9yZQogICAgICAgIC5BZGRQb2xpY3lIYW5kbGVyKAogICAgICAgICAgICBIdHRwUG9saWN5RXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgLkhhbmRsZVRyYW5zaWVudEh0dHBFcnJvcigpCiAgICAgICAgICAgICAgICAuV2FpdEFuZFJldHJ5QXN5bmMoCiAgICAgICAgICAgICAgICAgICAgQmFja29mZi5EZWNvcnJlbGF0ZWRKaXR0ZXJCYWNrb2ZmVjIoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVTcGFuLkZyb21TZWNvbmRzKDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgIDMpKSk7CgogICAgYnVpbGRlcj8uSW52b2tlKGNsaWVudEJ1aWxkZXJJU3dhZ2dlclBldHN0b3JlKTsKCiAgICByZXR1cm4gc2VydmljZXM7Cn0KYGBgCgpUaGlzIGNvbWVzIGluIGhhbmR5IGVzcGVjaWFsbHkgd2hlbiBnZW5lcmF0aW5nIG11bHRpcGxlIGludGVyZmFjZXMsIGJ5IHRhZyBvciBlbmRwb2ludC4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZQoKYGBganNvbgp7CiAgIm9wZW5BcGlQYXRoIjogIi4uL09wZW5BUEkvdjMuMC9wZXRzdG9yZS5qc29uIiwKICAibmFtZXNwYWNlIjogIlBldHN0b3JlIiwKICAibXVsdGlwbGVJbnRlcmZhY2VzIjogIkJ5VGFnIiwKICAiZGVwZW5kZW5jeUluamVjdGlvblNldHRpbmdzIjogewogICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiLAogICAgImh0dHBNZXNzYWdlSGFuZGxlcnMiOiBbICJUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlciIgXSwKICAgICJ0cmFuc2llbnRFcnJvckhhbmRsZXIiOiAiUG9sbHkiLAogICAgIm1heFJldHJ5Q291bnQiOiAzLAogICAgImZpcnN0QmFja29mZlJldHJ5SW5TZWNvbmRzIjogMC41CiAgfQp9CmBgYAoKV2lsbCBnZW5lcmF0ZSBhIHNpbmdsZSBgQ29uZmlndXJlUmVmaXRDbGllbnRzKClgIGV4dGVuc2lvbiBtZXRob2RzIHRoYXQgbWF5IGNvbnRhaW4gZGVwZW5kZW5jeSBpbmplY3Rpb24gY29uZmlndXJhdGlvbiBjb2RlIGZvciBtdWx0aXBsZSBpbnRlcmZhY2VzIGxpa2UgdGhpcwoKYGBgY3NoYXJwCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVJlZml0Q2xpZW50cygKICAgIHRoaXMgSVNlcnZpY2VDb2xsZWN0aW9uIHNlcnZpY2VzLCAKICAgIEFjdGlvbjxJSHR0cENsaWVudEJ1aWxkZXI+PyBidWlsZGVyID0gZGVmYXVsdCwgCiAgICBSZWZpdFNldHRpbmdzPyBzZXR0aW5ncyA9IGRlZmF1bHQpCnsKICAgIHZhciBjbGllbnRCdWlsZGVySVBldEFwaSA9IHNlcnZpY2VzCiAgICAgICAgLkFkZFJlZml0Q2xpZW50PElQZXRBcGk+KHNldHRpbmdzKQogICAgICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpCiAgICAgICAgLkFkZEh0dHBNZXNzYWdlSGFuZGxlcjxUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlcj4oKTsKCiAgICBjbGllbnRCdWlsZGVySVBldEFwaQogICAgICAgIC5BZGRQb2xpY3lIYW5kbGVyKAogICAgICAgICAgICBIdHRwUG9saWN5RXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgLkhhbmRsZVRyYW5zaWVudEh0dHBFcnJvcigpCiAgICAgICAgICAgICAgICAuV2FpdEFuZFJldHJ5QXN5bmMoCiAgICAgICAgICAgICAgICAgICAgQmFja29mZi5EZWNvcnJlbGF0ZWRKaXR0ZXJCYWNrb2ZmVjIoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVTcGFuLkZyb21TZWNvbmRzKDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgIDMpKSk7CgogICAgYnVpbGRlcj8uSW52b2tlKGNsaWVudEJ1aWxkZXJJUGV0QXBpKTsKCiAgICB2YXIgY2xpZW50QnVpbGRlcklTdG9yZUFwaSA9IHNlcnZpY2VzCiAgICAgICAgLkFkZFJlZml0Q2xpZW50PElTdG9yZUFwaT4oc2V0dGluZ3MpCiAgICAgICAgLkNvbmZpZ3VyZUh0dHBDbGllbnQoYyA9PiBjLkJhc2VBZGRyZXNzID0gbmV3IFVyaSgiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiKSkKICAgICAgICAuQWRkSHR0cE1lc3NhZ2VIYW5kbGVyPFRlbGVtZXRyeURlbGVnYXRpbmdIYW5kbGVyPigpOwoKICAgIGNsaWVudEJ1aWxkZXJJU3RvcmVBcGkKICAgICAgICAuQWRkUG9saWN5SGFuZGxlcigKICAgICAgICAgICAgSHR0cFBvbGljeUV4dGVuc2lvbnMKICAgICAgICAgICAgICAgIC5IYW5kbGVUcmFuc2llbnRIdHRwRXJyb3IoKQogICAgICAgICAgICAgICAgLldhaXRBbmRSZXRyeUFzeW5jKAogICAgICAgICAgICAgICAgICAgIEJhY2tvZmYuRGVjb3JyZWxhdGVkSml0dGVyQmFja29mZlYyKAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAzKSkpOwoKICAgIGJ1aWxkZXI/Lkludm9rZShjbGllbnRCdWlsZGVySVN0b3JlQXBpKTsKCiAgICB2YXIgY2xpZW50QnVpbGRlcklVc2VyQXBpID0gc2VydmljZXMKICAgICAgICAuQWRkUmVmaXRDbGllbnQ8SVVzZXJBcGk+KHNldHRpbmdzKQogICAgICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpCiAgICAgICAgLkFkZEh0dHBNZXNzYWdlSGFuZGxlcjxUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlcj4oKTsKCiAgICBjbGllbnRCdWlsZGVySVVzZXJBcGkKICAgICAgICAuQWRkUG9saWN5SGFuZGxlcigKICAgICAgICAgICAgSHR0cFBvbGljeUV4dGVuc2lvbnMKICAgICAgICAgICAgICAgIC5IYW5kbGVUcmFuc2llbnRIdHRwRXJyb3IoKQogICAgICAgICAgICAgICAgLldhaXRBbmRSZXRyeUFzeW5jKAogICAgICAgICAgICAgICAgICAgIEJhY2tvZmYuRGVjb3JyZWxhdGVkSml0dGVyQmFja29mZlYyKAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAzKSkpOwoKICAgIGJ1aWxkZXI/Lkludm9rZShjbGllbnRCdWlsZGVySVVzZXJBcGkpOwoKICAgIHJldHVybiBzZXJ2aWNlczsKfQpgYGAKClBlcnNvbmFsbHksIHRoZXkgSSB1c2UgUmVmaXR0ZXIgaXMgdG8gZ2VuZXJhdGUgYW4gaW50ZXJmYWNlIHBlciBlbmRwb2ludCwgc28gd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIGEgbGFyZ2UgYW5kIGNvbXBsZXggQVBJLCBJIG1pZ2h0IGhhdmUgc2V2ZXJhbCBpbnRlcmZhY2VzLgoKIyMgQXBpenIKCltBcGl6cl0oaHR0cHM6Ly93d3cuYXBpenIubmV0KSBpcyBhIFJlZml0IGNsaWVudCBtYW5hZ2VyIHRoYXQgcHJvdmlkZXMgYSBzZXQgb2YgZmVhdHVyZXMgdG8gZW5oYW5jZSByZXF1ZXN0aW5nIGV4cGVyaWVuY2Ugd2l0aCByZXNpbGllbmNlLCBjYWNoaW5nLCBwcmlvcml0eSwgbWVkaWF0aW9uLCBtYXBwaW5nLCBsb2dnaW5nLCBhdXRoZW50aWNhdGlvbiwgZmlsZSB0cmFuc2ZlciBjYXBhYmlsaXRpZXMgYW5kIG1hbnkgbW9yZS4uLgoKIyMjIEdlbmVyYXRpbmcgdGhlIGludGVyZmFjZXMKClJlZml0dGVyIHN1cHBvcnRzIGdlbmVyYXRpbmcgQXBpenIgZm9ybWF0dGVkIFJlZml0IGludGVyZmFjZXMgdGhhdCBjYW4gYmUgbWFuYWdlZCB0aGVuIGJ5IEFwaXpyICh2NispLgoKWW91IGNhbiBlbmFibGUgQXBpenIgZm9ybWF0dGVkIFJlZml0IGludGVyZmFjZSBnZW5lcmF0aW9uIGVpdGhlcjoKLSBXaXRoIHRoZSBgLS11c2UtYXBpenJgIGNvbW1hbmQgbGluZSBhcmd1bWVudAotIEJ5IHNldHRpbmcgdGhlIGBhcGl6clNldHRpbmdzYCBzZWN0aW9uIGluIHRoZSBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlCgpOb3RlIHRoYXQgYC0tdXNlLWFwaXpyYCB1c2VzIGRlZmF1bHQgQXBpenIgc2V0dGluZ3Mgd2l0aCBgd2l0aFJlcXVlc3RPcHRpb25zYCBzZXQgdG8gYHRydWVgIGFzIHJlY29tbWVuZGVkLCB3aGlsZSB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZSBhbGxvd3MgeW91IHRvIGNvbmZpZ3VyZSBpdCBkZWVwZXIuCgpJbiBib3RoIGNhc2VzLCBpdCB3aWxsIGZvcm1hdCB0aGUgZ2VuZXJhdGVkIFJlZml0IGludGVyZmFjZXMgdG8gYmUgQXBpenIgcmVhZHkgYnk6Ci0gQWRkaW5nIGEgZmluYWwgSUFwaXpyUmVxdWVzdE9wdGlvbnMgb3B0aW9ucyBwYXJhbWV0ZXIgdG8gYWxsIGdlbmVyYXRlZCBtZXRob2RzIChpZiBgd2l0aFJlcXVlc3RPcHRpb25zYCBpcyBzZXQgdG8gYHRydWVgKQotIFByb3ZpZGluZyBjYW5jZWxsYXRpb24gdG9rZW5zIGJ5IEFwaXpyIHJlcXVlc3Qgb3B0aW9ucyBpbnN0ZWFkIG9mIGEgZGVkaWNhdGVkIHBhcmFtZXRlciAoaWYgYHdpdGhSZXF1ZXN0T3B0aW9uc2AgaXMgc2V0IHRvIGB0cnVlYCkKLSBVc2luZyBtZXRob2Qgb3ZlcmxvYWRzIGluc3RlYWQgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyAobm90ZSB0aGF0IHNldHRpbmcgYHVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnNgIHRvIGB0cnVlYCBpbXByb3ZlIG92ZXJsb2FkaW5nIGV4cGVyaWVuY2UpCgpGcm9tIGhlcmUsIHlvdSdyZSBkZWZpbml0bHkgZnJlZSB0byB1c2UgdGhlIGZvcm1hdHRlZCBpbnRlcmZhY2Ugd2l0aCBBcGl6ciBieSByZWdpc3RlcmluZywgY29uZmlndXJpbmcgYW5kIHVzaW5nIGl0IGZvbGxvd2luZyB0aGUgW0FwaXpyIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmFwaXpyLm5ldCkuIEJ1dCBSZWZpdHRlciBjYW4gZ28gZnVydGhlciBieSBnZW5lcmF0aW5nIHNvbWUgaGVscGVycyB0byBtYWtlIHRoZSBjb25maWd1cmF0aW9uIGVhc2llci4KCiMjIyBHZW5lcmF0aW5nIHRoZSBoZWxwZXJzCgpSZWZpdHRlciBzdXBwb3J0cyBnZW5lcmF0aW5nIEFwaXpyICh2NispIGJvb3RzdHJhcHBpbmcgY29kZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBjb252ZW5pZW50bHkgY29uZmlndXJlIGFsbCBnZW5lcmF0ZWQgQXBpenIgZm9ybWF0dGVkIFJlZml0IGludGVyZmFjZXMgYnkgY2FsbGluZyBhIHNpbmdsZSBtZXRob2QuCkl0IGNvdWxkIGJlIGVpdGhlciBhbiBleHRlbnNpb24gbWV0aG9kIHRvIGBJU2VydmljZUNvbGxlY3Rpb25gIGlmIERlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyBhcmUgc2V0LCBvciBhIHN0YXRpYyBidWlsZGVyIG1ldGhvZCBpZiBub3QuCgojIyMgW0V4dGVuZGVkXSgjdGFiL3RhYmlkLWV4dGVuZGVkKQoKVG8gZW5hYmxlIEFwaXpyIHJlZ2lzdHJhdGlvbiBjb2RlIGdlbmVyYXRpb24gZm9yIGBJU2VydmljZUNvbGxlY3Rpb25gLCB5b3UgbmVlZCBhdCBsZWFzdCB0byBzZXQgdGhlIGB3aXRoUmVnaXN0cmF0aW9uSGVscGVyYCBwcm9wZXJ0eSB0byBgdHJ1ZWAgYW5kIGNvbmZpZ3VyZSB0aGUgYERlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5nc2Agc2VjdGlvbiBpbiB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZS4KVGhpcyBpcyB3aGF0IHRoZSBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlIG1heSBsb29rIGxpa2UsIGRlcGVuZGluZyBvbiB5b3UgY29uZmlndXJhdGlvbjoKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuLi9PcGVuQVBJL3YzLjAvcGV0c3RvcmUuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJQZXRzdG9yZSIsCiAgInVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnMiOiB0cnVlLAogICJkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3MiOiB7CiAgICAiYmFzZVVybCI6ICJodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92MyIsCiAgICAiaHR0cE1lc3NhZ2VIYW5kbGVycyI6IFsgIk15RGVsZWdhdGluZ0hhbmRsZXIiIF0sCiAgICAidHJhbnNpZW50RXJyb3JIYW5kbGVyIjogIkh0dHBSZXNpbGllbmNlIiwKICAgICJtYXhSZXRyeUNvdW50IjogMywKICAgICJmaXJzdEJhY2tvZmZSZXRyeUluU2Vjb25kcyI6IDAuNQogIH0sCiAgImFwaXpyU2V0dGluZ3MiOiB7CiAgICAid2l0aFJlcXVlc3RPcHRpb25zIjogdHJ1ZSwgLy8gUmVjb21tZW5kZWQgdG8gaW5jbHVkZSBhbiBBcGl6ciByZXF1ZXN0IG9wdGlvbnMgcGFyYW1ldGVyIHRvIFJlZml0IGludGVyZmFjZSBtZXRob2RzCiAgICAid2l0aFJlZ2lzdHJhdGlvbkhlbHBlciI6IHRydWUsIC8vIE1hbmRhdG9yeSB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgQXBpenIgcmVnaXN0cmF0aW9uIGV4dGVuZGVkIG1ldGhvZAogICAgIndpdGhDYWNoZVByb3ZpZGVyIjogIkluTWVtb3J5IiwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgTm9uZQogICAgIndpdGhQcmlvcml0eSI6IHRydWUsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgICAid2l0aE1lZGlhdGlvbiI6IHRydWUsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgICAid2l0aE9wdGlvbmFsTWVkaWF0aW9uIjogdHJ1ZSwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICAgICJ3aXRoTWFwcGluZ1Byb3ZpZGVyIjogIkF1dG9NYXBwZXIiLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBOb25lCiAgICAid2l0aEZpbGVUcmFuc2ZlciI6IHRydWUgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICB9Cn0KYGBgCgp3aGljaCB3aWxsIGdlbmVyYXRlIGFuIGV4dGVuc2lvbiBtZXRob2QgdG8gYElTZXJ2aWNlQ29sbGVjdGlvbmAgY2FsbGVkIGBDb25maWd1cmVQZXRzdG9yZUFwaUFwaXpyTWFuYWdlcigpYC4gVGhlIGdlbmVyYXRlZCBleHRlbnNpb24gbWV0aG9kIGRlcGVuZHMgb24gW2BBcGl6ci5FeHRlbnNpb25zLk1pY3Jvc29mdC5EZXBlbmRlbmN5SW5qZWN0aW9uYF0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL0FwaXpyLkV4dGVuc2lvbnMuTWljcm9zb2Z0LkRlcGVuZGVuY3lJbmplY3Rpb24pIGxpYnJhcnkgYW5kIGxvb2tzIGxpa2UgdGhpczoKCmBgYGNzCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVBldHN0b3JlQXBpQXBpenJNYW5hZ2VyKAogICAgdGhpcyBJU2VydmljZUNvbGxlY3Rpb24gc2VydmljZXMsCiAgICBBY3Rpb248SUFwaXpyRXh0ZW5kZWRNYW5hZ2VyT3B0aW9uc0J1aWxkZXI+PyBvcHRpb25zQnVpbGRlciA9IG51bGwpCnsKICAgIG9wdGlvbnNCdWlsZGVyID8/PSBfID0+IHsgfTsgLy8gRGVmYXVsdCBlbXB0eSBvcHRpb25zIGlmIG51bGwKICAgIG9wdGlvbnNCdWlsZGVyICs9IG9wdGlvbnMgPT4gb3B0aW9ucwogICAgICAgIC5XaXRoQmFzZUFkZHJlc3MoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwgQXBpenJEdXBsaWNhdGVTdHJhdGVneS5JZ25vcmUpCiAgICAgICAgLldpdGhEZWxlZ2F0aW5nSGFuZGxlcjxNeURlbGVnYXRpbmdIYW5kbGVyPigpCiAgICAgICAgLkNvbmZpZ3VyZUh0dHBDbGllbnRCdWlsZGVyKGJ1aWxkZXIgPT4gYnVpbGRlcgogICAgICAgICAgICAuQWRkU3RhbmRhcmRSZXNpbGllbmNlSGFuZGxlcihjb25maWcgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uZmlnLlJldHJ5ID0gbmV3IEh0dHBSZXRyeVN0cmF0ZWd5T3B0aW9ucwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFVzZUppdHRlciA9IHRydWUsCiAgICAgICAgICAgICAgICAgICAgTWF4UmV0cnlBdHRlbXB0cyA9IDMsCiAgICAgICAgICAgICAgICAgICAgRGVsYXkgPSBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KSkKICAgICAgICAuV2l0aEluTWVtb3J5Q2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcigpCiAgICAgICAgLldpdGhQcmlvcml0eSgpCiAgICAgICAgLldpdGhPcHRpb25hbE1lZGlhdGlvbigpCiAgICAgICAgLldpdGhGaWxlVHJhbnNmZXJPcHRpb25hbE1lZGlhdGlvbigpOwogICAgICAgICAgICAgICAgIAogICAgcmV0dXJuIHNlcnZpY2VzLkFkZEFwaXpyTWFuYWdlckZvcjxJUGV0c3RvcmVBcGk+KG9wdGlvbnNCdWlsZGVyKTsKfQpgYGAKClRoaXMgY29tZXMgaW4gaGFuZHkgZXNwZWNpYWxseSB3aGVuIGdlbmVyYXRpbmcgbXVsdGlwbGUgaW50ZXJmYWNlcywgYnkgdGFnIG9yIGVuZHBvaW50LiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlCgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi4vT3BlbkFQSS92My4wL3BldHN0b3JlLmpzb24iLAogICJuYW1lc3BhY2UiOiAiUGV0c3RvcmUiLAogICJ1c2VEeW5hbWljUXVlcnlzdHJpbmdQYXJhbWV0ZXJzIjogdHJ1ZSwKICAibXVsdGlwbGVJbnRlcmZhY2VzIjogIkJ5VGFnIiwKICAibmFtaW5nIjogeyAgICAKICAgICJ1c2VPcGVuQXBpVGl0bGUiOiBmYWxzZSwKICAgICJpbnRlcmZhY2VOYW1lIjogIlBldHN0b3JlIgogIH0sCiAgImRlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyI6IHsKICAgICJiYXNlVXJsIjogImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwKICAgICJodHRwTWVzc2FnZUhhbmRsZXJzIjogWyAiTXlEZWxlZ2F0aW5nSGFuZGxlciIgXSwKICAgICJ0cmFuc2llbnRFcnJvckhhbmRsZXIiOiAiSHR0cFJlc2lsaWVuY2UiLAogICAgIm1heFJldHJ5Q291bnQiOiAzLAogICAgImZpcnN0QmFja29mZlJldHJ5SW5TZWNvbmRzIjogMC41CiAgfSwKICAiYXBpenJTZXR0aW5ncyI6IHsKICAgICJ3aXRoUmVxdWVzdE9wdGlvbnMiOiB0cnVlLCAvLyBSZWNvbW1lbmRlZCB0byBpbmNsdWRlIGFuIEFwaXpyIHJlcXVlc3Qgb3B0aW9ucyBwYXJhbWV0ZXIgdG8gUmVmaXQgaW50ZXJmYWNlIG1ldGhvZHMKICAgICJ3aXRoUmVnaXN0cmF0aW9uSGVscGVyIjogdHJ1ZSwgLy8gTWFuZGF0b3J5IHRvIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBBcGl6ciByZWdpc3RyYXRpb24gZXh0ZW5kZWQgbWV0aG9kCiAgICAid2l0aENhY2hlUHJvdmlkZXIiOiAiSW5NZW1vcnkiLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBOb25lCiAgICAid2l0aFByaW9yaXR5IjogdHJ1ZSwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICAgICJ3aXRoTWVkaWF0aW9uIjogdHJ1ZSwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICAgICJ3aXRoT3B0aW9uYWxNZWRpYXRpb24iOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhNYXBwaW5nUHJvdmlkZXIiOiAiQXV0b01hcHBlciIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoRmlsZVRyYW5zZmVyIjogdHJ1ZSAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogIH0KfQpgYGAKCldpbGwgZ2VuZXJhdGUgYSBzaW5nbGUgYENvbmZpZ3VyZVBldHN0b3JlQXBpenJNYW5hZ2VycygpYCBleHRlbnNpb24gbWV0aG9kIHRoYXQgbWF5IGNvbnRhaW4gZGVwZW5kZW5jeSBpbmplY3Rpb24gY29uZmlndXJhdGlvbiBjb2RlIGZvciBtdWx0aXBsZSBpbnRlcmZhY2VzIGxpa2UgdGhpcwoKYGBgY3NoYXJwCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVBldHN0b3JlQXBpenJNYW5hZ2VycygKICAgIHRoaXMgSVNlcnZpY2VDb2xsZWN0aW9uIHNlcnZpY2VzLAogICAgQWN0aW9uPElBcGl6ckV4dGVuZGVkQ29tbW9uT3B0aW9uc0J1aWxkZXI+PyBvcHRpb25zQnVpbGRlciA9IG51bGwpCnsKICAgIG9wdGlvbnNCdWlsZGVyID8/PSBfID0+IHsgfTsgLy8gRGVmYXVsdCBlbXB0eSBvcHRpb25zIGlmIG51bGwKICAgIG9wdGlvbnNCdWlsZGVyICs9IG9wdGlvbnMgPT4gb3B0aW9ucwogICAgICAgIC5XaXRoQmFzZUFkZHJlc3MoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwgQXBpenJEdXBsaWNhdGVTdHJhdGVneS5JZ25vcmUpCiAgICAgICAgLldpdGhEZWxlZ2F0aW5nSGFuZGxlcjxNeURlbGVnYXRpbmdIYW5kbGVyPigpCiAgICAgICAgLkNvbmZpZ3VyZUh0dHBDbGllbnRCdWlsZGVyKGJ1aWxkZXIgPT4gYnVpbGRlcgogICAgICAgICAgICAuQWRkU3RhbmRhcmRSZXNpbGllbmNlSGFuZGxlcihjb25maWcgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uZmlnLlJldHJ5ID0gbmV3IEh0dHBSZXRyeVN0cmF0ZWd5T3B0aW9ucwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFVzZUppdHRlciA9IHRydWUsCiAgICAgICAgICAgICAgICAgICAgTWF4UmV0cnlBdHRlbXB0cyA9IDMsCiAgICAgICAgICAgICAgICAgICAgRGVsYXkgPSBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KSkKICAgICAgICAuV2l0aEluTWVtb3J5Q2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcigpCiAgICAgICAgLldpdGhQcmlvcml0eSgpCiAgICAgICAgLldpdGhPcHRpb25hbE1lZGlhdGlvbigpCiAgICAgICAgLldpdGhGaWxlVHJhbnNmZXJPcHRpb25hbE1lZGlhdGlvbigpOwogICAgICAgICAgICAKICAgIHJldHVybiBzZXJ2aWNlcy5BZGRBcGl6cigKICAgICAgICByZWdpc3RyeSA9PiByZWdpc3RyeQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJUGV0QXBpPigpCiAgICAgICAgICAgIC5BZGRNYW5hZ2VyRm9yPElTdG9yZUFwaT4oKQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJVXNlckFwaT4oKSwKICAgICAgICBvcHRpb25zQnVpbGRlcik7Cgp9CmBgYAoKSGVyZSwgYElQZXRBcGlgLCBgSVN0b3JlQXBpYCBhbmQgYElVc2VyQXBpYCBhcmUgdGhlIGdlbmVyYXRlZCBpbnRlcmZhY2VzIHdoaWNoIHNoYXJlIHRoZSBzYW1lIGNvbW1vbiBjb25maWd1cmF0aW9uIGRlZmluZWQgZnJvbSB0aGUgYC5yZWZpdHRlcmAgZmlsZS4KCiMjIyBbU3RhdGljXSgjdGFiL3RhYmlkLXN0YXRpYykKClRvIGVuYWJsZSBBcGl6ciBzdGF0aWMgYnVpbGRlciBjb2RlIGdlbmVyYXRpb24sIHlvdSBuZWVkIGF0IGxlYXN0IHRvIHNldCB0aGUgYHdpdGhSZWdpc3RyYXRpb25IZWxwZXJgIHByb3BlcnR5IHRvIGB0cnVlYCBhbmQgbGVhdmUgdGhlIGBEZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3NgIHNlY3Rpb24gdG8gbnVsbCBpbiB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZS4KVGhpcyBpcyB3aGF0IHRoZSBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlIG1heSBsb29rIGxpa2UsIGRlcGVuZGluZyBvbiB5b3UgY29uZmlndXJhdGlvbjoKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuLi9PcGVuQVBJL3YzLjAvcGV0c3RvcmUuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJQZXRzdG9yZSIsCiAgInVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnMiOiB0cnVlLAogICJhcGl6clNldHRpbmdzIjogewogICAgIndpdGhSZXF1ZXN0T3B0aW9ucyI6IHRydWUsIC8vIFJlY29tbWVuZGVkIHRvIGluY2x1ZGUgYW4gQXBpenIgcmVxdWVzdCBvcHRpb25zIHBhcmFtZXRlciB0byBSZWZpdCBpbnRlcmZhY2UgbWV0aG9kcwogICAgIndpdGhSZWdpc3RyYXRpb25IZWxwZXIiOiB0cnVlLCAvLyBNYW5kYXRvcnkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIEFwaXpyIHJlZ2lzdHJhdGlvbiBleHRlbmRlZCBtZXRob2QKICAgICJ3aXRoQ2FjaGVQcm92aWRlciI6ICJBa2F2YWNoZSIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoUHJpb3JpdHkiOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhNYXBwaW5nUHJvdmlkZXIiOiAiQXV0b01hcHBlciIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoRmlsZVRyYW5zZmVyIjogdHJ1ZSAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogIH0KfQpgYGAKCndoaWNoIHdpbGwgZ2VuZXJhdGUgYSBzdGF0aWMgYnVpbGRlciBtZXRob2QgY2FsbGVkIGBCdWlsZFBldHN0b3JlMzBBcGl6ck1hbmFnZXIoKWAuIFRoZSBnZW5lcmF0ZWQgYnVpbGRlciBtZXRob2QgZGVwZW5kcyBvbiBbYEFwaXpyYF0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL0FwaXpyKSBsaWJyYXJ5IGFuZCBsb29rcyBsaWtlIHRoaXM6CgpgYGBjcwpwdWJsaWMgc3RhdGljIElBcGl6ck1hbmFnZXI8SVN3YWdnZXJQZXRzdG9yZU9wZW5BUEkzMD4gQnVpbGRQZXRzdG9yZTMwQXBpenJNYW5hZ2VyKEFjdGlvbjxJQXBpenJNYW5hZ2VyT3B0aW9uc0J1aWxkZXI+IG9wdGlvbnNCdWlsZGVyKQp7CiAgICBvcHRpb25zQnVpbGRlciA/Pz0gXyA9PiB7IH07IC8vIERlZmF1bHQgZW1wdHkgb3B0aW9ucyBpZiBudWxsCiAgICBvcHRpb25zQnVpbGRlciArPSBvcHRpb25zID0+IG9wdGlvbnMKICAgICAgICAuV2l0aEFrYXZhY2hlQ2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcihuZXcgTWFwcGVyQ29uZmlndXJhdGlvbihjb25maWcgPT4geyAvKiBZT1VSX01BUFBJTkdTX0hFUkUgKi8gfSkpCiAgICAgICAgLldpdGhQcmlvcml0eSgpOwogICAgICAgICAgICAKICAgIHJldHVybiBBcGl6ckJ1aWxkZXIuQ3VycmVudC5DcmVhdGVNYW5hZ2VyRm9yPElTd2FnZ2VyUGV0c3RvcmVPcGVuQVBJMzA+KG9wdGlvbnNCdWlsZGVyKTsgIAp9CmBgYAoKVGhpcyBjb21lcyBpbiBoYW5keSBlc3BlY2lhbGx5IHdoZW4gZ2VuZXJhdGluZyBtdWx0aXBsZSBpbnRlcmZhY2VzLCBieSB0YWcgb3IgZW5kcG9pbnQuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGAucmVmaXR0ZXJgIHNldHRpbmdzIGZpbGUKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuLi9PcGVuQVBJL3YzLjAvcGV0c3RvcmUuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJQZXRzdG9yZSIsCiAgInVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnMiOiB0cnVlLAogICJtdWx0aXBsZUludGVyZmFjZXMiOiAiQnlUYWciLAogICJuYW1pbmciOiB7ICAgIAogICAgInVzZU9wZW5BcGlUaXRsZSI6IGZhbHNlLAogICAgImludGVyZmFjZU5hbWUiOiAiUGV0c3RvcmUiCiAgfSwKICAiZGVwZW5kZW5jeUluamVjdGlvblNldHRpbmdzIjogewogICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiLAogICAgImh0dHBNZXNzYWdlSGFuZGxlcnMiOiBbICJNeURlbGVnYXRpbmdIYW5kbGVyIiBdLAogICAgInRyYW5zaWVudEVycm9ySGFuZGxlciI6ICJIdHRwUmVzaWxpZW5jZSIsCiAgICAibWF4UmV0cnlDb3VudCI6IDMsCiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUKICB9LAogICJhcGl6clNldHRpbmdzIjogewogICAgIndpdGhSZXF1ZXN0T3B0aW9ucyI6IHRydWUsIC8vIFJlY29tbWVuZGVkIHRvIGluY2x1ZGUgYW4gQXBpenIgcmVxdWVzdCBvcHRpb25zIHBhcmFtZXRlciB0byBSZWZpdCBpbnRlcmZhY2UgbWV0aG9kcwogICAgIndpdGhSZWdpc3RyYXRpb25IZWxwZXIiOiB0cnVlLCAvLyBNYW5kYXRvcnkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIEFwaXpyIHJlZ2lzdHJhdGlvbiBleHRlbmRlZCBtZXRob2QKICAgICJ3aXRoQ2FjaGVQcm92aWRlciI6ICJJbk1lbW9yeSIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoUHJpb3JpdHkiOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhNZWRpYXRpb24iOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhPcHRpb25hbE1lZGlhdGlvbiI6IHRydWUsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgICAid2l0aE1hcHBpbmdQcm92aWRlciI6ICJBdXRvTWFwcGVyIiwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgTm9uZQogICAgIndpdGhGaWxlVHJhbnNmZXIiOiB0cnVlIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgfQp9CmBgYAoKV2lsbCBnZW5lcmF0ZSBhIHNpbmdsZSBgQnVpbGRQZXRzdG9yZUFwaXpyTWFuYWdlcnMoKWAgYnVpbGRlciBtZXRob2QgdGhhdCBtYXkgY29udGFpbiBjb25maWd1cmF0aW9uIGNvZGUgZm9yIG11bHRpcGxlIGludGVyZmFjZXMgbGlrZSB0aGlzCgpgYGBjc2hhcnAKcHVibGljIHN0YXRpYyBJQXBpenJSZWdpc3RyeSBCdWlsZFBldHN0b3JlQXBpenJNYW5hZ2VycyhBY3Rpb248SUFwaXpyQ29tbW9uT3B0aW9uc0J1aWxkZXI+IG9wdGlvbnNCdWlsZGVyKQp7CiAgICBvcHRpb25zQnVpbGRlciA/Pz0gXyA9PiB7IH07IC8vIERlZmF1bHQgZW1wdHkgb3B0aW9ucyBpZiBudWxsCiAgICBvcHRpb25zQnVpbGRlciArPSBvcHRpb25zID0+IG9wdGlvbnMKICAgICAgICAuV2l0aEFrYXZhY2hlQ2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcihuZXcgTWFwcGVyQ29uZmlndXJhdGlvbihjb25maWcgPT4geyAvKiBZT1VSX01BUFBJTkdTX0hFUkUgKi8gfSkpCiAgICAgICAgLldpdGhQcmlvcml0eSgpOwogICAgICAgICAgICAKICAgIHJldHVybiBBcGl6ckJ1aWxkZXIuQ3VycmVudC5DcmVhdGVSZWdpc3RyeSgKICAgICAgICByZWdpc3RyeSA9PiByZWdpc3RyeQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJUGV0QXBpPigpCiAgICAgICAgICAgIC5BZGRNYW5hZ2VyRm9yPElTdG9yZUFwaT4oKQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJVXNlckFwaT4oKSwKICAgICAgICBvcHRpb25zQnVpbGRlcik7Cn0KYGBgCgpIZXJlLCBgSVBldEFwaWAsIGBJU3RvcmVBcGlgIGFuZCBgSVVzZXJBcGlgIGFyZSB0aGUgZ2VuZXJhdGVkIGludGVyZmFjZXMgd2hpY2ggc2hhcmUgdGhlIHNhbWUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBmcm9tIHRoZSBgLnJlZml0dGVyYCBmaWxlLgoKKioqCgojIyMgQ3VzdG9taXppbmcgdGhlIGNvbmZpZ3VyYXRpb24KCllvdSBtYXkgd2FudCB0byBhZGp1c3QgYXBpcyBjb25maWd1cmF0aW9uLCBmb3IgZXhhbXBsZSwgdG8gYWRkIGEgY3VzdG9tIGhlYWRlciB0byByZXF1ZXN0cy4gVGhpcyBjYW4gYmUgZG9uZSB1c2luZyB0aGUgYEFjdGlvbjxUQXBpenJPcHRpb25zQnVpbGRlcj5gIHBhcmFtZXRlciB3aGlsZSBjYWxsaW5nIHRoZSBnZW5lcmF0ZWQgbWV0aG9kLgpUbyBrbm93IGhvdyB0byBtYWtlIEFwaXpyIGZpdCB5b3VyIG5lZWRzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFtBcGl6ciBkb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5hcGl6ci5uZXQpLgoKIyMjIFVzaW5nIHRoZSBtYW5hZ2VycwoKT25jZSB5b3UgY2FsbGVkIHRoZSBnZW5lcmF0ZWQgbWV0aG9kLCB5b3Ugd2lsbCBnZXQgYW4gYElBcGl6ck1hbmFnZXI8VD5gIGluc3RhbmNlIHRoYXQgeW91IGNhbiB1c2UgdG8gbWFrZSByZXF1ZXN0cyB0byB0aGUgQVBJLiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIGl0OgoKYGBgY3NoYXJwCnZhciByZXN1bHQgPSBhd2FpdCBwZXRzdG9yZU1hbmFnZXIuRXhlY3V0ZUFzeW5jKChhcGksIG9wdCkgPT4gYXBpLkdldFBldEJ5SWQoMSwgb3B0KSwgCiAgICBvcHRpb25zID0+IG9wdGlvbnMgLy8gV2hhdGV2ZXIgZmluYWwgcmVxdWVzdCBvcHRpb25zIHlvdSB3YW50IHRvIGFwcGx5CiAgICAgICAgLldpdGhQcmlvcml0eShQcmlvcml0eS5CYWNrZ3JvdW5kKQogICAgICAgIC5XaXRoSGVhZGVycyhbIkhlYWRlcktleTE6IEhlYWRlclZhbHVlMSJdKQogICAgICAgIC5XaXRoUmVxdWVzdFRpbWVvdXQoIjAwOjAwOjEwIikKICAgICAgICAuV2l0aENhbmNlbGxhdGlvbihjdHMuVG9rZW4pKTsKYGBgCgpQbGVhc2UgaGVhZCB0byB0aGUgW0FwaXpyIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmFwaXpyLm5ldCkgdG8gZ2V0IG1vcmUuCgojIyBTeXN0ZW0gcmVxdWlyZW1lbnRzCi5ORVQgOC4wCgojIyBDb250cmlidXRvcnMKCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1MSVNUOlNUQVJUIC0gRG8gbm90IHJlbW92ZSBvciBtb2RpZnkgdGhpcyBzZWN0aW9uIC0tPgo8IS0tIHByZXR0aWVyLWlnbm9yZS1zdGFydCAtLT4KPCEtLSBtYXJrZG93bmxpbnQtZGlzYWJsZSAtLT4KPHRhYmxlPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbmVvR2VuZXZhIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzgwNDcyND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iUGhpbGlwIENveCIvPjxiciAvPjxzdWI+PGI+UGhpbGlwIENveDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPW5lb0dlbmV2YSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2NhbS5tYWNmYXIubGFuZC8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5ODg0Nz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2FtZXJvbiBNYWNGYXJsYW5kIi8+PGJyIC8+PHN1Yj48Yj5DYW1lcm9uIE1hY0ZhcmxhbmQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1kaXN0YW50Y2FtIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHA6Ly9rZ2FtZS50dyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNjQ2NTMyP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJrZ2FtZSIvPjxiciAvPjxzdWI+PGI+a2dhbWU8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1rZ2FtZWNhcnRlciIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwOi8veXJraS5ubyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMTU3MzYwMT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iVGhvbWFzIFBldHRlcnNlbiAvIFlya2kiLz48YnIgLz48c3ViPjxiPlRob21hcyBQZXR0ZXJzZW4gLyBZcmtpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9IiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS8xa3ZpbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NjQyNTk4MD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQXJ0ZW0iLz48YnIgLz48c3ViPjxiPkFydGVtPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBMWt2aW4iIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tN2NsYXJrZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NzQzOTE0ND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ibTdjbGFya2UiLz48YnIgLz48c3ViPjxiPm03Y2xhcmtlPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBbTdjbGFya2UiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9raXJpZGVzIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEzNjAyMTQzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJraXJpZGVzIi8+PGJyIC8+PHN1Yj48Yj5raXJpZGVzPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBa2lyaWRlcyIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9a2lyaWRlcyIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2d1aWxsYXVtZXNlcmFsZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS82NjcyNDA2P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJndWlsbGF1bWVzZXJhbGUiLz48YnIgLz48c3ViPjxiPmd1aWxsYXVtZXNlcmFsZTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPWd1aWxsYXVtZXNlcmFsZSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FndWlsbGF1bWVzZXJhbGUiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Sb2ZsaW5jb3B0ZXIiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTY5MDI0Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRGVubmlzIEJyZW50amVzIi8+PGJyIC8+PHN1Yj48Yj5EZW5uaXMgQnJlbnRqZXM8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Sb2ZsaW5jb3B0ZXIiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSIjaWRlYXMtUm9mbGluY29wdGVyIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2hpY2tleWRhbWlhbi8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTc0MzY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRhbWlhbiBIaWNrZXkiLz48YnIgLz48c3ViPjxiPkRhbWlhbiBIaWNrZXk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FkYW1pYW5oIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcmljaGFyZGh1LWxtZyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjY0MzA3ODc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InJpY2hhcmRodS1sbWciLz48YnIgLz48c3ViPjxiPnJpY2hhcmRodS1sbWc8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FyaWNoYXJkaHUtbG1nIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYnJlYXNlLWNvbGluIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ3MzU4OTM1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJicmVhc2UtY29saW4iLz48YnIgLz48c3ViPjxiPmJyZWFzZS1jb2xpbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWJyZWFzZS1jb2xpbiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FuZ2Vsb2ZiIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIwMzIyNTc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImFuZ2Vsb2ZiIi8+PGJyIC8+PHN1Yj48Yj5hbmdlbG9mYjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPWFuZ2Vsb2ZiIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Ob0dSbyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81NjY1MjczP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEaW0gTm9ncm8iLz48YnIgLz48c3ViPjxiPkRpbSBOb2dybzwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPU5vR1JvIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20veWFkYW5pbG92MTkiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTcxNjEwNjU/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InlhZGFuaWxvdjE5Ii8+PGJyIC8+PHN1Yj48Yj55YWRhbmlsb3YxOTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLXlhZGFuaWxvdjE5IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9eWFkYW5pbG92MTkiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhbnBvd2VsbDg4Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzExMDAzOTc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRhbmllbCBQb3dlbGwiLz48YnIgLz48c3ViPjxiPkRhbmllbCBQb3dlbGw8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FkYW5wb3dlbGw4OCIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0Vra2VpciI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNjE5NDY4NT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRWtrZWlyIi8+PGJyIC8+PHN1Yj48Yj5Fa2tlaXI8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Fa2tlaXIiIHRpdGxlPSJEb2N1bWVudGF0aW9uIj7wn5OWPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBRWtrZWlyIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vd2F5bG9ubXR6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ2MDQ1Nzk/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IldheWxvbiBNYXJ0aW5leiIvPjxiciAvPjxzdWI+PGI+V2F5bG9uIE1hcnRpbmV6PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBd2F5bG9ubXR6IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdmluYXltYWR1cGF0aGkiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzgxMDI5MDA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InZrbWFkdXBhIi8+PGJyIC8+PHN1Yj48Yj52a21hZHVwYTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQXZpbmF5bWFkdXBhdGhpIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTm9ibGl4Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIyMDc2ODgzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJOb2JsaXgiLz48YnIgLz48c3ViPjxiPk5vYmxpeDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPU5vYmxpeCIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+IDxhIGhyZWY9IiNpZGVhcy1Ob2JsaXgiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL3d3dy52ZWV6bGEuaW8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMjMwNDMyP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJBdHRpbGEgSGFqZHJpayIvPjxiciAvPjxzdWI+PGI+QXR0aWxhIEhhamRyaWs8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1hdHRpbGFoIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iaWVsaWswMSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS85MjA5NTA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImJpZWxpazAxIi8+PGJyIC8+PHN1Yj48Yj5iaWVsaWswMTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWJpZWxpazAxIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+IDxhIGhyZWY9IiNpZGVhcy1iaWVsaWswMSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9uYWFlZWYiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDMzMzkwNzE/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Im5hYWVlZiIvPjxiciAvPjxzdWI+PGI+bmFhZWVmPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtbmFhZWVmIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FscnoiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzEwNTk3OT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQWxpcmV6YSBIYWJpYmkiLz48YnIgLz48c3ViPjxiPkFsaXJlemEgSGFiaWJpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBYWxyeiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0VFUGFya2VyIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODc0MDc2P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJKZWZmIFBhcmtlciwgUEUiLz48YnIgLz48c3ViPjxiPkplZmYgUGFya2VyLCBQRTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQUVFUGFya2VyIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vam9kczQiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzgzMjgyMD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iam9kcyIvPjxiciAvPjxzdWI+PGI+am9kczwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLWpvZHM0IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBam9kczQiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9lZGltYXJxdWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQxNzkxNzE5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJFZGltYXJxdWV6IE1lZGVpcm9zIi8+PGJyIC8+PHN1Yj48Yj5FZGltYXJxdWV6IE1lZGVpcm9zPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZWRpbWFycXVleiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2FmYWtrZXNpa2NpIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzcwNjcyNTI/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InNhZmFra2VzaWtjaSIvPjxiciAvPjxzdWI+PGI+c2FmYWtrZXNpa2NpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBc2FmYWtrZXNpa2NpIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZvbGJyZWNodCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDU1Mzc4NDY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImZvbGJyZWNodCIvPjxiciAvPjxzdWI+PGI+Zm9sYnJlY2h0PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZm9sYnJlY2h0IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbW9ydGVubGF1cnNlbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yODc1OTczNz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ibW9ydGVubGF1cnNlbiIvPjxiciAvPjxzdWI+PGI+bW9ydGVubGF1cnNlbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPW1vcnRlbmxhdXJzZW4iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hbnVlbC1mZXJuYW5kZXotcm9kcmlndWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ4NTIwMjA1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJtYW51ZWwtZmVybmFuZGV6LXJvZHJpZ3VleiIvPjxiciAvPjxzdWI+PGI+bWFudWVsLWZlcm5hbmRlei1yb2RyaWd1ZXo8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FtYW51ZWwtZmVybmFuZGV6LXJvZHJpZ3VleiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2VsaXlhbW1pbmUiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjY0NDgwNz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRWxpIFlhbW1pbmUiLz48YnIgLz48c3ViPjxiPkVsaSBZYW1taW5lPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZWxpeWFtbWluZSIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2thbWktcG9pIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ3MzIyNjkxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJrYW1pLXBvaSIvPjxiciAvPjxzdWI+PGI+a2FtaS1wb2k8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1rYW1pLXBvaSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9YZWV2aXMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTgzNTA0ND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iWGVldmlzIi8+PGJyIC8+PHN1Yj48Yj5YZWV2aXM8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FYZWV2aXMiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ESjRkZGkiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTY5NjEwMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iREo0ZGRpIi8+PGJyIC8+PHN1Yj48Yj5ESjRkZGk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1ESjRkZGkiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSIjaWRlYXMtREo0ZGRpIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kaXJlbmNhbmNhdGFsa2F5YSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81NzIyMzczMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iZGlyZW5jYW5jYXRhbGtheWEiLz48YnIgLz48c3ViPjxiPmRpcmVuY2FuY2F0YWxrYXlhPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZGlyZW5jYW5jYXRhbGtheWEiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JvYnBhbG0iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ5Mzk1MzA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IlJvYmVydCBQYWxtcXZpc3QiLz48YnIgLz48c3ViPjxiPlJvYmVydCBQYWxtcXZpc3Q8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1yb2JwYWxtIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9cm9icGFsbSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vVGltb3RoeU1ha2tpc29uIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ5MzQ5NTEzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJUaW0gTSIvPjxiciAvPjxzdWI+PGI+VGltIE08L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1UaW1vdGh5TWFra2lzb24iIHRpdGxlPSJEb2N1bWVudGF0aW9uIj7wn5OWPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2phbmZvbGJyZWNodCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80MjE4NjYwND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iamFuZm9sYnJlY2h0Ii8+PGJyIC8+PHN1Yj48Yj5qYW5mb2xicmVjaHQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1qYW5mb2xicmVjaHQiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1qYW5mb2xicmVjaHQiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL29zYy1uc2VndWluIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEzMzkxMDMwOT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iTmljayBTZWd1aW4iLz48YnIgLz48c3ViPjxiPk5pY2sgU2VndWluPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9b3NjLW5zZWd1aW4iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkLWJyaW5rLXRhbG9neSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80MzgyODczOT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRGF2aWQgQnJpbmsiLz48YnIgLz48c3ViPjxiPkRhdmlkIEJyaW5rPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZGF2aWQtYnJpbmstdGFsb2d5IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1kYXZpZC1icmluay10YWxvZ3kiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhbW1pdGphbmV0Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91Lzk1MjcyMz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iU3R1IFdpbHNvbiIvPjxiciAvPjxzdWI+PGI+U3R1IFdpbHNvbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLWRhbW1pdGphbmV0IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZGFtbWl0amFuZXQiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zaGFycHppbGxhIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE2NzYzNjM0P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJzaGFycHppbGxhIi8+PGJyIC8+PHN1Yj48Yj5zaGFycHppbGxhPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtc2hhcnB6aWxsYSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9KYXBwaW5lbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NDQwODQ5Nz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iVGF0dSIvPjxiciAvPjxzdWI+PGI+VGF0dTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQUphcHBpbmVuIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwOi8vd3d3LnJlc3Bhd25zaXZlLmNvbSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80MjcyMzA3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJKw6lyw6lteSBCUlVOLVBJQ0FSRCIvPjxiciAvPjxzdWI+PGI+SsOpcsOpbXkgQlJVTi1QSUNBUkQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1KZXJlbXlCUCIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPUplcmVteUJQIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPUplcmVteUJQIiB0aXRsZT0iRG9jdW1lbnRhdGlvbiI+8J+TljwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9lYmFybmFyZCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMDU5NjgzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJFZCBCYXJuYXJkIi8+PGJyIC8+PHN1Yj48Yj5FZCBCYXJuYXJkPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtZWJhcm5hcmQiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmFzdGllbm5vZWw5MyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xODI1MDM1MD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iYmFzdGllbi5ub2VsIi8+PGJyIC8+PHN1Yj48Yj5iYXN0aWVuLm5vZWw8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FiYXN0aWVubm9lbDkzIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTWVpa2VsTFAiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTE2Njk4NDY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Ik1laWtlbCBQaGlsaXBwIi8+PGJyIC8+PHN1Yj48Yj5NZWlrZWwgUGhpbGlwcDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLU1laWtlbExQIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL2JlcmtzZWx2aS5kZXYiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTQ2NzY1MTY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkJlcmsgU2VsdmkiLz48YnIgLz48c3ViPjxiPkJlcmsgU2Vsdmk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1iZXJrc2x2IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9YmVya3NsdiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudGhlYnVpbGRzaGVldC5jb20vIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91Lzk5MDk1NjQ/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Ikpvc2h1YSBPemVyaSIvPjxiciAvPjxzdWI+PGI+Sm9zaHVhIE96ZXJpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBWGVDbHV0Y2giIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8va2FuY2FuZS5ubC8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNzAxNTM0P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJSeWFuIEhlYXRoIi8+PGJyIC8+PHN1Yj48Yj5SeWFuIEhlYXRoPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtcnlhbmhlYXRoIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9cnlhbmhlYXRoIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Ccmlhb2V1aWRodG5zIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91Lzc1MzAxNTY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkJyaWFuIEJydW5uZXIiLz48YnIgLz48c3ViPjxiPkJyaWFuIEJydW5uZXI8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1Ccmlhb2V1aWRodG5zIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZzYW1pZWMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTMxNjYwMjA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkZyYW5rIFNhbWllYyIvPjxiciAvPjxzdWI+PGI+RnJhbmsgU2FtaWVjPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZnNhbWllYyIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjwhLS0gbWFya2Rvd25saW50LXJlc3RvcmUgLS0+CjwhLS0gcHJldHRpZXItaWdub3JlLWVuZCAtLT4KCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1MSVNUOkVORCAtLT4KCiMKCkZvciB0aXBzIGFuZCB0cmlja3Mgb24gc29mdHdhcmUgZGV2ZWxvcG1lbnQsIGNoZWNrIG91dCBbbXkgYmxvZ10oaHR0cHM6Ly9jaHJpc3RpYW5oZWxsZS5jb20pCgpJZiB5b3UgZmluZCB0aGlzIHVzZWZ1bCBhbmQgZmVlbCBhIGJpdCBnZW5lcm91cyB0aGVuIGZlZWwgZnJlZSB0byBbYnV5IG1lIGEgY29mZmVlIOKYlV0oaHR0cHM6Ly93d3cuYnV5bWVhY29mZmVlLmNvbS9jaHJpc3RpYW5oZWxsZSkK - readmeEtag: '"d86a9c2226a3df8866357cad6ea9f909c86788a9"' - readmeLastModified: Thu, 31 Oct 2024 21:38:06 GMT + WyFbQnVpbGRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbCkKWyFbU21va2UgVGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9zbW9rZS10ZXN0cy55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL3Ntb2tlLXRlc3RzLnltbCkKWyFbTnVHZXRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnVnZXQvdi9yZWZpdHRlcj9jb2xvcj1ibHVlKV0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL3JlZml0dGVyKQpbIVtRdWFsaXR5IEdhdGUgU3RhdHVzXShodHRwczovL3NvbmFyY2xvdWQuaW8vYXBpL3Byb2plY3RfYmFkZ2VzL21lYXN1cmU/cHJvamVjdD1jaHJpc3RpYW5oZWxsZV9yZWZpdHRlciZtZXRyaWM9YWxlcnRfc3RhdHVzKV0oaHR0cHM6Ly9zb25hcmNsb3VkLmlvL3N1bW1hcnkvbmV3X2NvZGU/aWQ9Y2hyaXN0aWFuaGVsbGVfcmVmaXR0ZXIpClshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9ncmFwaC9iYWRnZS5zdmc/dG9rZW49MjQyWVQxTjZUMildKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlcikKCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1CQURHRTpTVEFSVCAtIERvIG5vdCByZW1vdmUgb3IgbW9kaWZ5IHRoaXMgc2VjdGlvbiAtLT4KWyFbQWxsIENvbnRyaWJ1dG9yc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9hbGxfY29udHJpYnV0b3JzLTU0LW9yYW5nZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXSgjY29udHJpYnV0b3JzLSkKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUJBREdFOkVORCAtLT4KCiMgUmVmaXR0ZXIKUmVmaXR0ZXIgaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIGEgQyMgUkVTVCBBUEkgQ2xpZW50IHVzaW5nIHRoZSBbUmVmaXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGl2ZXVpL3JlZml0KSBsaWJyYXJ5LiBSZWZpdHRlciBjYW4gZ2VuZXJhdGUgdGhlIFJlZml0IGludGVyZmFjZSBhbmQgY29udHJhY3RzIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4gUmVmaXR0ZXIgY291bGQgZm9ybWF0IHRoZSBnZW5lcmF0ZWQgUmVmaXQgaW50ZXJmYWNlIHRvIGJlIG1hbmFnZWQgYnkgW0FwaXpyXShodHRwczovL3d3dy5hcGl6ci5uZXQpICh2NispIGFuZCBnZW5lcmF0ZSBzb21lIHJlZ2lzdHJhdGlvbiBoZWxwZXJzIHRvby4KClJlZml0dGVyIGNvbWVzIGluIDIgZm9ybXM6Ci0gQSBbLk5FVCBDTEkgVG9vbF0oI2NsaS10b29sKSBkaXN0cmlidXRlZCB2aWEgW251Z2V0Lm9yZ10oaHR0cDovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvcmVmaXR0ZXIpIHRoYXQgb3V0cHV0cyBhIHNpbmdsZSBDIyBmaWxlIG9uIGRpc2sKLSBBIFtDIyBTb3VyY2UgR2VuZXJhdG9yXSgjc291cmNlLWdlbmVyYXRvcikgdmlhIHRoZSBbUmVmaXR0ZXIuU291cmNlR2VuZXJhdG9yXShodHRwOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9yZWZpdHRlci5zb3VyY2VnZW5lcmF0b3IpIHBhY2thZ2UgdGhhdCBnZW5lcmF0ZXMgY29kZSBvbiBjb21waWxlIHRpbWUgYmFzZWQgb24gYSBbLnJlZml0dGVyXSgjLnJlZml0dGVyLWZpbGUtZm9ybWF0KSB3aXRoaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5LgoKIyMgQ0xJIFRvb2wKCiMjIyBJbnN0YWxsYXRpb246CgpUaGUgdG9vbCBpcyBwYWNrYWdlZCBhcyBhIC5ORVQgVG9vbCBhbmQgaXMgcHVibGlzaGVkIHRvIG51Z2V0Lm9yZy4gWW91IGNhbiBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHRvb2wgbGlrZSB0aGlzOgoKYGBgc2hlbGwKZG90bmV0IHRvb2wgaW5zdGFsbCAtLWdsb2JhbCBSZWZpdHRlcgpgYGAKCiMjIyBVc2FnZToKCmBgYHNoZWxsCiQgcmVmaXR0ZXIgLS1oZWxwCmBgYAoKYGBgdGV4dApVU0FHRToKICAgIHJlZml0dGVyIFtVUkwgb3IgaW5wdXQgZmlsZV0gW09QVElPTlNdCgpFWEFNUExFUzoKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uCiAgICByZWZpdHRlciBodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92My9vcGVuYXBpLnlhbWwKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tc2V0dGluZ3MtZmlsZSAuL29wZW5hcGkucmVmaXR0ZXIgLS1vdXRwdXQgLi9HZW5lcmF0ZWRDb2RlLmNzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiIC0tb3V0cHV0IC4vR2VuZXJhdGVkQ29kZS5jcwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLWludGVybmFsCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW91dHB1dCAuL0lHZW5lcmF0ZWRDb2RlLmNzIC0taW50ZXJmYWNlLW9ubHkKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tb3V0cHV0IC4vR2VuZXJhdGVkQ29udHJhY3RzLmNzIC0tY29udHJhY3Qtb25seQogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS11c2UtYXBpLXJlc3BvbnNlCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLWNhbmNlbGxhdGlvbi10b2tlbnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbm8tb3BlcmF0aW9uLWhlYWRlcnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbm8tYWNjZXB0LWhlYWRlcnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdXNlLWlzby1kYXRlLWZvcm1hdAogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAiWW91ci5BZGRpdGlvbmFsLk5hbWVzcGFjZSIgLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAiWW91ci5PdGhlci5BZGRpdGlvbmFsLk5hbWVzcGFjZSIKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbXVsdGlwbGUtaW50ZXJmYWNlcyBCeUVuZHBvaW50CiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXRhZyBQZXQgLS10YWcgU3RvcmUgLS10YWcgVXNlcgogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1tYXRjaC1wYXRoICdeL3BldC8uKicKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdHJpbS11bnVzZWQtc2NoZW1hCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXRyaW0tdW51c2VkLXNjaGVtYSAgLS1rZWVwLXNjaGVtYSAnXk1vZGVsJCcgLS1rZWVwLXNjaGVtYSAnXlBlcnNvbi4rJwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uby1kZXByZWNhdGVkLW9wZXJhdGlvbnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tb3BlcmF0aW9uLW5hbWUtdGVtcGxhdGUgJ3tvcGVyYXRpb25OYW1lfUFzeW5jJwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1vcHRpb25hbC1udWxsYWJsZS1wYXJhbWV0ZXJzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXVzZS1wb2x5bW9ycGhpYy1zZXJpYWxpemF0aW9uCgpBUkdVTUVOVFM6CiAgICBbVVJMIG9yIGlucHV0IGZpbGVdICAgIFVSTCBvciBmaWxlIHBhdGggdG8gT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGZpbGUKCk9QVElPTlM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRzIGhlbHAgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtdiwgLS12ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRzIHZlcnNpb24gaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtcywgLS1zZXR0aW5ncy1maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCB0byAucmVmaXR0ZXIgc2V0dGluZ3MgZmlsZS4gU3BlY2lmeWluZyB0aGlzIHdpbGwgaWdub3JlIGFsbCBvdGhlciBzZXR0aW5ncyAoZXhjZXB0IGZvciAtLW91dHB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbiwgLS1uYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvZGUgICAgRGVmYXVsdCBuYW1lc3BhY2UgdG8gdXNlIGZvciBnZW5lcmF0ZWQgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jb250cmFjdHMtbmFtZXNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBuYW1lc3BhY2UgdG8gdXNlIGZvciBnZW5lcmF0ZWQgY29udHJhY3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbywgLS1vdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dC5jcyAgICAgICAgUGF0aCB0byBPdXRwdXQgZmlsZSBvciBmb2xkZXIgKGlmIG11bHRpcGxlIGZpbGVzIGFyZSBnZW5lcmF0ZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jb250cmFjdHMtb3V0cHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0IHBhdGggZm9yIGdlbmVyYXRlZCBjb250cmFjdHMuIEVuYWJsaW5nIHRoaXMgYXV0b21hdGljYWxseSBlbmFibGVzIGdlbmVyYXRpbmcgbXVsdGlwbGUgZmlsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hdXRvLWdlbmVyYXRlZC1oZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxhdXRvLWdlbmVyYXRlZD4gaGVhZGVyIHRvIG91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hY2NlcHQtaGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxBY2NlcHQ+IGhlYWRlciB0byBvdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcmZhY2Utb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgY29udHJhY3QgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jb250cmFjdC1vbmx5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgY2xpZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtYXBpLXJlc3BvbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIFRhc2s8SUFwaVJlc3BvbnNlPFQ+PiBpbnN0ZWFkIG9mIFRhc2s8VD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2Utb2JzZXJ2YWJsZS1yZXNwb25zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIElPYnNlcnZhYmxlIGluc3RlYWQgb2YgVGFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBhY2Nlc3NpYmlsaXR5IG9mIHRoZSBnZW5lcmF0ZWQgdHlwZXMgdG8gJ2ludGVybmFsJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jYW5jZWxsYXRpb24tdG9rZW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNhbmNlbGxhdGlvbiB0b2tlbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1vcGVyYXRpb24taGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgb3BlcmF0aW9uIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1sb2dnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgbG9nIGVycm9ycyBvciBjb2xsZWN0IHRlbGVtZXRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFkZGl0aW9uYWwgbmFtZXNwYWNlIHRvIGdlbmVyYXRlZCB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1leGNsdWRlLW5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjbHVkZSBuYW1lc3BhY2Ugb24gZ2VuZXJhdGVkIHR5cGVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtaXNvLWRhdGUtZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbGljaXRseSBmb3JtYXQgZGF0ZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBpbiBJU08gODYwMSBzdGFuZGFyZCBkYXRlIGZvcm1hdCB1c2luZyBkZWxpbWl0ZXJzICgyMDIzLTA2LTE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tdWx0aXBsZS1pbnRlcmZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgYSBSZWZpdCBpbnRlcmZhY2UgZm9yIGVhY2ggZW5kcG9pbnQuIE1heSBiZSBvbmUgb2YgQnlFbmRwb2ludCwgQnlUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tdWx0aXBsZS1maWxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbXVsdGlwbGUgZmlsZXMgaW5zdGVhZCBvZiBhIHNpbmdsZSBsYXJnZSBmaWxlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG91dHB1dCBmaWxlcyBjYW4gYmUgdGhlIGZvbGxvd2luZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBSZWZpdEludGVyZmFjZXMuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEZXBlbmRlbmN5SW5qZWN0aW9uLmNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBDb250cmFjdHMuY3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tYXRjaC1wYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIFBhdGhzIHRoYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gTWF5IGJlIHNldCBtdWx0aXBsZSB0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIEVuZHBvaW50cyB0aGF0IGNvbnRhaW4gdGhpcyB0YWcuIE1heSBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIHJlc3VsdCBpbiBPUidlZCBldmFsdWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1za2lwLXZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCB2YWxpZGF0aW9uIG9mIHRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1kZXByZWNhdGVkLW9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgZGVwcmVjYXRlZCBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1vcGVyYXRpb24tbmFtZS10ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgb3BlcmF0aW9uIG5hbWVzIHVzaW5nIHBhdHRlcm4uIFdoZW4gdXNpbmcgLS1tdWx0aXBsZS1pbnRlcmZhY2VzIEJ5RW5kcG9pbnQsIHRoaXMgaXMgbmFtZSBvZiB0aGUgRXhlY3V0ZSgpIG1ldGhvZCBpbiB0aGUgaW50ZXJmYWNlCiAgICAgICAgLS1vcHRpb25hbC1udWxsYWJsZS1wYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbnVsbGFibGUgcGFyYW1ldGVycyBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS10cmltLXVudXNlZC1zY2hlbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB1bnJlZmVyZW5jZWQgY29tcG9uZW50cyBzY2hlbWEgdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBhIG1pbmltdW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1rZWVwLXNjaGVtYSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yY2UgdG8ga2VlcCBtYXRjaGluZyBzY2hlbWEsIHVzZXMgcmVndWxhciBleHByZXNzaW9ucy4gVXNlIHRvZ2V0aGVyIHdpdGggIi0tdHJpbS11bnVzZWQtc2NoZW1hIi4gQ2FuIGJlIHNldCBtdWx0aXBsZSB0aW1lcyAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1iYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3Qgc2hvdyBkb25hdGlvbiBiYW5uZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1za2lwLWRlZmF1bHQtYWRkaXRpb25hbC1wcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIHRydWUgdG8gc2tpcCBkZWZhdWx0IGFkZGl0aW9uYWwgcHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1vcGVyYXRpb24tbmFtZS1nZW5lcmF0b3IgICAgICAgICAgICAgIERlZmF1bHQgICAgICAgICAgVGhlIE5Td2FnIElPcGVyYXRpb25OYW1lR2VuZXJhdG9yIGltcGxlbWVudGF0aW9uIHRvIHVzZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF5IGJlIG9uZSBvZjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBEZWZhdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tT3BlcmF0aW9uSWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tUGF0aFNlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRPcGVyYXRpb25JZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRPcGVyYXRpb25OYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRQYXRoU2VnbWVudHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTaW5nbGVDbGllbnRGcm9tT3BlcmF0aW9uSWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTaW5nbGVDbGllbnRGcm9tUGF0aFNlZ21lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvL2FwaS9SZWZpdHRlci5Db3JlLk9wZXJhdGlvbk5hbWVHZW5lcmF0b3JUeXBlcy5odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbW11dGFibGUtcmVjb3JkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgY29udHJhY3RzIGFzIGltbXV0YWJsZSByZWNvcmRzIGluc3RlYWQgb2YgY2xhc3NlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtYXBpenIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIEFwaXpyIGJ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBZGRpbmcgYSBmaW5hbCBJQXBpenJSZXF1ZXN0T3B0aW9ucyBvcHRpb25zIHBhcmFtZXRlciB0byBhbGwgZ2VuZXJhdGVkIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBQcm92aWRpbmcgY2FuY2VsbGF0aW9uIHRva2VucyBieSBBcGl6ciByZXF1ZXN0IG9wdGlvbnMgaW5zdGVhZCBvZiBhIGRlZGljYXRlZCBwYXJhbWV0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBVc2luZyBtZXRob2Qgb3ZlcmxvYWRzIGluc3RlYWQgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBodHRwczovL3d3dy5hcGl6ci5uZXQgdG8gZ2V0IHN0YXJ0ZWQgd2l0aCBBcGl6ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtZHluYW1pYy1xdWVyeXN0cmluZy1wYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIHdyYXBwaW5nIG11bHRpcGxlIHF1ZXJ5IHBhcmFtZXRlcnMgaW50byBhIHNpbmdsZSBjb21wbGV4IG9uZS4gRGVmYXVsdCBpcyBubyB3cmFwcGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGl2ZXVpL3JlZml0P3RhYj1yZWFkbWUtb3YtZmlsZSNkeW5hbWljLXF1ZXJ5c3RyaW5nLXBhcmFtZXRlcnMgZm9yIG1vcmUgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtcG9seW1vcnBoaWMtc2VyaWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIFN5c3RlbS5UZXh0Lkpzb24gcG9seW1vcnBoaWMgc2VyaWFsaXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKVG8gZ2VuZXJhdGUgY29kZSBmcm9tIGFuIE9wZW5BUEkgc3BlY2lmaWNhdGlvbnMgZmlsZSwgcnVuIHRoZSBmb2xsb3dpbmc6CgpgYGBzaGVsbAokIHJlZml0dGVyIFtwYXRoIHRvIE9wZW5BUEkgc3BlYyBmaWxlXSAtLW5hbWVzcGFjZSAiW1lvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlXSIKYGBgCgpUaGlzIHdpbGwgZ2VuZXJhdGUgYSBmaWxlIGNhbGxlZCBgT3V0cHV0LmNzYCB3aGljaCBjb250YWlucyB0aGUgUmVmaXQgaW50ZXJmYWNlIGFuZCBjb250cmFjdCBjbGFzc2VzIGdlbmVyYXRlZCB1c2luZyBbTlN3YWddKGh0dHBzOi8vZ2l0aHViLmNvbS9SaWNvU3V0ZXIvTlN3YWcpCgojIyBTb3VyY2UgR2VuZXJhdG9yCgpSZWZpdHRlciBpcyBhdmFpbGFibGUgYXMgYSBDIyBTb3VyY2UgR2VuZXJhdG9yIHRoYXQgdXNlcyB0aGUgW1JlZml0dGVyLkNvcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci90cmVlL21haW4vc3JjL1JlZml0dGVyLkNvcmUpIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYSBSRVNUIEFQSSBDbGllbnQgdXNpbmcgdGhlIFtSZWZpdF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0aXZldWkvcmVmaXQpIGxpYnJhcnkuIFJlZml0dGVyIGNhbiBnZW5lcmF0ZSB0aGUgUmVmaXQgaW50ZXJmYWNlIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4gUmVmaXR0ZXIgY291bGQgZm9ybWF0IHRoZSBnZW5lcmF0ZWQgUmVmaXQgaW50ZXJmYWNlIHRvIGJlIG1hbmFnZWQgYnkgW0FwaXpyXShodHRwczovL3d3dy5hcGl6ci5uZXQpIGFuZCBnZW5lcmF0ZSBzb21lIHJlZ2lzdHJhdGlvbiBoZWxwZXJzIHRvby4KClRoZSBSZWZpdHRlciBzb3VyY2UgZ2VuZXJhdG9yIGlzIGEgYml0IHVudHJhZGl0aW9uYWwgaW4gYSBzZW5zZSB0aGF0IGl0IGNyZWF0ZXMgYSBmb2xkZXIgY2FsbGVkIGBHZW5lcmF0ZWRgIGluIHRoZSBzYW1lIGxvY2F0aW9uIGFzIHRoZSBgLnJlZml0dGVyYCBmaWxlIGFuZCBnZW5lcmF0ZXMgZmlsZXMgdG8gZGlzayB1bmRlciB0aGUgYEdlbmVyYXRlZGAgZm9sZGVyIChjYW4gYmUgY2hhbmdlZCB3aXRoIGAtLW91dHB1dEZvbGRlcmApLiBUaGUgc291cmNlIGdlbmVyYXRvciBvdXRwdXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBwcm9qZWN0IGFuZCBjb21taXR0ZWQgdG8gc291cmNlIGNvbnRyb2wuIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHRoZXJlIGlzIG5vIG90aGVyIHdheSB0byB0cmlnZ2VyIHRoZSBSZWZpdCBzb3VyY2UgZ2VuZXJhdG9yIHRvIHBpY2t1cCB0aGUgUmVmaXR0ZXIgZ2VuZXJhdGVkIGNvZGUgCgoqKiooVHJhbnNsYXRpb246IEkgY291bGRuJ3QgZm9yIHRoZSBsaWZlIG9mIG1lIGZpZ3VyZSBob3cgdG8gZ2V0IHRoYXQgdG8gd29yaywgc29ycnkpKioqCgojIyMgSW5zdGFsbGF0aW9uCgpUaGUgc291cmNlIGdlbmVyYXRvciBpcyBkaXN0cmlidXRlZCBhcyBhIE51R2V0IHBhY2thZ2UgYW5kIHNob3VsZCBiZSBpbnN0YWxsZWQgdG8gdGhlIHByb2plY3QgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIGdlbmVyYXRlZCBjb2RlCgpgYGBzaGVsbApkb3RuZXQgYWRkIHBhY2thZ2UgUmVmaXR0ZXIuU291cmNlR2VuZXJhdG9yCmBgYAoKIyMjIFVzYWdlCgpUaGlzIHNvdXJjZSBnZW5lcmF0b3IgZ2VuZXJhdGVzIGNvZGUgYmFzZWQgb24gYW55IGAucmVmaXR0ZXJgIGZpbGUgaW5jbHVkZWQgdG8gdGhlIHByb2plY3QgYXMgYEFkZGl0aW9uYWxGaWxlc2AuCgpUaGUgZ2VuZXJhdG9yIGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdCBhbGwgYC5yZWZpdHRlcmAgZmlsZXMgaW5zaWRlIHRoZSBwcm9qZWN0IHRoYXQgcmVmZXJlbmNlZCB0aGUgYFJlZml0dGVyLlNvdXJjZUdlbmVyYXRvcmAgcGFja2FnZSBhbmQgdGhlcmUgaXMgbm8gbmVlZCB0byBpbmNsdWRlIHRoZW0gbWFudWFsbHkgYXMgYEFkZGl0aW9uYWxGaWxlc2AKCiMjIyAuUmVmaXR0ZXIgRmlsZSBmb3JtYXQKClRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBgLnJlZml0dGVyYCBmaWxlCgpgYGBqcwp7CiAgIm9wZW5BcGlQYXRoIjogIi9wYXRoL3RvL3lvdXIvb3BlbkFQSSIsIC8vIFJlcXVpcmVkCiAgIm5hbWVzcGFjZSI6ICJPcmcuU3lzdGVtLlNlcnZpY2UuQXBpLkdlbmVyYXRlZENvZGUiLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1HZW5lcmF0ZWRDb2RlCiAgImNvbnRyYWN0c05hbWVzcGFjZSI6ICJPcmcuU3lzdGVtLlNlcnZpY2UuQXBpLkdlbmVyYXRlZENvZGUuQ29udHJhY3RzIiwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9R2VuZXJhdGVkQ29kZQogICJuYW1pbmciOiB7CiAgICAidXNlT3BlbkFwaVRpdGxlIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAgICJpbnRlcmZhY2VOYW1lIjogIk15QXBpQ2xpZW50IiAvLyBPcHRpb25hbC4gRGVmYXVsdD1BcGlDbGllbnQKICB9LAogICJnZW5lcmF0ZUNvbnRyYWN0cyI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAiZ2VuZXJhdGVDbGllbnRzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJnZW5lcmF0ZVhtbERvY0NvZGVDb21tZW50cyI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAiZ2VuZXJhdGVTdGF0dXNDb2RlQ29tbWVudHMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgImFkZEF1dG9HZW5lcmF0ZWRIZWFkZXIiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgImFkZEFjY2VwdEhlYWRlcnMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgInJldHVybklBcGlSZXNwb25zZSI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICJyZXNwb25zZVR5cGVPdmVycmlkZSI6IHsgLy8gT3B0aW9uYWwuIERlZmF1bHQ9e30KICAgICJGaWxlX1VwbG9hZCI6ICJJQXBpUmVzcG9uc2UiLAogICAgIkZpbGVfRG93bmxvYWQiOiAiU3lzdGVtLk5ldC5IdHRwLkh0dHBDb250ZW50IgogIH0sCiAgImdlbmVyYXRlT3BlcmF0aW9uSGVhZGVycyI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAidHlwZUFjY2Vzc2liaWxpdHkiOiAiUHVibGljIiwgLy8gT3B0aW9uYWwuIFZhbHVlcz1QdWJsaWN8SW50ZXJuYWwuIERlZmF1bHQ9UHVibGljCiAgInVzZUNhbmNlbGxhdGlvblRva2VucyI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICJ1c2VJc29EYXRlRm9ybWF0IjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgIm11bHRpcGxlSW50ZXJmYWNlcyI6ICJCeUVuZHBvaW50IiwgLy8gT3B0aW9uYWwuIE1heSBiZSBvbmUgb2YgIkJ5RW5kcG9pbnQiIG9yICJCeVRhZyIKICAiZ2VuZXJhdGVEZXByZWNhdGVkT3BlcmF0aW9ucyI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgIm9wZXJhdGlvbk5hbWVUZW1wbGF0ZSI6ICJ7b3BlcmF0aW9uTmFtZX1Bc3luYyIsIC8vIE9wdGlvbmFsLiBNdXN0IGNvbnRhaW4ge29wZXJhdGlvbk5hbWV9IHdoZW4gbXVsdGlwbGVJbnRlcmZhY2VzICE9IEJ5RW5kcG9pbnQKICAib3B0aW9uYWxQYXJhbWV0ZXJzIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgIm91dHB1dEZvbGRlciI6ICIuLi9DdXN0b21PdXRwdXQiIC8vIE9wdGlvbmFsLiBEZWZhdWx0PS4vR2VuZXJhdGVkCiAgIm91dHB1dEZpbGVuYW1lIjogIlJlZml0SW50ZXJmYWNlLmNzIiwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9T3V0cHV0LmNzIGZvciBDTEkgdG9vbAogICJjb250cmFjdHNPdXRwdXRGb2xkZXIiOiAiLi4vQ29udHJhY3RzIiwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9TlVMTAogICJnZW5lcmF0ZU11bHRpcGxlRmlsZXMiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAiYWRkaXRpb25hbE5hbWVzcGFjZXMiOiBbIC8vIE9wdGlvbmFsCiAgICAiTmFtZXNwYWNlMSIsCiAgICAiTmFtZXNwYWNlMiIKICBdLAogICJpbmNsdWRlVGFncyI6IFsgLy8gT3B0aW9uYWwuIE9wZW5BUEkgVGFnIHRvIGluY2x1ZGUgd2hlbiBnZW5lcmF0aW5nIGNvZGUKICAgICJQZXQiLAogICAgIlN0b3JlIiwKICAgICJVc2VyIgogIF0sCiAgImluY2x1ZGVQYXRoTWF0Y2hlcyI6IFsgLy8gT3B0aW9uYWwuIE9ubHkgaW5jbHVkZSBQYXRocyB0aGF0IG1hdGNoIHRoZSBwcm92aWRlZCByZWd1bGFyIGV4cHJlc3Npb24KICAgICJeL3BldC8uKiIsCiAgICAiXi9zdG9yZS8uKiIKICBdLAogICJ0cmltVW51c2VkU2NoZW1hIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgImtlZXBTY2hlbWFQYXR0ZXJucyI6IFsgLy8gT3B0aW9uYWwuIEZvcmNlIHRvIGtlZXAgbWF0Y2hpbmcgc2NoZW1hLCB1c2VzIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFVzZSB0b2dldGhlciB3aXRoIHRyaW1VbnVzZWRTY2hlbWE9dHJ1ZQogICAgIl5Nb2RlbCQiLAogICAgIl5QZXJzb24uKyIKICBdLAogICJnZW5lcmF0ZURlZmF1bHRBZGRpdGlvbmFsUHJvcGVydGllcyI6IHRydWUsIC8vIE9wdGlvbmFsLiBkZWZhdWx0PXRydWUKICAib3BlcmF0aW9uTmFtZUdlbmVyYXRvciI6ICJEZWZhdWx0IiwgLy8gT3B0aW9uYWwuIE1heSBiZSBvbmUgb2YgRGVmYXVsdCwgTXVsdGlwbGVDbGllbnRzRnJvbU9wZXJhdGlvbklkLCBNdWx0aXBsZUNsaWVudHNGcm9tUGF0aFNlZ21lbnRzLCBNdWx0aXBsZUNsaWVudHNGcm9tRmlyc3RUYWdBbmRPcGVyYXRpb25JZCwgTXVsdGlwbGVDbGllbnRzRnJvbUZpcnN0VGFnQW5kT3BlcmF0aW9uTmFtZSwgTXVsdGlwbGVDbGllbnRzRnJvbUZpcnN0VGFnQW5kUGF0aFNlZ21lbnRzLCBTaW5nbGVDbGllbnRGcm9tT3BlcmF0aW9uSWQsIFNpbmdsZUNsaWVudEZyb21QYXRoU2VnbWVudHMKICAiaW1tdXRhYmxlUmVjb3JkcyI6IGZhbHNlLAogICJ1c2VEeW5hbWljUXVlcnlzdHJpbmdQYXJhbWV0ZXJzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAidXNlUG9seW1vcnBoaWNTZXJpYWxpemF0aW9uIiwgZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgImRlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyI6IHsgLy8gT3B0aW9uYWwKICAgICJiYXNlVXJsIjogImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwgLy8gT3B0aW9uYWwuIExlYXZlIHRoaXMgYmxhbmsgdG8gc2V0IHRoZSBiYXNlIGFkZHJlc3MgbWFudWFsbHkKICAgICJodHRwTWVzc2FnZUhhbmRsZXJzIjogWyAvLyBPcHRpb25hbAogICAgICAgICJBdXRob3JpemF0aW9uTWVzc2FnZUhhbmRsZXIiLCAKICAgICAgICAiVGVsZW1ldHJ5TWVzc2FnZUhhbmRsZXIiIAogICAgXSwKICAgICJ1c2VQb2xseSI6IHRydWUsIC8vIERFUFJFQ0FURUQgLSBVc2UgInRyYW5zaWVudEVycm9ySGFuZGxlciI6ICJOb25lfFBvbGx5fEh0dHBSZXNpbGllbmNlIiBpbnN0ZWFkCiAgICAidHJhbnNpZW50RXJyb3JIYW5kbGVyIjogIkh0dHBSZXNpbGllbmNlIiwgLy8gT3B0aW9uYWwuIFNldCB0aGlzIHRvIGNvbmZpZ3VyZSB0cmFuc2llbnQgZXJyb3IgaGFuZGxpbmcgd2l0aCBhIHJldHJ5IHBvbGljeSB0aGF0IHVzZXMgYSBqaXR0ZXJlZCBiYWNrb2ZmLiBNYXkgYmUgb25lIG9mIE5vbmUsIFBvbGx5LCBIdHRwUmVzaWxpZW5jZQogICAgIm1heFJldHJ5Q291bnQiOiAzLCAvLyBPcHRpb25hbC4gRGVmYXVsdD02CiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUgLy8gT3B0aW9uYWwuIERlZmF1bHQ9MS4wCiAgfSwKICAiYXBpenJTZXR0aW5ncyI6IHsgLy8gT3B0aW9uYWwKICAgICJ3aXRoUmVxdWVzdE9wdGlvbnMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgICAid2l0aFJlZ2lzdHJhdGlvbkhlbHBlciI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgICAid2l0aENhY2hlUHJvdmlkZXIiOiAiSW5NZW1vcnkiLCAvLyBPcHRpb25hbC4gVmFsdWVzPU5vbmV8QWthdmFjaGV8TW9ua2V5Q2FjaGV8SW5NZW1vcnl8RGlzdHJpYnV0ZWRBc1N0cmluZ3xEaXN0cmlidXRlZEFzQnl0ZUFycmF5LiBEZWZhdWx0PU5vbmUKICAgICJ3aXRoUHJpb3JpdHkiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICAgIndpdGhNZWRpYXRpb24iOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICAgIndpdGhPcHRpb25hbE1lZGlhdGlvbiI6IHRydWUsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgICAid2l0aE1hcHBpbmdQcm92aWRlciI6ICJBdXRvTWFwcGVyIiwgLy8gT3B0aW9uYWwuIFZhbHVlcz1Ob25lfEF1dG9NYXBwZXJ8TWFwc3Rlci4gRGVmYXVsdD1Ob25lCiAgICAid2l0aEZpbGVUcmFuc2ZlciI6IHRydWUgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICB9LAogICJjb2RlR2VuZXJhdG9yU2V0dGluZ3MiOiB7IC8vIE9wdGlvbmFsLiBEZWZhdWx0IHNldHRpbmdzIGFyZSB0aGUgdmFsdWVzIHNldCBpbiB0aGlzIGV4YW1wbGUKICAgICJyZXF1aXJlZFByb3BlcnRpZXNNdXN0QmVEZWZpbmVkIjogdHJ1ZSwKICAgICJnZW5lcmF0ZURhdGFBbm5vdGF0aW9ucyI6IHRydWUsCiAgICAiYW55VHlwZSI6ICJvYmplY3QiLAogICAgImRhdGVUeXBlIjogIlN5c3RlbS5EYXRlVGltZU9mZnNldCIsCiAgICAiZGF0ZVRpbWVUeXBlIjogIlN5c3RlbS5EYXRlVGltZU9mZnNldCIsCiAgICAidGltZVR5cGUiOiAiU3lzdGVtLlRpbWVTcGFuIiwKICAgICJ0aW1lU3BhblR5cGUiOiAiU3lzdGVtLlRpbWVTcGFuIiwKICAgICJhcnJheVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUNvbGxlY3Rpb24iLAogICAgImRpY3Rpb25hcnlUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklEaWN0aW9uYXJ5IiwKICAgICJhcnJheUluc3RhbmNlVHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbiIsCiAgICAiZGljdGlvbmFyeUluc3RhbmNlVHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5IiwKICAgICJhcnJheUJhc2VUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5PYmplY3RNb2RlbC5Db2xsZWN0aW9uIiwKICAgICJkaWN0aW9uYXJ5QmFzZVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeSIsCiAgICAicHJvcGVydHlTZXR0ZXJBY2Nlc3NNb2RpZmllciI6ICIiLAogICAgImdlbmVyYXRlSW1tdXRhYmxlQXJyYXlQcm9wZXJ0aWVzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVJbW11dGFibGVEaWN0aW9uYXJ5UHJvcGVydGllcyI6IGZhbHNlLAogICAgImhhbmRsZVJlZmVyZW5jZXMiOiBmYWxzZSwKICAgICJqc29uU2VyaWFsaXplclNldHRpbmdzVHJhbnNmb3JtYXRpb25NZXRob2QiOiBudWxsLAogICAgImdlbmVyYXRlSnNvbk1ldGhvZHMiOiBmYWxzZSwKICAgICJlbmZvcmNlRmxhZ0VudW1zIjogZmFsc2UsCiAgICAiaW5saW5lTmFtZWREaWN0aW9uYXJpZXMiOiBmYWxzZSwKICAgICJpbmxpbmVOYW1lZFR1cGxlcyI6IHRydWUsCiAgICAiaW5saW5lTmFtZWRBcnJheXMiOiBmYWxzZSwKICAgICJnZW5lcmF0ZU9wdGlvbmFsUHJvcGVydGllc0FzTnVsbGFibGUiOiBmYWxzZSwKICAgICJnZW5lcmF0ZU51bGxhYmxlUmVmZXJlbmNlVHlwZXMiOiBmYWxzZSwKICAgICJnZW5lcmF0ZU5hdGl2ZVJlY29yZHMiOiBmYWxzZSwKICAgICJnZW5lcmF0ZURlZmF1bHRWYWx1ZXMiOiB0cnVlLAogICAgImlubGluZU5hbWVkQW55IjogZmFsc2UsCiAgICAiZXhjbHVkZWRUeXBlTmFtZXMiOiBbCiAgICAgICJFeGNsdWRlZFR5cGVGb28iLAogICAgICAiRXhjbHVkZWRUeXBlQmFyIgogICAgXQogIH0KfQpgYGAKCi0gYG9wZW5BcGlQYXRoYCAtIHBvaW50cyB0byB0aGUgT3BlbkFQSSBTcGVjaWZpY2F0aW9ucyBmaWxlLiBUaGlzIGNhbiBiZSB0aGUgcGF0aCB0byBhIGZpbGUgc3RvcmVkIG9uIGRpc2ssIHJlbGF0aXZlIHRvIHRoZSBgLnJlZml0dGVyYCBmaWxlLiBUaGlzIGNhbiBhbHNvIGJlIGEgVVJMIHRvIGEgcmVtb3RlIGZpbGUgdGhhdCB3aWxsIGJlIGRvd25sb2FkZWQgb3ZlciBIVFRQL0hUVFBTCi0gYG5hbWVzcGFjZWAgLSB0aGUgbmFtZXNwYWNlIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLiBJZiBub3Qgc3BlY2lmaWVkLCB0aGlzIGRlZmF1bHRzIHRvIGBHZW5lcmF0ZWRDb2RlYAotIGBuYW1pbmcudXNlT3BlbkFwaVRpdGxlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIE9wZW5BcGkgdGl0bGUgc2hvdWxkIGJlIHVzZWQuIERlZmF1bHQgaXMgYHRydWVgCi0gYG5hbWluZy5pbnRlcmZhY2VOYW1lYCAtIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQgaW50ZXJmYWNlLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBhdXRvbWF0aWNhbGx5IHByZWZpeCB0aGlzIHdpdGggYElgIHNvIGlmIHRoaXMgc2V0IHRvIGBNeUFwaUNsaWVudGAgdGhlbiB0aGUgZ2VuZXJhdGVkIGludGVyZmFjZSBpcyBjYWxsZWQgYElNeUFwaUNsaWVudGAuIERlZmF1bHQgaXMgYEFwaUNsaWVudGAKLSBgZ2VuZXJhdGVDb250cmFjdHNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBjb250cmFjdHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gQSB1c2UgY2FzZSBmb3IgdGhpcyBpcyBzZXZlcmFsIEFQSSBjbGllbnRzIHVzZSB0aGUgc2FtZSBjb250cmFjdHMuIERlZmF1bHQgaXMgYHRydWVgCi0gYGdlbmVyYXRlQ2xpZW50c2A6ICAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgY2xpZW50cyBzaG91bGQgYmUgZ2VuZXJhdGVkLiBBIHVzZSBjYXNlIGZvciB0aGlzIGlzIHRvIHNlcGVyYXRlIGNsaWVudHMgYW5kIGNvbnRyYWN0cyBpbiB0d28gZ2VuZXJhdGlvbgotIGBnZW5lcmF0ZVhtbERvY0NvZGVDb21tZW50c2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgZ2VuZXJhdGVTdGF0dXNDb2RlQ29tbWVudHNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgWE1MIGRvY3MgZm9yIGBBcGlFeGNlcHRpb25gIGFuZCBgSUFwaVJlc3BvbnNlYCBjb250YWluIGRldGFpbGVkIGRlc2NyaXB0aW9ucyBmb3IgZXZlcnkgZG9jdW1lbnRlZCBzdGF0dXMgY29kZS4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQXV0b0dlbmVyYXRlZEhlYWRlcmAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQWNjZXB0SGVhZGVyc2AgLSAgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBhZGQgYWNjZXB0IGhlYWRlcnMgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXS4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgcmV0dXJuSUFwaVJlc3BvbnNlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmV0dXJuIGBJQXBpUmVzcG9uc2U8VD5gIG9iamVjdHMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGByZXNwb25zZVR5cGVPdmVycmlkZWAgLSBhIGRpY3Rpb25hcnkgd2l0aCBvcGVyYXRpb24gaWRzIChhcyBzcGVjaWZpZWQgaW4gdGhlIE9wZW5BUEkgZG9jdW1lbnQpIGFuZCBhIHBhcnRpY3VsYXIgcmV0dXJuIHR5cGUgdG8gdXNlLiBUaGUgdHlwZXMgYXJlIHdyYXBwZWQgaW4gYSB0YXNrLCBidXQgb3RoZXJ3aXNlIHVubW9kaWZpZWQgKHNvIG1ha2Ugc3VyZSB0byBzcGVjaWZ5IG9yIGltcG9ydCB0aGVpciBuYW1lc3BhY2VzKS4gRGVmYXVsdCBpcyBge31gCi0gYGdlbmVyYXRlT3BlcmF0aW9uSGVhZGVyc2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHVzZSBvcGVyYXRpb24gaGVhZGVycyBpbiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuIERlZmF1bHQgaXMgYHRydWVgCi0gYHR5cGVBY2Nlc3NpYmlsaXR5YCAtIHRoZSBnZW5lcmF0ZWQgdHlwZSBhY2Nlc3NpYmlsaXR5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGBQdWJsaWNgIGFuZCBgSW50ZXJuYWxgLiBEZWZhdWx0IGlzIGBQdWJsaWNgCi0gYHVzZUNhbmNlbGxhdGlvblRva2Vuc2AgLSBVc2UgY2FuY2VsbGF0aW9uIHRva2VucyBpbiB0aGUgZ2VuZXJhdGVkIG1ldGhvZHMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGB1c2VJc29EYXRlRm9ybWF0YCAtIFNldCB0byBgdHJ1ZWAgdG8gZXhwbGljaXRseSBmb3JtYXQgZGF0ZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBpbiBJU08gODYwMSBzdGFuZGFyZCBkYXRlIGZvcm1hdCB1c2luZyBkZWxpbWl0ZXJzIChmb3IgZXhhbXBsZTogMjAyMy0wNi0xNSkuIERlZmF1bHQgaXMgYGZhbHNlYAotIGBtdWx0aXBsZUludGVyZmFjZXNgIC0gU2V0IHRvIGBCeUVuZHBvaW50YCB0byBnZW5lcmF0ZSBhbiBpbnRlcmZhY2UgZm9yIGVhY2ggZW5kcG9pbnQsIG9yIGBCeVRhZ2AgdG8gZ3JvdXAgRW5kcG9pbnRzIGJ5IHRoZWlyIFRhZyAobGlrZSBTd2FnZ2VyVUkgZ3JvdXBzIHRoZW0pLgotIGBvdXRwdXRGb2xkZXJgIC0gYSBzdHJpbmcgZGVzY3JpYmluZyBhIHJlbGF0aXZlIHBhdGggdG8gYSBkZXNpcmVkIG91dHB1dCBmb2xkZXIuIERlZmF1bHQgaXMgYC4vR2VuZXJhdGVkYAotIGBvdXRwdXRGaWxlbmFtZWAgLSBPdXRwdXQgZmlsZW5hbWUuIERlZmF1bHQgaXMgYE91dHB1dC5jc2Agd2hlbiB1c2VkIGZyb20gdGhlIENMSSB0b29sLCBvdGhlcndpc2UgaXRzIHRoZSAucmVmaXR0ZXIgZmlsZW5hbWUuIFNvIGBQZXRzdG9yZS5yZWZpdHRlcmAgYmVjb21lcyBgUGV0c3RvcmUuY3NgLgotIGBhZGRpdGlvbmFsTmFtZXNwYWNlc2AgLSBBIGNvbGxlY3Rpb24gb2YgYWRkaXRpb25hbCBuYW1lc3BhY2VzIHRvIGluY2x1ZGUgaW4gdGhlIGdlbmVyYXRlZCBmaWxlLiBBIHVzZSBjYXNlIGZvciB0aGlzIGlzIHdoZW4geW91IHdhbnQgdG8gcmV1c2UgY29udHJhY3RzIGZyb20gYSBkaWZmZXJlbnQgbmFtZXNwYWNlIHRoYW4gdGhlIGdlbmVyYXRlZCBjb2RlLiBEZWZhdWx0IGlzIGVtcHR5Ci0gYGluY2x1ZGVUYWdzYCAtIEEgY29sbGVjdGlvbiBvZiB0YWdzIHRvIHVzZSBhIGZpbHRlciBmb3IgaW5jbHVkaW5nIGVuZHBvaW50cyB0aGF0IGNvbnRhaW4gdGhpcyB0YWcuCi0gYGluY2x1ZGVQYXRoTWF0Y2hlc2AgLSBBIGNvbGxlY3Rpb24gb2YgcmVndWxhciBleHByZXNzaW9ucyB1c2VkIHRvIGZpbHRlciBwYXRocy4KLSBgZ2VuZXJhdGVEZXByZWNhdGVkT3BlcmF0aW9uc2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGRlcHJlY2F0ZWQgb3BlcmF0aW9ucyBzaG91bGQgYmUgZ2VuZXJhdGVkIG9yIHNraXBwZWQuIERlZmF1bHQgaXMgYHRydWVgCi0gYG9wZXJhdGlvbk5hbWVUZW1wbGF0ZWAgLSBHZW5lcmF0ZSBvcGVyYXRpb24gbmFtZXMgdXNpbmcgcGF0dGVybi4gVGhpcyBtdXN0IGNvbnRhaW4gdGhlIHN0cmluZyB7b3BlcmF0aW9uTmFtZX0uIEFuIGV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBjb3VsZCBiZSBge29wZXJhdGlvbk5hbWV9QXN5bmNgIHRvIHN1ZmZpeCBhbGwgbWV0aG9kIG5hbWVzIHdpdGggQXN5bmMKLSBgb3B0aW9uYWxQYXJhbWV0ZXJzYCAtIEdlbmVyYXRlIG5vbi1yZXF1aXJlZCBwYXJhbWV0ZXJzIGFzIG51bGxhYmxlIG9wdGlvbmFsIHBhcmFtZXRlcnMKLSBgdHJpbVVudXNlZFNjaGVtYWAgLSBSZW1vdmVzIHVucmVmZXJlbmNlZCBjb21wb25lbnRzIHNjaGVtYSB0byBrZWVwIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IHRvIGEgbWluaW11bQotIGBrZWVwU2NoZW1hUGF0dGVybnNgOiBBIGNvbGxlY3Rpb24gb2YgcmVndWxhciBleHByZXNzaW9ucyB0byBmb3JjZSB0byBrZWVwIG1hdGNoaW5nIHNjaGVtYS4gVGhpcyBpcyB1c2VkIHRvZ2V0aGVyIHdpdGggYHRyaW1VbnVzZWRTY2hlbWFgCi0gYGdlbmVyYXRlRGVmYXVsdEFkZGl0aW9uYWxQcm9wZXJ0aWVzYDogU2V0IHRvIGBmYWxzZWAgdG8gc2tpcCBkZWZhdWx0IGFkZGl0aW9uYWwgcHJvcGVydGllcy4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgb3BlcmF0aW9uTmFtZUdlbmVyYXRvcmA6IFRoZSBOU3dhZyBgSU9wZXJhdGlvbk5hbWVHZW5lcmF0b3JgIGltcGxlbWVudGF0aW9uIHRvIHVzZS4gU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvL2FwaS9SZWZpdHRlci5Db3JlLk9wZXJhdGlvbk5hbWVHZW5lcmF0b3JUeXBlcy5odG1sCi0gYGltbXV0YWJsZVJlY29yZHNgOiBTZXQgdG8gYHRydWVgIHRvIGdlbmVyYXRlIGNvbnRyYWN0cyBhcyBpbW11dGFibGUgcmVjb3JkcyBpbnN0ZWFkIG9mIGNsYXNzZXMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGB1c2VEeW5hbWljUXVlcnlzdHJpbmdQYXJhbWV0ZXJzYDogU2V0IHRvIGB0cnVlYCB0byB3cmFwIG11bHRpcGxlIHF1ZXJ5IHBhcmFtZXRlcnMgaW50byBhIHNpbmdsZSBjb21wbGV4IG9uZS4gRGVmYXVsdCBpcyBgZmFsc2VgIChubyB3cmFwcGluZykuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3RpdmV1aS9yZWZpdD90YWI9cmVhZG1lLW92LWZpbGUjZHluYW1pYy1xdWVyeXN0cmluZy1wYXJhbWV0ZXJzIGZvciBtb3JlIGluZm9ybWF0aW9uLgotIGBkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3NgIC0gU2V0dGluZyB0aGlzIHdpbGwgZ2VuZXJhdGVkIGV4dGVuc2lvbiBtZXRob2RzIHRvIGBJU2VydmljZUNvbGxlY3Rpb25gIGZvciBjb25maWd1cmluZyBSZWZpdCBjbGllbnRzCiAgLSBgYmFzZVVybGAgLSBVc2VkIGFzIHRoZSBIdHRwQ2xpZW50IGJhc2UgYWRkcmVzcy4gTGVhdmUgdGhpcyBibGFuayB0byBtYW51YWxseSBzZXQgdGhlIGJhc2UgVVJMCiAgLSBgaHR0cE1lc3NhZ2VIYW5kbGVyc2AgLSBBIGNvbGxlY3Rpb24gb2YgYEh0dHBNZXNzYWdlSGFuZGxlcmAgdGhhdCBpcyBhZGRlZCB0byB0aGUgSHR0cENsaWVudCBwaXBlbGluZQogIC0gYHVzZVBvbGx5YCAtIChERVBSRUNBVEVEKSBTZXQgdGhpcyB0byB0cnVlIHRvIGNvbmZpZ3VyZSB0aGUgSHR0cENsaWVudCB0byB1c2UgUG9sbHkgdXNpbmcgYSByZXRyeSBwb2xpY3kgd2l0aCBhIGppdHRlcmVkIGJhY2tvZmYKICAtIGB0cmFuc2llbnRFcnJvckhhbmRsZXJgOiBTZXQgdGhpcyB0byBjb25maWd1cmUgdHJhbnNpZW50IGVycm9yIGhhbmRsaW5nIHdpdGggYSByZXRyeSBwb2xpY3kgdGhhdCB1c2VzIGEgaml0dGVyZWQgYmFja29mZi4gU2VlIGh0dHBzOi8vcmVmaXR0ZXIuZ2l0aHViLmlvL2FwaS9SZWZpdHRlci5Db3JlLlRyYW5zaWVudEVycm9ySGFuZGxlci5odG1sCiAgLSBgZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHNgIC0gVGhpcyBpcyB0aGUgZHVyYXRpb24gb2YgdGhlIGluaXRpYWwgcmV0cnkgYmFja29mZi4gRGVmYXVsdCBpcyAxIHNlY29uZAotIGBhcGl6clNldHRpbmdzYCAtIFNldHRpbmcgdGhpcyB3aWxsIGZvcm1hdCBSZWZpdCBpbnRlcmZhY2UgdG8gYmUgbWFuYWdlZCBieSBBcGl6ci4gU2VlIGh0dHBzOi8vd3d3LmFwaXpyLm5ldCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIC0gYHdpdGhSZXF1ZXN0T3B0aW9uc2AgLSBUZWxscyBpZiB0aGUgUmVmaXQgaW50ZXJmYWNlIG1ldGhvZHMgc2hvdWxkIGhhdmUgYSBmaW5hbCBJQXBpenJSZXF1ZXN0T3B0aW9ucyBvcHRpb25zIHBhcmFtZXRlcgogIC0gYHdpdGhSZWdpc3RyYXRpb25IZWxwZXJgIC0gVGVsbHMgaWYgUmVmaXR0ZXIgc2hvdWxkIGdlbmVyYXRlIEFwaXpyIHJlZ2lzdHJhdGlvbiBoZWxwZXJzIChleHRlbmRlZCB3aXRoIGRlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyBzZXQsIG90aGVyd2lzZSBzdGF0aWMpCiAgLSBgd2l0aENhY2hlUHJvdmlkZXJgIC0gU2V0IHRoZSBjYWNoZSBwcm92aWRlciB0byBiZSB1c2VkCiAgLSBgd2l0aFByaW9yaXR5YCAtIFRlbGxzIGlmIEFwaXpyIHNob3VsZCBoYW5kbGUgcmVxdWVzdCBwcmlvcml0eQogIC0gYHdpdGhNZWRpYXRpb25gIC0gVGVsbHMgaWYgQXBpenIgc2hvdWxkIGhhbmRsZSByZXF1ZXN0IG1lZGlhdGlvbiAoZXh0ZW5kZWQgb25seSkKICAtIGB3aXRoT3B0aW9uYWxNZWRpYXRpb25gIC0gVGVsbHMgaWYgQXBpenIgc2hvdWxkIGhhbmRsZSBvcHRpb25hbCByZXF1ZXN0IG1lZGlhdGlvbiAoZXh0ZW5kZWQgb25seSkKICAtIGB3aXRoTWFwcGluZ1Byb3ZpZGVyYCAtIFNldCB0aGUgbWFwcGluZyBwcm92aWRlciB0byBiZSB1c2VkCiAgLSBgd2l0aEZpbGVUcmFuc2ZlcmAgLSBUZWxscyBpZiBBcGl6ciBzaG91bGQgaGFuZGxlIGZpbGUgdHJhbnNmZXIKLSBgY29kZUdlbmVyYXRvclNldHRpbmdzYCAtIFNldHRpbmcgdGhpcyBhbGxvd3MgY3VzdG9taXphdGlvbiBvZiB0aGUgTlN3YWcgZ2VuZXJhdGVkIHR5cGVzIGFuZCBjb250cmFjdHMKICAtIGByZXF1aXJlZFByb3BlcnRpZXNNdXN0QmVEZWZpbmVkYCAtIERlZmF1bHQgaXMgdHJ1ZSwKICAtIGBnZW5lcmF0ZURhdGFBbm5vdGF0aW9uc2AgLSBEZWZhdWx0IGlzIHRydWUsCiAgLSBgYW55VHlwZWAgLSBEZWZhdWx0IGlzIGBvYmplY3RgLAogIC0gYGRhdGVUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5EYXRlVGltZU9mZnNldGAsCiAgLSBgZGF0ZVRpbWVUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5EYXRlVGltZU9mZnNldGAsCiAgLSBgdGltZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLlRpbWVTcGFuYCwKICAtIGB0aW1lU3BhblR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLlRpbWVTcGFuYCwKICAtIGBhcnJheVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSUNvbGxlY3Rpb25gLAogIC0gYGRpY3Rpb25hcnlUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklEaWN0aW9uYXJ5YCwKICAtIGBhcnJheUluc3RhbmNlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbmAsCiAgLSBgZGljdGlvbmFyeUluc3RhbmNlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5EaWN0aW9uYXJ5YCwKICAtIGBhcnJheUJhc2VUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5PYmplY3RNb2RlbC5Db2xsZWN0aW9uYCwKICAtIGBkaWN0aW9uYXJ5QmFzZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAsCiAgLSBgcHJvcGVydHlTZXR0ZXJBY2Nlc3NNb2RpZmllcmAgLSBEZWZhdWx0IGlzIGBgLAogIC0gYGdlbmVyYXRlSW1tdXRhYmxlQXJyYXlQcm9wZXJ0aWVzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVJbW11dGFibGVEaWN0aW9uYXJ5UHJvcGVydGllc2AgLSBEZWZhdWx0IGlzIGZhbHNlLAogIC0gYGhhbmRsZVJlZmVyZW5jZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBqc29uU2VyaWFsaXplclNldHRpbmdzVHJhbnNmb3JtYXRpb25NZXRob2RgIC0gRGVmYXVsdCBpcyBudWxsLAogIC0gYGdlbmVyYXRlSnNvbk1ldGhvZHNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBlbmZvcmNlRmxhZ0VudW1zYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgaW5saW5lTmFtZWREaWN0aW9uYXJpZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBpbmxpbmVOYW1lZFR1cGxlc2AgLSBEZWZhdWx0IGlzIHRydWUsCiAgLSBgaW5saW5lTmFtZWRBcnJheXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBnZW5lcmF0ZU9wdGlvbmFsUHJvcGVydGllc0FzTnVsbGFibGVgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBnZW5lcmF0ZU51bGxhYmxlUmVmZXJlbmNlVHlwZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBnZW5lcmF0ZU5hdGl2ZVJlY29yZHNgIC0gRGVmYXVsdCBpcyBmYWxzZQogIC0gYGdlbmVyYXRlRGVmYXVsdFZhbHVlc2AgLSBEZWZhdWx0IGlzIHRydWUKICAtIGBpbmxpbmVOYW1lZEFueWAgLSBEZWZhdWx0IGlzIGZhbHNlCiAgLSBgZXhjbHVkZWRUeXBlTmFtZXNgIC0gRGVmYXVsdCBpcyBlbXB0eQoKCiMgVXNpbmcgdGhlIGdlbmVyYXRlZCBjb2RlCgpIZXJlJ3MgYW4gZXhhbXBsZSBnZW5lcmF0ZWQgb3V0cHV0IGZyb20gdGhlIFtTd2FnZ2VyIFBldHN0b3JlIGV4YW1wbGVdKGh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8pIHVzaW5nIHRoZSBkZWZhdWx0IHNldHRpbmdzCgoqKkNMSSBUb29sKioKCmBgYGJhc2gKJCByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiCmBgYAoKKipTb3VyY2UgR2VuZXJhdG9yICoqKi5yZWZpdHRlcioqKiBmaWxlKioKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuL29wZW5hcGkuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZSIKfQpgYGAKCioqT3V0cHV0KioKCmBgYGNzCnVzaW5nIFJlZml0Owp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRleHQuSnNvbi5TZXJpYWxpemF0aW9uOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwoKbmFtZXNwYWNlIFlvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlCnsKICAgIFtTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCiAgICBwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVN3YWdnZXJQZXRzdG9yZQogICAgewogICAgICAgIC8vLyA8c3VtbWFyeT5VcGRhdGUgYW4gZXhpc3RpbmcgcGV0PC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5VcGRhdGUgYW4gZXhpc3RpbmcgcGV0IGJ5IElkPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+VXBkYXRlIGFuIGV4aXN0ZW50IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5WYWxpZGF0aW9uIGV4Y2VwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUHV0KCIvcGV0IildCiAgICAgICAgVGFzazxQZXQ+IFVwZGF0ZVBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+QWRkIGEgbmV3IHBldCB0byB0aGUgc3RvcmU8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+Q3JlYXRlIGEgbmV3IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUG9zdCgiL3BldCIpXQogICAgICAgIFRhc2s8UGV0PiBBZGRQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkZpbmRzIFBldHMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5NdWx0aXBsZSBzdGF0dXMgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGZvciBmaWx0ZXI8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBzdGF0dXMgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5U3RhdHVzKFtRdWVyeV0gU3RhdHVzPyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RmluZHMgUGV0cyBieSB0YWdzPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5NdWx0aXBsZSB0YWdzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzLiBVc2UgdGFnMSwgdGFnMiwgdGFnMyBmb3IgdGVzdGluZy48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWdzIj5UYWdzIHRvIGZpbHRlciBieTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHRhZyB2YWx1ZTwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5VGFncyhbUXVlcnkoQ29sbGVjdGlvbkZvcm1hdC5NdWx0aSldIElFbnVtZXJhYmxlPHN0cmluZz4gdGFncyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kIHBldCBieSBJRDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+UmV0dXJucyBhIHNpbmdsZSBwZXQ8L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+SUQgb2YgcGV0IHRvIHJldHVybjwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+UGV0IG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrPFBldD4gR2V0UGV0QnlJZChsb25nIHBldElkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZXMgYSBwZXQgaW4gdGhlIHN0b3JlIHdpdGggZm9ybSBkYXRhPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+TmFtZSBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1cyI+U3RhdHVzIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkLjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbUG9zdCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzayBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RGVsZXRlcyBhIHBldDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5QZXQgaWQgdG8gZGVsZXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgICAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgcGV0IHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtEZWxldGUoIi9wZXQve3BldElkfSIpXQogICAgICAgIFRhc2sgRGVsZXRlUGV0KGxvbmcgcGV0SWQsIFtIZWFkZXIoImFwaV9rZXkiKV0gc3RyaW5nIGFwaV9rZXkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+dXBsb2FkcyBhbiBpbWFnZTwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5JRCBvZiBwZXQgdG8gdXBkYXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFkZGl0aW9uYWxNZXRhZGF0YSI+QWRkaXRpb25hbCBNZXRhZGF0YTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtQb3N0KCIvcGV0L3twZXRJZH0vdXBsb2FkSW1hZ2UiKV0KICAgICAgICBUYXNrPEFwaVJlc3BvbnNlPiBVcGxvYWRGaWxlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIGFkZGl0aW9uYWxNZXRhZGF0YSwgIFN0cmVhbVBhcnQgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5SZXR1cm5zIHBldCBpbnZlbnRvcmllcyBieSBzdGF0dXM8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXM8L3JlbWFya3M+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvc3RvcmUvaW52ZW50b3J5IildCiAgICAgICAgVGFzazxJRGljdGlvbmFyeTxzdHJpbmcsIGludD4+IEdldEludmVudG9yeSgpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+UGxhY2UgYW4gb3JkZXIgZm9yIGEgcGV0PC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5QbGFjZSBhIG5ldyBvcmRlciBpbiB0aGUgc3RvcmU8L3JlbWFya3M+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIGlucHV0PC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUG9zdCgiL3N0b3JlL29yZGVyIildCiAgICAgICAgVGFzazxPcmRlcj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPD0gNSBvciA+IDEwLiBPdGhlciB2YWx1ZXMgd2lsbCBnZW5lcmF0ZWQgZXhjZXB0aW9uczwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9yZGVySWQiPklEIG9mIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvc3RvcmUvb3JkZXIve29yZGVySWR9IildCiAgICAgICAgVGFzazxPcmRlcj4gR2V0T3JkZXJCeUlkKGxvbmcgb3JkZXJJZCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgcHVyY2hhc2Ugb3JkZXIgYnkgSUQ8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPkZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8IDEwMDAuIEFueXRoaW5nIGFib3ZlIDEwMDAgb3Igbm9uaW50ZWdlcnMgd2lsbCBnZW5lcmF0ZSBBUEkgZXJyb3JzPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JkZXJJZCI+SUQgb2YgdGhlIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtEZWxldGUoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrIERlbGV0ZU9yZGVyKGxvbmcgb3JkZXJJZCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5DcmVhdGUgdXNlcjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGVkIHVzZXIgb2JqZWN0PC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veG1sIildCiAgICAgICAgW1Bvc3QoIi91c2VyIildCiAgICAgICAgVGFzayBDcmVhdGVVc2VyKFtCb2R5XSBVc2VyIGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+Q3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXk8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9yZW1hcmtzPgogICAgICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgICAgICBUYXNrPFVzZXI+IENyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dChbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSB1c2VyIG5hbWUgZm9yIGxvZ2luPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBhc3N3b3JkIj5UaGUgcGFzc3dvcmQgZm9yIGxvZ2luIGluIGNsZWFyIHRleHQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3VzZXIvbG9naW4iKV0KICAgICAgICBUYXNrPHN0cmluZz4gTG9naW5Vc2VyKFtRdWVyeV0gc3RyaW5nIHVzZXJuYW1lLCBbUXVlcnldIHN0cmluZyBwYXNzd29yZCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5Mb2dzIG91dCBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIHNlc3Npb248L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgICAgIFRhc2sgTG9nb3V0VXNlcigpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+R2V0IHVzZXIgYnkgdXNlciBuYW1lPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSBuYW1lIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZC4gVXNlIHVzZXIxIGZvciB0ZXN0aW5nLjwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAgICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+VXNlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrPFVzZXI+IEdldFVzZXJCeU5hbWUoc3RyaW5nIHVzZXJuYW1lKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5uYW1lIHRoYXQgbmVlZCB0byBiZSBkZWxldGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlVwZGF0ZSBhbiBleGlzdGVudCB1c2VyIGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIFVwZGF0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lLCBbQm9keV0gVXNlciBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSB1c2VyPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5UaGUgbmFtZSB0aGF0IG5lZWRzIHRvIGJlIGRlbGV0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkLjwvcmV0dXJucz4KICAgICAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvZXhjZXB0aW9uPgogICAgICAgIFtEZWxldGUoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIERlbGV0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lKTsKICAgIH0KfQpgYGAKCkhlcmUncyBhbiBleGFtcGxlIGdlbmVyYXRlZCBvdXRwdXQgZnJvbSB0aGUgW1N3YWdnZXIgUGV0c3RvcmUgZXhhbXBsZV0oaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pbykgY29uZmlndXJlZCB0byB3cmFwIHRoZSByZXR1cm4gdHlwZSBpbiBgSUFwaVJlc3BvbnNlPFQ+YAoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLXVzZS1hcGktcmVzcG9uc2UKYGBgCgoqKlNvdXJjZSBHZW5lcmF0b3IgKioqLnJlZml0dGVyKioqIGZpbGUqKgoKYGBganNvbgp7CiAgIm9wZW5BcGlQYXRoIjogIi4vb3BlbmFwaS5qc29uIiwKICAibmFtZXNwYWNlIjogIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiwKICAicmV0dXJuSUFwaVJlc3BvbnNlIjogdHJ1ZQp9CmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uVGV4dC5Kc29uLlNlcmlhbGl6YXRpb247CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CgpuYW1lc3BhY2UgWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUKewogICAgW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KICAgIHB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJU3dhZ2dlclBldHN0b3JlCiAgICB7CiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPlVwZGF0ZSBhbiBleGlzdGluZyBwZXQgYnkgSWQ8L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5VcGRhdGUgYW4gZXhpc3RlbnQgcGV0IGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5QZXQgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+VmFsaWRhdGlvbiBleGNlcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtQdXQoIi9wZXQiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxQZXQ+PiBVcGRhdGVQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5BZGQgYSBuZXcgcGV0IHRvIHRoZSBzdG9yZTwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPkNyZWF0ZSBhIG5ldyBwZXQgaW4gdGhlIHN0b3JlPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjIwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW1Bvc3QoIi9wZXQiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxQZXQ+PiBBZGRQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkZpbmRzIFBldHMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5NdWx0aXBsZSBzdGF0dXMgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGZvciBmaWx0ZXI8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHN0YXR1cyB2YWx1ZTwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8SUNvbGxlY3Rpb248UGV0Pj4+IEZpbmRQZXRzQnlTdGF0dXMoW1F1ZXJ5XSBTdGF0dXM/IHN0YXR1cyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHRhZ3M8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPk11bHRpcGxlIHRhZ3MgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MuIFVzZSB0YWcxLCB0YWcyLCB0YWczIGZvciB0ZXN0aW5nLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InRhZ3MiPlRhZ3MgdG8gZmlsdGVyIGJ5PC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjIwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB0YWcgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvcGV0L2ZpbmRCeVRhZ3MiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxJQ29sbGVjdGlvbjxQZXQ+Pj4gRmluZFBldHNCeVRhZ3MoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RmluZCBwZXQgYnkgSUQ8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBzaW5nbGUgcGV0PC9yZW1hcmtzPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0byByZXR1cm48L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIElEIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA0PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+UGV0IG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8UGV0Pj4gR2V0UGV0QnlJZChsb25nIHBldElkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZXMgYSBwZXQgaW4gdGhlIHN0b3JlIHdpdGggZm9ybSBkYXRhPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0ibmFtZSI+TmFtZSBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1cyI+U3RhdHVzIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW1Bvc3QoIi9wZXQve3BldElkfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+RGVsZXRlcyBhIHBldDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5QZXQgaWQgdG8gZGVsZXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgcGV0IHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZT4gRGVsZXRlUGV0KGxvbmcgcGV0SWQsIFtIZWFkZXIoImFwaV9rZXkiKV0gc3RyaW5nIGFwaV9rZXkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+dXBsb2FkcyBhbiBpbWFnZTwvc3VtbWFyeT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5JRCBvZiBwZXQgdG8gdXBkYXRlPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImFkZGl0aW9uYWxNZXRhZGF0YSI+QWRkaXRpb25hbCBNZXRhZGF0YTwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtQb3N0KCIvcGV0L3twZXRJZH0vdXBsb2FkSW1hZ2UiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxBcGlSZXNwb25zZT4+IFVwbG9hZEZpbGUobG9uZyBwZXRJZCwgW1F1ZXJ5XSBzdHJpbmcgYWRkaXRpb25hbE1ldGFkYXRhLCAgU3RyZWFtUGFydCBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlJldHVybnMgcGV0IGludmVudG9yaWVzIGJ5IHN0YXR1czwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+UmV0dXJucyBhIG1hcCBvZiBzdGF0dXMgY29kZXMgdG8gcXVhbnRpdGllczwvcmVtYXJrcz4KICAgICAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAgICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgICAgIFtHZXQoIi9zdG9yZS9pbnZlbnRvcnkiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxJRGljdGlvbmFyeTxzdHJpbmcsIGludD4+PiBHZXRJbnZlbnRvcnkoKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PlBsYWNlIGFuIG9yZGVyIGZvciBhIHBldDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+UGxhY2UgYSBuZXcgb3JkZXIgaW4gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIGlucHV0PC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW1Bvc3QoIi9zdG9yZS9vcmRlciIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPE9yZGVyPj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5GaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPD0gNSBvciA+IDEwLiBPdGhlciB2YWx1ZXMgd2lsbCBnZW5lcmF0ZWQgZXhjZXB0aW9uczwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9Im9yZGVySWQiPklEIG9mIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5PcmRlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgICAgICBbR2V0KCIvc3RvcmUvb3JkZXIve29yZGVySWR9IildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8T3JkZXI+PiBHZXRPcmRlckJ5SWQobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSBwdXJjaGFzZSBvcmRlciBieSBJRDwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+Rm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDwgMTAwMC4gQW55dGhpbmcgYWJvdmUgMTAwMCBvciBub25pbnRlZ2VycyB3aWxsIGdlbmVyYXRlIEFQSSBlcnJvcnM8L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJvcmRlcklkIj5JRCBvZiB0aGUgb3JkZXIgdGhhdCBuZWVkcyB0byBiZSBkZWxldGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5PcmRlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDwvbGlzdD4KICAgICAgICAvLy8gPC9yZXR1cm5zPgogICAgICAgIFtEZWxldGUoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZT4gRGVsZXRlT3JkZXIobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPkNyZWF0ZWQgdXNlciBvYmplY3Q8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdC48L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veG1sIildCiAgICAgICAgW1Bvc3QoIi91c2VyIildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U+IENyZWF0ZVVzZXIoW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5DcmVhdGVzIGxpc3Qgb2YgdXNlcnMgd2l0aCBnaXZlbiBpbnB1dCBhcnJheTwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+Q3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXk8L3JlbWFya3M+CiAgICAgICAgLy8vIDxyZXR1cm5zPgogICAgICAgIC8vLyBBIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdDoKICAgICAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgICAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW1Bvc3QoIi91c2VyL2NyZWF0ZVdpdGhMaXN0IildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8VXNlcj4+IENyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dChbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSB1c2VyIG5hbWUgZm9yIGxvZ2luPC9wYXJhbT4KICAgICAgICAvLy8gPHBhcmFtIG5hbWU9InBhc3N3b3JkIj5UaGUgcGFzc3dvcmQgZm9yIGxvZ2luIGluIGNsZWFyIHRleHQ8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz4KICAgICAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAgICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgICAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAgICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lL3Bhc3N3b3JkIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3VzZXIvbG9naW4iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxzdHJpbmc+PiBMb2dpblVzZXIoW1F1ZXJ5XSBzdHJpbmcgdXNlcm5hbWUsIFtRdWVyeV0gc3RyaW5nIHBhc3N3b3JkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PkxvZ3Mgb3V0IGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIgc2Vzc2lvbjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQuPC9yZXR1cm5zPgogICAgICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBMb2dvdXRVc2VyKCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+VGhlIG5hbWUgdGhhdCBuZWVkcyB0byBiZSBmZXRjaGVkLiBVc2UgdXNlcjEgZm9yIHRlc3RpbmcuPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjIwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8aXRlbT4KICAgICAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgICAgICAvLy8gPC9pdGVtPgogICAgICAgIC8vLyA8L2xpc3Q+CiAgICAgICAgLy8vIDwvcmV0dXJucz4KICAgICAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICAgICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFVzZXI+PiBHZXRVc2VyQnlOYW1lKHN0cmluZyB1c2VybmFtZSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5VcGRhdGUgdXNlcjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+bmFtZSB0aGF0IG5lZWQgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5VcGRhdGUgYW4gZXhpc3RlbnQgdXNlciBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiByZXByZXNlbnRpbmcgdGhlIDxzZWUgY3JlZj0iSUFwaVJlc3BvbnNlIi8+IGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdC48L3JldHVybnM+CiAgICAgICAgW1B1dCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBVcGRhdGVVc2VyKHN0cmluZyB1c2VybmFtZSwgW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgdXNlcjwvc3VtbWFyeT4KICAgICAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAgICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+VGhlIG5hbWUgdGhhdCBuZWVkcyB0byBiZSBkZWxldGVkPC9wYXJhbT4KICAgICAgICAvLy8gPHJldHVybnM+CiAgICAgICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAgICAgLy8vIDxsaXN0aGVhZGVyPgogICAgICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgICAgICAvLy8gPGl0ZW0+CiAgICAgICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgICAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdXNlcm5hbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgICAgIC8vLyA8L2l0ZW0+CiAgICAgICAgLy8vIDxpdGVtPgogICAgICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAgICAgLy8vIDxkZXNjcmlwdGlvbj5Vc2VyIG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAgICAgLy8vIDwvaXRlbT4KICAgICAgICAvLy8gPC9saXN0PgogICAgICAgIC8vLyA8L3JldHVybnM+CiAgICAgICAgW0RlbGV0ZSgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPiBEZWxldGVVc2VyKHN0cmluZyB1c2VybmFtZSk7CiAgICB9Cn0KYGBgCgpIZXJlJ3MgYW4gZXhhbXBsZSBnZW5lcmF0ZWQgb3V0cHV0IGZyb20gdGhlIFtTd2FnZ2VyIFBldHN0b3JlIGV4YW1wbGVdKGh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8pIGNvbmZpZ3VyZWQgdG8gZ2VuZXJhdGUgYW4gaW50ZXJmYWNlIGZvciBlYWNoIGVuZHBvaW50CgoqKkNMSSBUb29sKioKCmBgYGJhc2gKJCByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiIC0tbXVsdGlwbGUtaW50ZXJmYWNlcyBCeUVuZHBvaW50CmBgYAoKKipTb3VyY2UgR2VuZXJhdG9yICoqKi5yZWZpdHRlcioqKiBmaWxlKioKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuL29wZW5hcGkuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZSIsCiAgIm11bHRpcGxlSW50ZXJmYWNlcyI6ICJCeUVuZHBvaW50Igp9CmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJVXBkYXRlUGV0RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+VXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZDwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+VXBkYXRlIGFuIGV4aXN0ZW50IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlZhbGlkYXRpb24gZXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUHV0KCIvcGV0IildCiAgICBUYXNrPFBldD4gRXhlY3V0ZShbQm9keV0gUGV0IGJvZHkpOwp9CgovLy8gPHN1bW1hcnk+QWRkIGEgbmV3IHBldCB0byB0aGUgc3RvcmU8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJQWRkUGV0RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGUgYSBuZXcgcGV0IGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+U3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW1Bvc3QoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKFtCb2R5XSBQZXQgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHN0YXR1czwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElGaW5kUGV0c0J5U3RhdHVzRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkZpbmRzIFBldHMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPk11bHRpcGxlIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3M8L3JlbWFya3M+CiAgICAvLy8gPHBhcmFtIG5hbWU9InN0YXR1cyI+U3RhdHVzIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCBmb3IgZmlsdGVyPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHN0YXR1cyB2YWx1ZTwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICBUYXNrPElDb2xsZWN0aW9uPFBldD4+IEV4ZWN1dGUoW1F1ZXJ5XSBTdGF0dXM/IHN0YXR1cyk7Cn0KCi8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHRhZ3M8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRmluZFBldHNCeVRhZ3NFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+RmluZHMgUGV0cyBieSB0YWdzPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPk11bHRpcGxlIHRhZ3MgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MuIFVzZSB0YWcxLCB0YWcyLCB0YWczIGZvciB0ZXN0aW5nLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0idGFncyI+VGFncyB0byBmaWx0ZXIgYnk8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdGFnIHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICBUYXNrPElDb2xsZWN0aW9uPFBldD4+IEV4ZWN1dGUoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwp9CgovLy8gPHN1bW1hcnk+RmluZCBwZXQgYnkgSUQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0UGV0QnlJZEVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5GaW5kIHBldCBieSBJRDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5SZXR1cm5zIGEgc2luZ2xlIHBldDwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0byByZXR1cm48L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9wZXQve3BldElkfSIpXQogICAgVGFzazxQZXQ+IEV4ZWN1dGUobG9uZyBwZXRJZCk7Cn0KCi8vLyA8c3VtbWFyeT5VcGRhdGVzIGEgcGV0IGluIHRoZSBzdG9yZSB3aXRoIGZvcm0gZGF0YTwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVQZXRXaXRoRm9ybUVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5VcGRhdGVzIGEgcGV0IGluIHRoZSBzdG9yZSB3aXRoIGZvcm0gZGF0YTwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJuYW1lIj5OYW1lIG9mIHBldCB0aGF0IG5lZWRzIHRvIGJlIHVwZGF0ZWQ8L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJzdGF0dXMiPlN0YXR1cyBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5BIDxzZWUgY3JlZj0iVGFzayIvPiB0aGF0IGNvbXBsZXRlcyB3aGVuIHRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkLjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDA1PC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIGlucHV0PC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW1Bvc3QoIi9wZXQve3BldElkfSIpXQogICAgVGFzayBFeGVjdXRlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIG5hbWUsIFtRdWVyeV0gc3RyaW5nIHN0YXR1cyk7Cn0KCi8vLyA8c3VtbWFyeT5EZWxldGVzIGEgcGV0PC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSURlbGV0ZVBldEVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5EZWxldGVzIGEgcGV0PC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+UGV0IGlkIHRvIGRlbGV0ZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBwZXQgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2sgRXhlY3V0ZShsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKfQoKLy8vIDxzdW1tYXJ5PnVwbG9hZHMgYW4gaW1hZ2U8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJVXBsb2FkRmlsZUVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT51cGxvYWRzIGFuIGltYWdlPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+SUQgb2YgcGV0IHRvIHVwZGF0ZTwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImFkZGl0aW9uYWxNZXRhZGF0YSI+QWRkaXRpb25hbCBNZXRhZGF0YTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+CiAgICAvLy8gQSA8c2VlIGNyZWY9IlRhc2siLz4gcmVwcmVzZW50aW5nIHRoZSA8c2VlIGNyZWY9IklBcGlSZXNwb25zZSIvPiBpbnN0YW5jZSBjb250YWluaW5nIHRoZSByZXN1bHQ6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT4yMDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvcmV0dXJucz4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtQb3N0KCIvcGV0L3twZXRJZH0vdXBsb2FkSW1hZ2UiKV0KICAgIFRhc2s8QXBpUmVzcG9uc2U+IEV4ZWN1dGUobG9uZyBwZXRJZCwgW1F1ZXJ5XSBzdHJpbmcgYWRkaXRpb25hbE1ldGFkYXRhLCAgU3RyZWFtUGFydCBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PlJldHVybnMgcGV0IGludmVudG9yaWVzIGJ5IHN0YXR1czwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElHZXRJbnZlbnRvcnlFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+UmV0dXJucyBwZXQgaW52ZW50b3JpZXMgYnkgc3RhdHVzPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXM8L3JlbWFya3M+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9zdG9yZS9pbnZlbnRvcnkiKV0KICAgIFRhc2s8SURpY3Rpb25hcnk8c3RyaW5nLCBpbnQ+PiBFeGVjdXRlKCk7Cn0KCi8vLyA8c3VtbWFyeT5QbGFjZSBhbiBvcmRlciBmb3IgYSBwZXQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJUGxhY2VPcmRlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5QbGFjZSBhbiBvcmRlciBmb3IgYSBwZXQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+UGxhY2UgYSBuZXcgb3JkZXIgaW4gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgaW5wdXQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUG9zdCgiL3N0b3JlL29yZGVyIildCiAgICBUYXNrPE9yZGVyPiBFeGVjdXRlKFtCb2R5XSBPcmRlciBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PkZpbmQgcHVyY2hhc2Ugb3JkZXIgYnkgSUQ8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0T3JkZXJCeUlkRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkZpbmQgcHVyY2hhc2Ugb3JkZXIgYnkgSUQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+Rm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDw9IDUgb3IgPiAxMC4gT3RoZXIgdmFsdWVzIHdpbGwgZ2VuZXJhdGVkIGV4Y2VwdGlvbnM8L3JlbWFya3M+CiAgICAvLy8gPHBhcmFtIG5hbWU9Im9yZGVySWQiPklEIG9mIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZmV0Y2hlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzazxPcmRlcj4gRXhlY3V0ZShsb25nIG9yZGVySWQpOwp9CgovLy8gPHN1bW1hcnk+RGVsZXRlIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSURlbGV0ZU9yZGVyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSBwdXJjaGFzZSBvcmRlciBieSBJRDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9yczwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JkZXJJZCI+SUQgb2YgdGhlIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0RlbGV0ZSgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzayBFeGVjdXRlKGxvbmcgb3JkZXJJZCk7Cn0KCi8vLyA8c3VtbWFyeT5DcmVhdGUgdXNlcjwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElDcmVhdGVVc2VyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGVkIHVzZXIgb2JqZWN0PC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiwgYXBwbGljYXRpb24veG1sIildCiAgICBbUG9zdCgiL3VzZXIiKV0KICAgIFRhc2sgRXhlY3V0ZShbQm9keV0gVXNlciBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUNyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dEVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5DcmVhdGVzIGxpc3Qgb2YgdXNlcnMgd2l0aCBnaXZlbiBpbnB1dCBhcnJheTwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5DcmVhdGVzIGxpc3Qgb2YgdXNlcnMgd2l0aCBnaXZlbiBpbnB1dCBhcnJheTwvcmVtYXJrcz4KICAgIC8vLyA8cmV0dXJucz5TdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+VGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlLjwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgIFRhc2s8VXNlcj4gRXhlY3V0ZShbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgpbU3lzdGVtLkNvZGVEb20uQ29tcGlsZXIuR2VuZXJhdGVkQ29kZSgiUmVmaXR0ZXIiLCAiMS4wLjAuMCIpXQpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUxvZ2luVXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+VGhlIHVzZXIgbmFtZSBmb3IgbG9naW48L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJwYXNzd29yZCI+VGhlIHBhc3N3b3JkIGZvciBsb2dpbiBpbiBjbGVhciB0ZXh0PC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lL3Bhc3N3b3JkIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3VzZXIvbG9naW4iKV0KICAgIFRhc2s8c3RyaW5nPiBFeGVjdXRlKFtRdWVyeV0gc3RyaW5nIHVzZXJuYW1lLCBbUXVlcnldIHN0cmluZyBwYXNzd29yZCk7Cn0KCi8vLyA8c3VtbWFyeT5Mb2dzIG91dCBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIHNlc3Npb248L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJTG9nb3V0VXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5Mb2dzIG91dCBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyIHNlc3Npb248L3N1bW1hcnk+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgVGFzayBFeGVjdXRlKCk7Cn0KCi8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0VXNlckJ5TmFtZUVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CiAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5UaGUgbmFtZSB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuIFVzZSB1c2VyMSBmb3IgdGVzdGluZy48L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdXNlcm5hbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgVGFzazxVc2VyPiBFeGVjdXRlKHN0cmluZyB1c2VybmFtZSk7Cn0KCi8vLyA8c3VtbWFyeT5VcGRhdGUgdXNlcjwvc3VtbWFyeT4KW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVVc2VyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSB1c2VyPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ1c2VybmFtZSI+bmFtZSB0aGF0IG5lZWQgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlVwZGF0ZSBhbiBleGlzdGVudCB1c2VyIGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgIFRhc2sgRXhlY3V0ZShzdHJpbmcgdXNlcm5hbWUsIFtCb2R5XSBVc2VyIGJvZHkpOwp9CgovLy8gPHN1bW1hcnk+RGVsZXRlIHVzZXI8L3N1bW1hcnk+CltTeXN0ZW0uQ29kZURvbS5Db21waWxlci5HZW5lcmF0ZWRDb2RlKCJSZWZpdHRlciIsICIxLjAuMC4wIildCnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRGVsZXRlVXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgdXNlcjwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSBuYW1lIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+VXNlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbRGVsZXRlKCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrIEV4ZWN1dGUoc3RyaW5nIHVzZXJuYW1lKTsKfQpgYGAKCkhlcmUncyBhbiBleGFtcGxlIGdlbmVyYXRlZCBvdXRwdXQgZnJvbSB0aGUgW1N3YWdnZXIgUGV0c3RvcmUgZXhhbXBsZV0oaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pbykgY29uZmlndXJlZCB0byBnZW5lcmF0ZSBhbiBpbnRlcmZhY2Ugd2l0aCBkeW5hbWljIHF1ZXJ5c3RyaW5nIHBhcmVtZXRlcnMKCioqQ0xJIFRvb2wqKgoKYGBgYmFzaAokIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbmFtZXNwYWNlICJZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZSIgLS11c2UtZHluYW1pYy1xdWVyeXN0cmluZy1wYXJhbWV0ZXJzCmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKW1N5c3RlbS5Db2RlRG9tLkNvbXBpbGVyLkdlbmVyYXRlZENvZGUoIlJlZml0dGVyIiwgIjEuMC4wLjAiKV0KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElTd2FnZ2VyUGV0c3RvcmVPcGVuQVBJMzAKewogICAgLy8vIDxzdW1tYXJ5PlVwZGF0ZSBhbiBleGlzdGluZyBwZXQ8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+VXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZDwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+VXBkYXRlIGFuIGV4aXN0ZW50IHBldCBpbiB0aGUgc3RvcmU8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlBldCBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDU8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlZhbGlkYXRpb24gZXhjZXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUHV0KCIvcGV0IildCiAgICBUYXNrPFBldD4gVXBkYXRlUGV0KFtCb2R5XSBQZXQgYm9keSk7CgogICAgLy8vIDxzdW1tYXJ5PkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJib2R5Ij5DcmVhdGUgYSBuZXcgcGV0IGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+U3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW1Bvc3QoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBBZGRQZXQoW0JvZHldIFBldCBib2R5KTsKCiAgICAvLy8gPHN1bW1hcnk+RmluZHMgUGV0cyBieSBzdGF0dXM8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+TXVsdGlwbGUgc3RhdHVzIHZhbHVlcyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nczwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0ic3RhdHVzIj5TdGF0dXMgdmFsdWVzIHRoYXQgbmVlZCB0byBiZSBjb25zaWRlcmVkIGZvciBmaWx0ZXI8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgc3RhdHVzIHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvcGV0L2ZpbmRCeVN0YXR1cyIpXQogICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5U3RhdHVzKFtRdWVyeV0gU3RhdHVzPyBzdGF0dXMpOwoKICAgIC8vLyA8c3VtbWFyeT5GaW5kcyBQZXRzIGJ5IHRhZ3M8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+TXVsdGlwbGUgdGFncyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncy4gVXNlIHRhZzEsIHRhZzIsIHRhZzMgZm9yIHRlc3RpbmcuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJ0YWdzIj5UYWdzIHRvIGZpbHRlciBieTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB0YWcgdmFsdWU8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtHZXQoIi9wZXQvZmluZEJ5VGFncyIpXQogICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5VGFncyhbUXVlcnkoQ29sbGVjdGlvbkZvcm1hdC5NdWx0aSldIElFbnVtZXJhYmxlPHN0cmluZz4gdGFncyk7CgogICAgLy8vIDxzdW1tYXJ5PkZpbmQgcGV0IGJ5IElEPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPlJldHVybnMgYSBzaW5nbGUgcGV0PC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJwZXRJZCI+SUQgb2YgcGV0IHRvIHJldHVybjwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+UGV0IG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3BldC97cGV0SWR9IildCiAgICBUYXNrPFBldD4gR2V0UGV0QnlJZChsb25nIHBldElkKTsKCiAgICAvLy8gPHN1bW1hcnk+VXBkYXRlcyBhIHBldCBpbiB0aGUgc3RvcmUgd2l0aCBmb3JtIGRhdGE8L3N1bW1hcnk+CiAgICAvLy8gPHBhcmFtIG5hbWU9InBldElkIj5JRCBvZiBwZXQgdGhhdCBuZWVkcyB0byBiZSB1cGRhdGVkPC9wYXJhbT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icXVlcnlQYXJhbXMiPlRoZSBkeW5hbWljIHF1ZXJ5c3RyaW5nIHBhcmFtZXRlciB3cmFwcGluZyBhbGwgb3RoZXJzLjwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtQb3N0KCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2sgVXBkYXRlUGV0V2l0aEZvcm0obG9uZyBwZXRJZCwgW1F1ZXJ5XSBVcGRhdGVQZXRXaXRoRm9ybVF1ZXJ5UGFyYW1zIHF1ZXJ5UGFyYW1zKTsKCiAgICAvLy8gPHN1bW1hcnk+RGVsZXRlcyBhIHBldDwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPlBldCBpZCB0byBkZWxldGU8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgcGV0IHZhbHVlPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0RlbGV0ZSgiL3BldC97cGV0SWR9IildCiAgICBUYXNrIERlbGV0ZVBldChsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKCiAgICAvLy8gPHN1bW1hcnk+dXBsb2FkcyBhbiBpbWFnZTwvc3VtbWFyeT4KICAgIC8vLyA8cGFyYW0gbmFtZT0icGV0SWQiPklEIG9mIHBldCB0byB1cGRhdGU8L3BhcmFtPgogICAgLy8vIDxwYXJhbSBuYW1lPSJhZGRpdGlvbmFsTWV0YWRhdGEiPkFkZGl0aW9uYWwgTWV0YWRhdGE8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPgogICAgLy8vIEEgPHNlZSBjcmVmPSJUYXNrIi8+IHJlcHJlc2VudGluZyB0aGUgPHNlZSBjcmVmPSJJQXBpUmVzcG9uc2UiLz4gaW5zdGFuY2UgY29udGFpbmluZyB0aGUgcmVzdWx0OgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+MjAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L3JldHVybnM+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbUG9zdCgiL3BldC97cGV0SWR9L3VwbG9hZEltYWdlIildCiAgICBUYXNrPEFwaVJlc3BvbnNlPiBVcGxvYWRGaWxlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIGFkZGl0aW9uYWxNZXRhZGF0YSwgIFN0cmVhbVBhcnQgYm9keSk7CgogICAgLy8vIDxzdW1tYXJ5PlJldHVybnMgcGV0IGludmVudG9yaWVzIGJ5IHN0YXR1czwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5SZXR1cm5zIGEgbWFwIG9mIHN0YXR1cyBjb2RlcyB0byBxdWFudGl0aWVzPC9yZW1hcmtzPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvc3RvcmUvaW52ZW50b3J5IildCiAgICBUYXNrPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4gR2V0SW52ZW50b3J5KCk7CgogICAgLy8vIDxzdW1tYXJ5PlBsYWNlIGFuIG9yZGVyIGZvciBhIHBldDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5QbGFjZSBhIG5ldyBvcmRlciBpbiB0aGUgc3RvcmU8L3JlbWFya3M+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNTwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBpbnB1dDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtQb3N0KCIvc3RvcmUvb3JkZXIiKV0KICAgIFRhc2s8T3JkZXI+IFBsYWNlT3JkZXIoW0JvZHldIE9yZGVyIGJvZHkpOwoKICAgIC8vLyA8c3VtbWFyeT5GaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElEPC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8PSA1IG9yID4gMTAuIE90aGVyIHZhbHVlcyB3aWxsIGdlbmVyYXRlIGV4Y2VwdGlvbnMuPC9yZW1hcmtzPgogICAgLy8vIDxwYXJhbSBuYW1lPSJvcmRlcklkIj5JRCBvZiBvcmRlciB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQ8L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgSUQgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPk9yZGVyIG5vdCBmb3VuZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDwvbGlzdD4KICAgIC8vLyA8L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL3htbCwgYXBwbGljYXRpb24vanNvbiIpXQogICAgW0dldCgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzazxPcmRlcj4gR2V0T3JkZXJCeUlkKGxvbmcgb3JkZXJJZCk7CgogICAgLy8vIDxzdW1tYXJ5PkRlbGV0ZSBwdXJjaGFzZSBvcmRlciBieSBJRDwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5Gb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9yczwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0ib3JkZXJJZCI+SUQgb2YgdGhlIG9yZGVyIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCBJRCBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+T3JkZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0RlbGV0ZSgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzayBEZWxldGVPcmRlcihsb25nIG9yZGVySWQpOwoKICAgIC8vLyA8c3VtbWFyeT5DcmVhdGUgdXNlcjwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0iYm9keSI+Q3JlYXRlZCB1c2VyIG9iamVjdDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+c3VjY2Vzc2Z1bCBvcGVyYXRpb248L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtIZWFkZXJzKCJBY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24sIGFwcGxpY2F0aW9uL3htbCIpXQogICAgW1Bvc3QoIi91c2VyIildCiAgICBUYXNrIENyZWF0ZVVzZXIoW0JvZHldIFVzZXIgYm9keSk7CgogICAgLy8vIDxzdW1tYXJ5PkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9zdW1tYXJ5PgogICAgLy8vIDxyZW1hcmtzPkNyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5PC9yZW1hcmtzPgogICAgLy8vIDxyZXR1cm5zPlN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICBbSGVhZGVycygiQWNjZXB0OiBhcHBsaWNhdGlvbi94bWwsIGFwcGxpY2F0aW9uL2pzb24iKV0KICAgIFtQb3N0KCIvdXNlci9jcmVhdGVXaXRoTGlzdCIpXQogICAgVGFzazxVc2VyPiBDcmVhdGVVc2Vyc1dpdGhMaXN0SW5wdXQoW0JvZHldIElFbnVtZXJhYmxlPFVzZXI+IGJvZHkpOwoKICAgIC8vLyA8c3VtbWFyeT5Mb2dzIHVzZXIgaW50byB0aGUgc3lzdGVtPC9zdW1tYXJ5PgogICAgLy8vIDxwYXJhbSBuYW1lPSJxdWVyeVBhcmFtcyI+VGhlIGR5bmFtaWMgcXVlcnlzdHJpbmcgcGFyYW1ldGVyIHdyYXBwaW5nIGFsbCBvdGhlcnMuPC9wYXJhbT4KICAgIC8vLyA8cmV0dXJucz5zdWNjZXNzZnVsIG9wZXJhdGlvbjwvcmV0dXJucz4KICAgIC8vLyA8ZXhjZXB0aW9uIGNyZWY9IkFwaUV4Y2VwdGlvbiI+CiAgICAvLy8gVGhyb3duIHdoZW4gdGhlIHJlcXVlc3QgcmV0dXJucyBhIG5vbi1zdWNjZXNzIHN0YXR1cyBjb2RlOgogICAgLy8vIDxsaXN0IHR5cGU9InRhYmxlIj4KICAgIC8vLyA8bGlzdGhlYWRlcj4KICAgIC8vLyA8dGVybT5TdGF0dXM8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkRlc2NyaXB0aW9uPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2xpc3RoZWFkZXI+CiAgICAvLy8gPGl0ZW0+CiAgICAvLy8gPHRlcm0+NDAwPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5JbnZhbGlkIHVzZXJuYW1lL3Bhc3N3b3JkIHN1cHBsaWVkPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvdXNlci9sb2dpbiIpXQogICAgVGFzazxzdHJpbmc+IExvZ2luVXNlcihbUXVlcnldIExvZ2luVXNlclF1ZXJ5UGFyYW1zIHF1ZXJ5UGFyYW1zKTsKCiAgICAvLy8gPHN1bW1hcnk+TG9ncyBvdXQgY3VycmVudCBsb2dnZWQgaW4gdXNlciBzZXNzaW9uPC9zdW1tYXJ5PgogICAgLy8vIDxyZXR1cm5zPkEgPHNlZSBjcmVmPSJUYXNrIi8+IHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIHJlcXVlc3QgaXMgZmluaXNoZWQuPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj5UaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGUuPC9leGNlcHRpb24+CiAgICBbR2V0KCIvdXNlci9sb2dvdXQiKV0KICAgIFRhc2sgTG9nb3V0VXNlcigpOwoKICAgIC8vLyA8c3VtbWFyeT5HZXQgdXNlciBieSB1c2VyIG5hbWU8L3N1bW1hcnk+CiAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5UaGUgbmFtZSB0aGF0IG5lZWRzIHRvIGJlIGZldGNoZWQuIFVzZSB1c2VyMSBmb3IgdGVzdGluZy48L3BhcmFtPgogICAgLy8vIDxyZXR1cm5zPnN1Y2Nlc3NmdWwgb3BlcmF0aW9uPC9yZXR1cm5zPgogICAgLy8vIDxleGNlcHRpb24gY3JlZj0iQXBpRXhjZXB0aW9uIj4KICAgIC8vLyBUaHJvd24gd2hlbiB0aGUgcmVxdWVzdCByZXR1cm5zIGEgbm9uLXN1Y2Nlc3Mgc3RhdHVzIGNvZGU6CiAgICAvLy8gPGxpc3QgdHlwZT0idGFibGUiPgogICAgLy8vIDxsaXN0aGVhZGVyPgogICAgLy8vIDx0ZXJtPlN0YXR1czwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+RGVzY3JpcHRpb248L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvbGlzdGhlYWRlcj4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDA8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPkludmFsaWQgdXNlcm5hbWUgc3VwcGxpZWQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8aXRlbT4KICAgIC8vLyA8dGVybT40MDQ8L3Rlcm0+CiAgICAvLy8gPGRlc2NyaXB0aW9uPlVzZXIgbm90IGZvdW5kPC9kZXNjcmlwdGlvbj4KICAgIC8vLyA8L2l0ZW0+CiAgICAvLy8gPC9saXN0PgogICAgLy8vIDwvZXhjZXB0aW9uPgogICAgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24veG1sLCBhcHBsaWNhdGlvbi9qc29uIildCiAgICBbR2V0KCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrPFVzZXI+IEdldFVzZXJCeU5hbWUoc3RyaW5nIHVzZXJuYW1lKTsKCiAgICAvLy8gPHN1bW1hcnk+VXBkYXRlIHVzZXI8L3N1bW1hcnk+CiAgICAvLy8gPHJlbWFya3M+VGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci48L3JlbWFya3M+CiAgICAvLy8gPHBhcmFtIG5hbWU9InVzZXJuYW1lIj5uYW1lIHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZDwvcGFyYW0+CiAgICAvLy8gPHBhcmFtIG5hbWU9ImJvZHkiPlVwZGF0ZSBhbiBleGlzdGVudCB1c2VyIGluIHRoZSBzdG9yZTwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPlRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZS48L2V4Y2VwdGlvbj4KICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgIFRhc2sgVXBkYXRlVXNlcihzdHJpbmcgdXNlcm5hbWUsIFtCb2R5XSBVc2VyIGJvZHkpOwoKICAgIC8vLyA8c3VtbWFyeT5EZWxldGUgdXNlcjwvc3VtbWFyeT4KICAgIC8vLyA8cmVtYXJrcz5UaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLjwvcmVtYXJrcz4KICAgIC8vLyA8cGFyYW0gbmFtZT0idXNlcm5hbWUiPlRoZSBuYW1lIHRoYXQgbmVlZHMgdG8gYmUgZGVsZXRlZDwvcGFyYW0+CiAgICAvLy8gPHJldHVybnM+QSA8c2VlIGNyZWY9IlRhc2siLz4gdGhhdCBjb21wbGV0ZXMgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC48L3JldHVybnM+CiAgICAvLy8gPGV4Y2VwdGlvbiBjcmVmPSJBcGlFeGNlcHRpb24iPgogICAgLy8vIFRocm93biB3aGVuIHRoZSByZXF1ZXN0IHJldHVybnMgYSBub24tc3VjY2VzcyBzdGF0dXMgY29kZToKICAgIC8vLyA8bGlzdCB0eXBlPSJ0YWJsZSI+CiAgICAvLy8gPGxpc3RoZWFkZXI+CiAgICAvLy8gPHRlcm0+U3RhdHVzPC90ZXJtPgogICAgLy8vIDxkZXNjcmlwdGlvbj5EZXNjcmlwdGlvbjwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9saXN0aGVhZGVyPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwMDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+SW52YWxpZCB1c2VybmFtZSBzdXBwbGllZDwvZGVzY3JpcHRpb24+CiAgICAvLy8gPC9pdGVtPgogICAgLy8vIDxpdGVtPgogICAgLy8vIDx0ZXJtPjQwNDwvdGVybT4KICAgIC8vLyA8ZGVzY3JpcHRpb24+VXNlciBub3QgZm91bmQ8L2Rlc2NyaXB0aW9uPgogICAgLy8vIDwvaXRlbT4KICAgIC8vLyA8L2xpc3Q+CiAgICAvLy8gPC9leGNlcHRpb24+CiAgICBbRGVsZXRlKCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrIERlbGV0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lKTsKCgp9ICAgIAoKcHVibGljIGNsYXNzIFVwZGF0ZVBldFdpdGhGb3JtUXVlcnlQYXJhbXMKewogICAgICAgIAogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIE5hbWUgb2YgcGV0IHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZAogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtRdWVyeV0gCiAgICBwdWJsaWMgc3RyaW5nIE5hbWUgeyBnZXQ7IHNldDsgfQoKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBTdGF0dXMgb2YgcGV0IHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZAogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtRdWVyeV0gCiAgICBwdWJsaWMgc3RyaW5nIFN0YXR1cyB7IGdldDsgc2V0OyB9Cgp9CgpwdWJsaWMgY2xhc3MgTG9naW5Vc2VyUXVlcnlQYXJhbXMKewogICAgICAgIAogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFRoZSB1c2VyIG5hbWUgZm9yIGxvZ2luCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW1F1ZXJ5XSAKICAgIHB1YmxpYyBzdHJpbmcgVXNlcm5hbWUgeyBnZXQ7IHNldDsgfQoKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBUaGUgcGFzc3dvcmQgZm9yIGxvZ2luIGluIGNsZWFyIHRleHQKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbUXVlcnldIAogICAgcHVibGljIHN0cmluZyBQYXNzd29yZCB7IGdldDsgc2V0OyB9Cgp9CmBgYAoKIyMgUmVzdFNlcnZpY2UKCkhlcmUncyBhbiBleGFtcGxlIHVzYWdlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBhYm92ZQoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKCm5hbWVzcGFjZSBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCmludGVybmFsIGNsYXNzIFByb2dyYW0KewogICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgVGFzayBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIGNsaWVudCA9IFJlc3RTZXJ2aWNlLkZvcjxJU3dhZ2dlclBldHN0b3JlPigiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiKTsKICAgICAgICB2YXIgcGV0ID0gYXdhaXQgY2xpZW50LkdldFBldEJ5SWQoMSk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIjIyBVc2luZyBUYXNrPFQ+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJOYW1lOiB7cGV0Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3BldC5DYXRlZ29yeS5OYW1lfSIpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiU3RhdHVzOiB7cGV0LlN0YXR1c30iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwoKICAgICAgICB2YXIgY2xpZW50MiA9IFJlc3RTZXJ2aWNlLkZvcjxXaXRoQXBpUmVzcG9uc2UuSVN3YWdnZXJQZXRzdG9yZT4oImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIik7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgY2xpZW50Mi5HZXRQZXRCeUlkKDIpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJIVFRQIFN0YXR1cyBDb2RlOiB7cmVzcG9uc2UuU3RhdHVzQ29kZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIk5hbWU6IHtyZXNwb25zZS5Db250ZW50Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3Jlc3BvbnNlLkNvbnRlbnQuQ2F0ZWdvcnkuTmFtZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIlN0YXR1czoge3Jlc3BvbnNlLkNvbnRlbnQuU3RhdHVzfSIpOwogICAgfQp9CmBgYAoKVGhlIGBSZXN0U2VydmljZWAgY2xhc3MgZ2VuZXJhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGBJU3dhZ2dlclBldHN0b3JlYCB0aGF0IHVzZXMgYEh0dHBDbGllbnRgIHRvIG1ha2UgaXRzIGNhbGxzLiAKClRoZSBjb2RlIGFib3ZlIHdoZW4gcnVuIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGAKIyMgVXNpbmcgVGFzazxUPiBhcyByZXR1cm4gdHlwZSAjIwpOYW1lOiBHYXRpdG90b3RvdG8KQ2F0ZWdvcnk6IENoYXVjaXRvClN0YXR1czogU29sZAoKIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjCkhUVFAgU3RhdHVzIENvZGU6IE9LCk5hbWU6IEdhdGl0b3RvdG90bwpDYXRlZ29yeTogQ2hhdWNpdG8KU3RhdHVzOiBTb2xkCmBgYAoKIyMgQVNQLk5FVCBDb3JlIGFuZCBIdHRwQ2xpZW50RmFjdG9yeQoKSGVyZSdzIGFuIGV4YW1wbGUgTWluaW1hbCBBUEkgd2l0aCB0aGUgW2BSZWZpdC5IdHRwQ2xpZW50RmFjdG9yeWBdKGh0dHBzOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9SZWZpdC5IdHRwQ2xpZW50RmFjdG9yeSkgbGlicmFyeToKCmBgYGNzCnVzaW5nIFJlZml0Owp1c2luZyBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCnZhciBidWlsZGVyID0gV2ViQXBwbGljYXRpb24uQ3JlYXRlQnVpbGRlcihhcmdzKTsKYnVpbGRlci5TZXJ2aWNlcy5BZGRFbmRwb2ludHNBcGlFeHBsb3JlcigpOwpidWlsZGVyLlNlcnZpY2VzLkFkZFN3YWdnZXJHZW4oKTsKYnVpbGRlci5TZXJ2aWNlcwogICAgLkFkZFJlZml0Q2xpZW50PElTd2FnZ2VyUGV0c3RvcmU+KCkKICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpOwoKdmFyIGFwcCA9IGJ1aWxkZXIuQnVpbGQoKTsKYXBwLk1hcEdldCgKICAgICAgICAiL3BldC97aWQ6bG9uZ30iLAogICAgICAgIGFzeW5jIChJU3dhZ2dlclBldHN0b3JlIHBldHN0b3JlLCBsb25nIGlkKSA9PgogICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLk9rKGF3YWl0IHBldHN0b3JlLkdldFBldEJ5SWQoaWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoUmVmaXQuQXBpRXhjZXB0aW9uIGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLlN0YXR1c0NvZGUoKGludCllLlN0YXR1c0NvZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIC5XaXRoTmFtZSgiR2V0UGV0QnlJZCIpCiAgICAuV2l0aE9wZW5BcGkoKTsKCmFwcC5Vc2VIdHRwc1JlZGlyZWN0aW9uKCk7CmFwcC5Vc2VTd2FnZ2VyVUkoKTsKYXBwLlVzZVN3YWdnZXIoKTsKYXBwLlJ1bigpOwpgYGAKCgouTkVUIENvcmUgc3VwcG9ydHMgcmVnaXN0ZXJpbmcgdGhlIGdlbmVyYXRlZCBgSVN3YWdnZXJQZXRzdG9yZWAgaW50ZXJmYWNlIHZpYSBgSHR0cENsaWVudEZhY3RvcnlgCgpUaGUgZm9sbG93aW5nIHJlcXVlc3QgdG8gdGhlIEFQSSBhYm92ZQpgYGBzaGVsbAokIGN1cmwgLVggJ0dFVCcgJ2h0dHBzOi8vbG9jYWxob3N0OjUwMDEvcGV0LzEnIC1IICdhY2NlcHQ6IGFwcGxpY2F0aW9uL2pzb24nCmBgYAoKUmV0dXJucyBhIHJlc3BvbnNlIHRoYXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczoKYGBganNvbgp7CiAgImlkIjogMSwKICAibmFtZSI6ICJTcGVjaWFsX2NoYXJfb3duZXJfIUAjJF4mKClgLnRlc3RpbmciLAogICJwaG90b1VybHMiOiBbCiAgICAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9yZXNvdXJjZXMvcGhvdG9zLzYyMzM4OTA5NS5qcGciCiAgXSwKICAidGFncyI6IFtdLAogICJzdGF0dXMiOiAiU29sZCIKfQpgYGAKCiMjIERlcGVuZGVuY3kgSW5qZWN0aW9uCgpSZWZpdHRlciBzdXBwb3J0cyBnZW5lcmF0aW5nIGJvb3RzdHJhcHBpbmcgY29kZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBjb252ZW5pZW50bHkgY29uZmlndXJlIGFsbCBnZW5lcmF0ZWQgUmVmaXQgaW50ZXJmYWNlcyBieSBjYWxsaW5nIGEgc2luZ2xlIGV4dGVuc2lvbiBtZXRob2QgdG8gYElTZXJ2aWNlQ29sbGVjdGlvbmAuCgpUaGlzIGlzIGVuYWJsZWQgdGhyb3VnaCB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZSBsaWtlIHRoaXM6CgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi4vT3BlbkFQSS92My4wL3BldHN0b3JlLmpzb24iLAogICJuYW1lc3BhY2UiOiAiUGV0c3RvcmUiLAogICJkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3MiOiB7CiAgICAiYmFzZVVybCI6ICJodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92MyIsCiAgICAiaHR0cE1lc3NhZ2VIYW5kbGVycyI6IFsgIlRlbGVtZXRyeURlbGVnYXRpbmdIYW5kbGVyIiBdLAogICAgInRyYW5zaWVudEVycm9ySGFuZGxlciI6ICJQb2xseSIsCiAgICAibWF4UmV0cnlDb3VudCI6IDMsCiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUKICB9Cn0KYGBgCgp3aGljaCB3aWxsIGdlbmVyYXRlIGFuIGV4dGVuc2lvbiBtZXRob2QgdG8gYElTZXJ2aWNlQ29sbGVjdGlvbmAgY2FsbGVkIGBDb25maWd1cmVSZWZpdENsaWVudHMoKWAuIFRoZSBnZW5lcmF0ZWQgZXh0ZW5zaW9uIG1ldGhvZCBkZXBlbmRzIG9uIFtgUmVmaXQuSHR0cENsaWVudEZhY3RvcnlgXShodHRwczovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvUmVmaXQuSHR0cENsaWVudEZhY3RvcnkpIGxpYnJhcnkgYW5kIGxvb2tzIGxpa2UgdGhpczoKCmBgYGNzCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVJlZml0Q2xpZW50cygKICAgIHRoaXMgSVNlcnZpY2VDb2xsZWN0aW9uIHNlcnZpY2VzLCAKICAgIEFjdGlvbjxJSHR0cENsaWVudEJ1aWxkZXI+PyBidWlsZGVyID0gZGVmYXVsdCwgCiAgICBSZWZpdFNldHRpbmdzPyBzZXR0aW5ncyA9IGRlZmF1bHQpCnsKICAgIHZhciBjbGllbnRCdWlsZGVySVN3YWdnZXJQZXRzdG9yZSA9IHNlcnZpY2VzCiAgICAgICAgLkFkZFJlZml0Q2xpZW50PElTd2FnZ2VyUGV0c3RvcmU+KHNldHRpbmdzKQogICAgICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpCiAgICAgICAgLkFkZEh0dHBNZXNzYWdlSGFuZGxlcjxUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlcj4oKTsKCiAgICBjbGllbnRCdWlsZGVySVN3YWdnZXJQZXRzdG9yZQogICAgICAgIC5BZGRQb2xpY3lIYW5kbGVyKAogICAgICAgICAgICBIdHRwUG9saWN5RXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgLkhhbmRsZVRyYW5zaWVudEh0dHBFcnJvcigpCiAgICAgICAgICAgICAgICAuV2FpdEFuZFJldHJ5QXN5bmMoCiAgICAgICAgICAgICAgICAgICAgQmFja29mZi5EZWNvcnJlbGF0ZWRKaXR0ZXJCYWNrb2ZmVjIoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVTcGFuLkZyb21TZWNvbmRzKDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgIDMpKSk7CgogICAgYnVpbGRlcj8uSW52b2tlKGNsaWVudEJ1aWxkZXJJU3dhZ2dlclBldHN0b3JlKTsKCiAgICByZXR1cm4gc2VydmljZXM7Cn0KYGBgCgpUaGlzIGNvbWVzIGluIGhhbmR5IGVzcGVjaWFsbHkgd2hlbiBnZW5lcmF0aW5nIG11bHRpcGxlIGludGVyZmFjZXMsIGJ5IHRhZyBvciBlbmRwb2ludC4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZQoKYGBganNvbgp7CiAgIm9wZW5BcGlQYXRoIjogIi4uL09wZW5BUEkvdjMuMC9wZXRzdG9yZS5qc29uIiwKICAibmFtZXNwYWNlIjogIlBldHN0b3JlIiwKICAibXVsdGlwbGVJbnRlcmZhY2VzIjogIkJ5VGFnIiwKICAiZGVwZW5kZW5jeUluamVjdGlvblNldHRpbmdzIjogewogICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiLAogICAgImh0dHBNZXNzYWdlSGFuZGxlcnMiOiBbICJUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlciIgXSwKICAgICJ0cmFuc2llbnRFcnJvckhhbmRsZXIiOiAiUG9sbHkiLAogICAgIm1heFJldHJ5Q291bnQiOiAzLAogICAgImZpcnN0QmFja29mZlJldHJ5SW5TZWNvbmRzIjogMC41CiAgfQp9CmBgYAoKV2lsbCBnZW5lcmF0ZSBhIHNpbmdsZSBgQ29uZmlndXJlUmVmaXRDbGllbnRzKClgIGV4dGVuc2lvbiBtZXRob2RzIHRoYXQgbWF5IGNvbnRhaW4gZGVwZW5kZW5jeSBpbmplY3Rpb24gY29uZmlndXJhdGlvbiBjb2RlIGZvciBtdWx0aXBsZSBpbnRlcmZhY2VzIGxpa2UgdGhpcwoKYGBgY3NoYXJwCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVJlZml0Q2xpZW50cygKICAgIHRoaXMgSVNlcnZpY2VDb2xsZWN0aW9uIHNlcnZpY2VzLCAKICAgIEFjdGlvbjxJSHR0cENsaWVudEJ1aWxkZXI+PyBidWlsZGVyID0gZGVmYXVsdCwgCiAgICBSZWZpdFNldHRpbmdzPyBzZXR0aW5ncyA9IGRlZmF1bHQpCnsKICAgIHZhciBjbGllbnRCdWlsZGVySVBldEFwaSA9IHNlcnZpY2VzCiAgICAgICAgLkFkZFJlZml0Q2xpZW50PElQZXRBcGk+KHNldHRpbmdzKQogICAgICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpCiAgICAgICAgLkFkZEh0dHBNZXNzYWdlSGFuZGxlcjxUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlcj4oKTsKCiAgICBjbGllbnRCdWlsZGVySVBldEFwaQogICAgICAgIC5BZGRQb2xpY3lIYW5kbGVyKAogICAgICAgICAgICBIdHRwUG9saWN5RXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgLkhhbmRsZVRyYW5zaWVudEh0dHBFcnJvcigpCiAgICAgICAgICAgICAgICAuV2FpdEFuZFJldHJ5QXN5bmMoCiAgICAgICAgICAgICAgICAgICAgQmFja29mZi5EZWNvcnJlbGF0ZWRKaXR0ZXJCYWNrb2ZmVjIoCiAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVTcGFuLkZyb21TZWNvbmRzKDAuNSksCiAgICAgICAgICAgICAgICAgICAgICAgIDMpKSk7CgogICAgYnVpbGRlcj8uSW52b2tlKGNsaWVudEJ1aWxkZXJJUGV0QXBpKTsKCiAgICB2YXIgY2xpZW50QnVpbGRlcklTdG9yZUFwaSA9IHNlcnZpY2VzCiAgICAgICAgLkFkZFJlZml0Q2xpZW50PElTdG9yZUFwaT4oc2V0dGluZ3MpCiAgICAgICAgLkNvbmZpZ3VyZUh0dHBDbGllbnQoYyA9PiBjLkJhc2VBZGRyZXNzID0gbmV3IFVyaSgiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiKSkKICAgICAgICAuQWRkSHR0cE1lc3NhZ2VIYW5kbGVyPFRlbGVtZXRyeURlbGVnYXRpbmdIYW5kbGVyPigpOwoKICAgIGNsaWVudEJ1aWxkZXJJU3RvcmVBcGkKICAgICAgICAuQWRkUG9saWN5SGFuZGxlcigKICAgICAgICAgICAgSHR0cFBvbGljeUV4dGVuc2lvbnMKICAgICAgICAgICAgICAgIC5IYW5kbGVUcmFuc2llbnRIdHRwRXJyb3IoKQogICAgICAgICAgICAgICAgLldhaXRBbmRSZXRyeUFzeW5jKAogICAgICAgICAgICAgICAgICAgIEJhY2tvZmYuRGVjb3JyZWxhdGVkSml0dGVyQmFja29mZlYyKAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAzKSkpOwoKICAgIGJ1aWxkZXI/Lkludm9rZShjbGllbnRCdWlsZGVySVN0b3JlQXBpKTsKCiAgICB2YXIgY2xpZW50QnVpbGRlcklVc2VyQXBpID0gc2VydmljZXMKICAgICAgICAuQWRkUmVmaXRDbGllbnQ8SVVzZXJBcGk+KHNldHRpbmdzKQogICAgICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpCiAgICAgICAgLkFkZEh0dHBNZXNzYWdlSGFuZGxlcjxUZWxlbWV0cnlEZWxlZ2F0aW5nSGFuZGxlcj4oKTsKCiAgICBjbGllbnRCdWlsZGVySVVzZXJBcGkKICAgICAgICAuQWRkUG9saWN5SGFuZGxlcigKICAgICAgICAgICAgSHR0cFBvbGljeUV4dGVuc2lvbnMKICAgICAgICAgICAgICAgIC5IYW5kbGVUcmFuc2llbnRIdHRwRXJyb3IoKQogICAgICAgICAgICAgICAgLldhaXRBbmRSZXRyeUFzeW5jKAogICAgICAgICAgICAgICAgICAgIEJhY2tvZmYuRGVjb3JyZWxhdGVkSml0dGVyQmFja29mZlYyKAogICAgICAgICAgICAgICAgICAgICAgICBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpLAogICAgICAgICAgICAgICAgICAgICAgICAzKSkpOwoKICAgIGJ1aWxkZXI/Lkludm9rZShjbGllbnRCdWlsZGVySVVzZXJBcGkpOwoKICAgIHJldHVybiBzZXJ2aWNlczsKfQpgYGAKClBlcnNvbmFsbHksIHRoZXkgSSB1c2UgUmVmaXR0ZXIgaXMgdG8gZ2VuZXJhdGUgYW4gaW50ZXJmYWNlIHBlciBlbmRwb2ludCwgc28gd2hlbiBnZW5lcmF0aW5nIGNvZGUgZm9yIGEgbGFyZ2UgYW5kIGNvbXBsZXggQVBJLCBJIG1pZ2h0IGhhdmUgc2V2ZXJhbCBpbnRlcmZhY2VzLgoKIyMgQXBpenIKCltBcGl6cl0oaHR0cHM6Ly93d3cuYXBpenIubmV0KSBpcyBhIFJlZml0IGNsaWVudCBtYW5hZ2VyIHRoYXQgcHJvdmlkZXMgYSBzZXQgb2YgZmVhdHVyZXMgdG8gZW5oYW5jZSByZXF1ZXN0aW5nIGV4cGVyaWVuY2Ugd2l0aCByZXNpbGllbmNlLCBjYWNoaW5nLCBwcmlvcml0eSwgbWVkaWF0aW9uLCBtYXBwaW5nLCBsb2dnaW5nLCBhdXRoZW50aWNhdGlvbiwgZmlsZSB0cmFuc2ZlciBjYXBhYmlsaXRpZXMgYW5kIG1hbnkgbW9yZS4uLgoKIyMjIEdlbmVyYXRpbmcgdGhlIGludGVyZmFjZXMKClJlZml0dGVyIHN1cHBvcnRzIGdlbmVyYXRpbmcgQXBpenIgZm9ybWF0dGVkIFJlZml0IGludGVyZmFjZXMgdGhhdCBjYW4gYmUgbWFuYWdlZCB0aGVuIGJ5IEFwaXpyICh2NispLgoKWW91IGNhbiBlbmFibGUgQXBpenIgZm9ybWF0dGVkIFJlZml0IGludGVyZmFjZSBnZW5lcmF0aW9uIGVpdGhlcjoKLSBXaXRoIHRoZSBgLS11c2UtYXBpenJgIGNvbW1hbmQgbGluZSBhcmd1bWVudAotIEJ5IHNldHRpbmcgdGhlIGBhcGl6clNldHRpbmdzYCBzZWN0aW9uIGluIHRoZSBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlCgpOb3RlIHRoYXQgYC0tdXNlLWFwaXpyYCB1c2VzIGRlZmF1bHQgQXBpenIgc2V0dGluZ3Mgd2l0aCBgd2l0aFJlcXVlc3RPcHRpb25zYCBzZXQgdG8gYHRydWVgIGFzIHJlY29tbWVuZGVkLCB3aGlsZSB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZSBhbGxvd3MgeW91IHRvIGNvbmZpZ3VyZSBpdCBkZWVwZXIuCgpJbiBib3RoIGNhc2VzLCBpdCB3aWxsIGZvcm1hdCB0aGUgZ2VuZXJhdGVkIFJlZml0IGludGVyZmFjZXMgdG8gYmUgQXBpenIgcmVhZHkgYnk6Ci0gQWRkaW5nIGEgZmluYWwgSUFwaXpyUmVxdWVzdE9wdGlvbnMgb3B0aW9ucyBwYXJhbWV0ZXIgdG8gYWxsIGdlbmVyYXRlZCBtZXRob2RzIChpZiBgd2l0aFJlcXVlc3RPcHRpb25zYCBpcyBzZXQgdG8gYHRydWVgKQotIFByb3ZpZGluZyBjYW5jZWxsYXRpb24gdG9rZW5zIGJ5IEFwaXpyIHJlcXVlc3Qgb3B0aW9ucyBpbnN0ZWFkIG9mIGEgZGVkaWNhdGVkIHBhcmFtZXRlciAoaWYgYHdpdGhSZXF1ZXN0T3B0aW9uc2AgaXMgc2V0IHRvIGB0cnVlYCkKLSBVc2luZyBtZXRob2Qgb3ZlcmxvYWRzIGluc3RlYWQgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycyAobm90ZSB0aGF0IHNldHRpbmcgYHVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnNgIHRvIGB0cnVlYCBpbXByb3ZlIG92ZXJsb2FkaW5nIGV4cGVyaWVuY2UpCgpGcm9tIGhlcmUsIHlvdSdyZSBkZWZpbml0bHkgZnJlZSB0byB1c2UgdGhlIGZvcm1hdHRlZCBpbnRlcmZhY2Ugd2l0aCBBcGl6ciBieSByZWdpc3RlcmluZywgY29uZmlndXJpbmcgYW5kIHVzaW5nIGl0IGZvbGxvd2luZyB0aGUgW0FwaXpyIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmFwaXpyLm5ldCkuIEJ1dCBSZWZpdHRlciBjYW4gZ28gZnVydGhlciBieSBnZW5lcmF0aW5nIHNvbWUgaGVscGVycyB0byBtYWtlIHRoZSBjb25maWd1cmF0aW9uIGVhc2llci4KCiMjIyBHZW5lcmF0aW5nIHRoZSBoZWxwZXJzCgpSZWZpdHRlciBzdXBwb3J0cyBnZW5lcmF0aW5nIEFwaXpyICh2NispIGJvb3RzdHJhcHBpbmcgY29kZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBjb252ZW5pZW50bHkgY29uZmlndXJlIGFsbCBnZW5lcmF0ZWQgQXBpenIgZm9ybWF0dGVkIFJlZml0IGludGVyZmFjZXMgYnkgY2FsbGluZyBhIHNpbmdsZSBtZXRob2QuCkl0IGNvdWxkIGJlIGVpdGhlciBhbiBleHRlbnNpb24gbWV0aG9kIHRvIGBJU2VydmljZUNvbGxlY3Rpb25gIGlmIERlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyBhcmUgc2V0LCBvciBhIHN0YXRpYyBidWlsZGVyIG1ldGhvZCBpZiBub3QuCgojIyMgW0V4dGVuZGVkXSgjdGFiL3RhYmlkLWV4dGVuZGVkKQoKVG8gZW5hYmxlIEFwaXpyIHJlZ2lzdHJhdGlvbiBjb2RlIGdlbmVyYXRpb24gZm9yIGBJU2VydmljZUNvbGxlY3Rpb25gLCB5b3UgbmVlZCBhdCBsZWFzdCB0byBzZXQgdGhlIGB3aXRoUmVnaXN0cmF0aW9uSGVscGVyYCBwcm9wZXJ0eSB0byBgdHJ1ZWAgYW5kIGNvbmZpZ3VyZSB0aGUgYERlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5nc2Agc2VjdGlvbiBpbiB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZS4KVGhpcyBpcyB3aGF0IHRoZSBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlIG1heSBsb29rIGxpa2UsIGRlcGVuZGluZyBvbiB5b3UgY29uZmlndXJhdGlvbjoKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuLi9PcGVuQVBJL3YzLjAvcGV0c3RvcmUuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJQZXRzdG9yZSIsCiAgInVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnMiOiB0cnVlLAogICJkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3MiOiB7CiAgICAiYmFzZVVybCI6ICJodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92MyIsCiAgICAiaHR0cE1lc3NhZ2VIYW5kbGVycyI6IFsgIk15RGVsZWdhdGluZ0hhbmRsZXIiIF0sCiAgICAidHJhbnNpZW50RXJyb3JIYW5kbGVyIjogIkh0dHBSZXNpbGllbmNlIiwKICAgICJtYXhSZXRyeUNvdW50IjogMywKICAgICJmaXJzdEJhY2tvZmZSZXRyeUluU2Vjb25kcyI6IDAuNQogIH0sCiAgImFwaXpyU2V0dGluZ3MiOiB7CiAgICAid2l0aFJlcXVlc3RPcHRpb25zIjogdHJ1ZSwgLy8gUmVjb21tZW5kZWQgdG8gaW5jbHVkZSBhbiBBcGl6ciByZXF1ZXN0IG9wdGlvbnMgcGFyYW1ldGVyIHRvIFJlZml0IGludGVyZmFjZSBtZXRob2RzCiAgICAid2l0aFJlZ2lzdHJhdGlvbkhlbHBlciI6IHRydWUsIC8vIE1hbmRhdG9yeSB0byBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgQXBpenIgcmVnaXN0cmF0aW9uIGV4dGVuZGVkIG1ldGhvZAogICAgIndpdGhDYWNoZVByb3ZpZGVyIjogIkluTWVtb3J5IiwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgTm9uZQogICAgIndpdGhQcmlvcml0eSI6IHRydWUsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgICAid2l0aE1lZGlhdGlvbiI6IHRydWUsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgICAid2l0aE9wdGlvbmFsTWVkaWF0aW9uIjogdHJ1ZSwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICAgICJ3aXRoTWFwcGluZ1Byb3ZpZGVyIjogIkF1dG9NYXBwZXIiLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBOb25lCiAgICAid2l0aEZpbGVUcmFuc2ZlciI6IHRydWUgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICB9Cn0KYGBgCgp3aGljaCB3aWxsIGdlbmVyYXRlIGFuIGV4dGVuc2lvbiBtZXRob2QgdG8gYElTZXJ2aWNlQ29sbGVjdGlvbmAgY2FsbGVkIGBDb25maWd1cmVQZXRzdG9yZUFwaUFwaXpyTWFuYWdlcigpYC4gVGhlIGdlbmVyYXRlZCBleHRlbnNpb24gbWV0aG9kIGRlcGVuZHMgb24gW2BBcGl6ci5FeHRlbnNpb25zLk1pY3Jvc29mdC5EZXBlbmRlbmN5SW5qZWN0aW9uYF0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL0FwaXpyLkV4dGVuc2lvbnMuTWljcm9zb2Z0LkRlcGVuZGVuY3lJbmplY3Rpb24pIGxpYnJhcnkgYW5kIGxvb2tzIGxpa2UgdGhpczoKCmBgYGNzCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVBldHN0b3JlQXBpQXBpenJNYW5hZ2VyKAogICAgdGhpcyBJU2VydmljZUNvbGxlY3Rpb24gc2VydmljZXMsCiAgICBBY3Rpb248SUFwaXpyRXh0ZW5kZWRNYW5hZ2VyT3B0aW9uc0J1aWxkZXI+PyBvcHRpb25zQnVpbGRlciA9IG51bGwpCnsKICAgIG9wdGlvbnNCdWlsZGVyID8/PSBfID0+IHsgfTsgLy8gRGVmYXVsdCBlbXB0eSBvcHRpb25zIGlmIG51bGwKICAgIG9wdGlvbnNCdWlsZGVyICs9IG9wdGlvbnMgPT4gb3B0aW9ucwogICAgICAgIC5XaXRoQmFzZUFkZHJlc3MoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwgQXBpenJEdXBsaWNhdGVTdHJhdGVneS5JZ25vcmUpCiAgICAgICAgLldpdGhEZWxlZ2F0aW5nSGFuZGxlcjxNeURlbGVnYXRpbmdIYW5kbGVyPigpCiAgICAgICAgLkNvbmZpZ3VyZUh0dHBDbGllbnRCdWlsZGVyKGJ1aWxkZXIgPT4gYnVpbGRlcgogICAgICAgICAgICAuQWRkU3RhbmRhcmRSZXNpbGllbmNlSGFuZGxlcihjb25maWcgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uZmlnLlJldHJ5ID0gbmV3IEh0dHBSZXRyeVN0cmF0ZWd5T3B0aW9ucwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFVzZUppdHRlciA9IHRydWUsCiAgICAgICAgICAgICAgICAgICAgTWF4UmV0cnlBdHRlbXB0cyA9IDMsCiAgICAgICAgICAgICAgICAgICAgRGVsYXkgPSBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KSkKICAgICAgICAuV2l0aEluTWVtb3J5Q2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcigpCiAgICAgICAgLldpdGhQcmlvcml0eSgpCiAgICAgICAgLldpdGhPcHRpb25hbE1lZGlhdGlvbigpCiAgICAgICAgLldpdGhGaWxlVHJhbnNmZXJPcHRpb25hbE1lZGlhdGlvbigpOwogICAgICAgICAgICAgICAgIAogICAgcmV0dXJuIHNlcnZpY2VzLkFkZEFwaXpyTWFuYWdlckZvcjxJUGV0c3RvcmVBcGk+KG9wdGlvbnNCdWlsZGVyKTsKfQpgYGAKClRoaXMgY29tZXMgaW4gaGFuZHkgZXNwZWNpYWxseSB3aGVuIGdlbmVyYXRpbmcgbXVsdGlwbGUgaW50ZXJmYWNlcywgYnkgdGFnIG9yIGVuZHBvaW50LiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlCgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi4vT3BlbkFQSS92My4wL3BldHN0b3JlLmpzb24iLAogICJuYW1lc3BhY2UiOiAiUGV0c3RvcmUiLAogICJ1c2VEeW5hbWljUXVlcnlzdHJpbmdQYXJhbWV0ZXJzIjogdHJ1ZSwKICAibXVsdGlwbGVJbnRlcmZhY2VzIjogIkJ5VGFnIiwKICAibmFtaW5nIjogeyAgICAKICAgICJ1c2VPcGVuQXBpVGl0bGUiOiBmYWxzZSwKICAgICJpbnRlcmZhY2VOYW1lIjogIlBldHN0b3JlIgogIH0sCiAgImRlcGVuZGVuY3lJbmplY3Rpb25TZXR0aW5ncyI6IHsKICAgICJiYXNlVXJsIjogImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwKICAgICJodHRwTWVzc2FnZUhhbmRsZXJzIjogWyAiTXlEZWxlZ2F0aW5nSGFuZGxlciIgXSwKICAgICJ0cmFuc2llbnRFcnJvckhhbmRsZXIiOiAiSHR0cFJlc2lsaWVuY2UiLAogICAgIm1heFJldHJ5Q291bnQiOiAzLAogICAgImZpcnN0QmFja29mZlJldHJ5SW5TZWNvbmRzIjogMC41CiAgfSwKICAiYXBpenJTZXR0aW5ncyI6IHsKICAgICJ3aXRoUmVxdWVzdE9wdGlvbnMiOiB0cnVlLCAvLyBSZWNvbW1lbmRlZCB0byBpbmNsdWRlIGFuIEFwaXpyIHJlcXVlc3Qgb3B0aW9ucyBwYXJhbWV0ZXIgdG8gUmVmaXQgaW50ZXJmYWNlIG1ldGhvZHMKICAgICJ3aXRoUmVnaXN0cmF0aW9uSGVscGVyIjogdHJ1ZSwgLy8gTWFuZGF0b3J5IHRvIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBBcGl6ciByZWdpc3RyYXRpb24gZXh0ZW5kZWQgbWV0aG9kCiAgICAid2l0aENhY2hlUHJvdmlkZXIiOiAiSW5NZW1vcnkiLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBOb25lCiAgICAid2l0aFByaW9yaXR5IjogdHJ1ZSwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICAgICJ3aXRoTWVkaWF0aW9uIjogdHJ1ZSwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgZmFsc2UKICAgICJ3aXRoT3B0aW9uYWxNZWRpYXRpb24iOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhNYXBwaW5nUHJvdmlkZXIiOiAiQXV0b01hcHBlciIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoRmlsZVRyYW5zZmVyIjogdHJ1ZSAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogIH0KfQpgYGAKCldpbGwgZ2VuZXJhdGUgYSBzaW5nbGUgYENvbmZpZ3VyZVBldHN0b3JlQXBpenJNYW5hZ2VycygpYCBleHRlbnNpb24gbWV0aG9kIHRoYXQgbWF5IGNvbnRhaW4gZGVwZW5kZW5jeSBpbmplY3Rpb24gY29uZmlndXJhdGlvbiBjb2RlIGZvciBtdWx0aXBsZSBpbnRlcmZhY2VzIGxpa2UgdGhpcwoKYGBgY3NoYXJwCnB1YmxpYyBzdGF0aWMgSVNlcnZpY2VDb2xsZWN0aW9uIENvbmZpZ3VyZVBldHN0b3JlQXBpenJNYW5hZ2VycygKICAgIHRoaXMgSVNlcnZpY2VDb2xsZWN0aW9uIHNlcnZpY2VzLAogICAgQWN0aW9uPElBcGl6ckV4dGVuZGVkQ29tbW9uT3B0aW9uc0J1aWxkZXI+PyBvcHRpb25zQnVpbGRlciA9IG51bGwpCnsKICAgIG9wdGlvbnNCdWlsZGVyID8/PSBfID0+IHsgfTsgLy8gRGVmYXVsdCBlbXB0eSBvcHRpb25zIGlmIG51bGwKICAgIG9wdGlvbnNCdWlsZGVyICs9IG9wdGlvbnMgPT4gb3B0aW9ucwogICAgICAgIC5XaXRoQmFzZUFkZHJlc3MoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIiwgQXBpenJEdXBsaWNhdGVTdHJhdGVneS5JZ25vcmUpCiAgICAgICAgLldpdGhEZWxlZ2F0aW5nSGFuZGxlcjxNeURlbGVnYXRpbmdIYW5kbGVyPigpCiAgICAgICAgLkNvbmZpZ3VyZUh0dHBDbGllbnRCdWlsZGVyKGJ1aWxkZXIgPT4gYnVpbGRlcgogICAgICAgICAgICAuQWRkU3RhbmRhcmRSZXNpbGllbmNlSGFuZGxlcihjb25maWcgPT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY29uZmlnLlJldHJ5ID0gbmV3IEh0dHBSZXRyeVN0cmF0ZWd5T3B0aW9ucwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFVzZUppdHRlciA9IHRydWUsCiAgICAgICAgICAgICAgICAgICAgTWF4UmV0cnlBdHRlbXB0cyA9IDMsCiAgICAgICAgICAgICAgICAgICAgRGVsYXkgPSBUaW1lU3Bhbi5Gcm9tU2Vjb25kcygwLjUpCiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9KSkKICAgICAgICAuV2l0aEluTWVtb3J5Q2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcigpCiAgICAgICAgLldpdGhQcmlvcml0eSgpCiAgICAgICAgLldpdGhPcHRpb25hbE1lZGlhdGlvbigpCiAgICAgICAgLldpdGhGaWxlVHJhbnNmZXJPcHRpb25hbE1lZGlhdGlvbigpOwogICAgICAgICAgICAKICAgIHJldHVybiBzZXJ2aWNlcy5BZGRBcGl6cigKICAgICAgICByZWdpc3RyeSA9PiByZWdpc3RyeQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJUGV0QXBpPigpCiAgICAgICAgICAgIC5BZGRNYW5hZ2VyRm9yPElTdG9yZUFwaT4oKQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJVXNlckFwaT4oKSwKICAgICAgICBvcHRpb25zQnVpbGRlcik7Cgp9CmBgYAoKSGVyZSwgYElQZXRBcGlgLCBgSVN0b3JlQXBpYCBhbmQgYElVc2VyQXBpYCBhcmUgdGhlIGdlbmVyYXRlZCBpbnRlcmZhY2VzIHdoaWNoIHNoYXJlIHRoZSBzYW1lIGNvbW1vbiBjb25maWd1cmF0aW9uIGRlZmluZWQgZnJvbSB0aGUgYC5yZWZpdHRlcmAgZmlsZS4KCiMjIyBbU3RhdGljXSgjdGFiL3RhYmlkLXN0YXRpYykKClRvIGVuYWJsZSBBcGl6ciBzdGF0aWMgYnVpbGRlciBjb2RlIGdlbmVyYXRpb24sIHlvdSBuZWVkIGF0IGxlYXN0IHRvIHNldCB0aGUgYHdpdGhSZWdpc3RyYXRpb25IZWxwZXJgIHByb3BlcnR5IHRvIGB0cnVlYCBhbmQgbGVhdmUgdGhlIGBEZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3NgIHNlY3Rpb24gdG8gbnVsbCBpbiB0aGUgYC5yZWZpdHRlcmAgc2V0dGluZ3MgZmlsZS4KVGhpcyBpcyB3aGF0IHRoZSBgLnJlZml0dGVyYCBzZXR0aW5ncyBmaWxlIG1heSBsb29rIGxpa2UsIGRlcGVuZGluZyBvbiB5b3UgY29uZmlndXJhdGlvbjoKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuLi9PcGVuQVBJL3YzLjAvcGV0c3RvcmUuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJQZXRzdG9yZSIsCiAgInVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnMiOiB0cnVlLAogICJhcGl6clNldHRpbmdzIjogewogICAgIndpdGhSZXF1ZXN0T3B0aW9ucyI6IHRydWUsIC8vIFJlY29tbWVuZGVkIHRvIGluY2x1ZGUgYW4gQXBpenIgcmVxdWVzdCBvcHRpb25zIHBhcmFtZXRlciB0byBSZWZpdCBpbnRlcmZhY2UgbWV0aG9kcwogICAgIndpdGhSZWdpc3RyYXRpb25IZWxwZXIiOiB0cnVlLCAvLyBNYW5kYXRvcnkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIEFwaXpyIHJlZ2lzdHJhdGlvbiBleHRlbmRlZCBtZXRob2QKICAgICJ3aXRoQ2FjaGVQcm92aWRlciI6ICJBa2F2YWNoZSIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoUHJpb3JpdHkiOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhNYXBwaW5nUHJvdmlkZXIiOiAiQXV0b01hcHBlciIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoRmlsZVRyYW5zZmVyIjogdHJ1ZSAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogIH0KfQpgYGAKCndoaWNoIHdpbGwgZ2VuZXJhdGUgYSBzdGF0aWMgYnVpbGRlciBtZXRob2QgY2FsbGVkIGBCdWlsZFBldHN0b3JlMzBBcGl6ck1hbmFnZXIoKWAuIFRoZSBnZW5lcmF0ZWQgYnVpbGRlciBtZXRob2QgZGVwZW5kcyBvbiBbYEFwaXpyYF0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL0FwaXpyKSBsaWJyYXJ5IGFuZCBsb29rcyBsaWtlIHRoaXM6CgpgYGBjcwpwdWJsaWMgc3RhdGljIElBcGl6ck1hbmFnZXI8SVN3YWdnZXJQZXRzdG9yZU9wZW5BUEkzMD4gQnVpbGRQZXRzdG9yZTMwQXBpenJNYW5hZ2VyKEFjdGlvbjxJQXBpenJNYW5hZ2VyT3B0aW9uc0J1aWxkZXI+IG9wdGlvbnNCdWlsZGVyKQp7CiAgICBvcHRpb25zQnVpbGRlciA/Pz0gXyA9PiB7IH07IC8vIERlZmF1bHQgZW1wdHkgb3B0aW9ucyBpZiBudWxsCiAgICBvcHRpb25zQnVpbGRlciArPSBvcHRpb25zID0+IG9wdGlvbnMKICAgICAgICAuV2l0aEFrYXZhY2hlQ2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcihuZXcgTWFwcGVyQ29uZmlndXJhdGlvbihjb25maWcgPT4geyAvKiBZT1VSX01BUFBJTkdTX0hFUkUgKi8gfSkpCiAgICAgICAgLldpdGhQcmlvcml0eSgpOwogICAgICAgICAgICAKICAgIHJldHVybiBBcGl6ckJ1aWxkZXIuQ3VycmVudC5DcmVhdGVNYW5hZ2VyRm9yPElTd2FnZ2VyUGV0c3RvcmVPcGVuQVBJMzA+KG9wdGlvbnNCdWlsZGVyKTsgIAp9CmBgYAoKVGhpcyBjb21lcyBpbiBoYW5keSBlc3BlY2lhbGx5IHdoZW4gZ2VuZXJhdGluZyBtdWx0aXBsZSBpbnRlcmZhY2VzLCBieSB0YWcgb3IgZW5kcG9pbnQuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGAucmVmaXR0ZXJgIHNldHRpbmdzIGZpbGUKCmBgYGpzb24KewogICJvcGVuQXBpUGF0aCI6ICIuLi9PcGVuQVBJL3YzLjAvcGV0c3RvcmUuanNvbiIsCiAgIm5hbWVzcGFjZSI6ICJQZXRzdG9yZSIsCiAgInVzZUR5bmFtaWNRdWVyeXN0cmluZ1BhcmFtZXRlcnMiOiB0cnVlLAogICJtdWx0aXBsZUludGVyZmFjZXMiOiAiQnlUYWciLAogICJuYW1pbmciOiB7ICAgIAogICAgInVzZU9wZW5BcGlUaXRsZSI6IGZhbHNlLAogICAgImludGVyZmFjZU5hbWUiOiAiUGV0c3RvcmUiCiAgfSwKICAiZGVwZW5kZW5jeUluamVjdGlvblNldHRpbmdzIjogewogICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiLAogICAgImh0dHBNZXNzYWdlSGFuZGxlcnMiOiBbICJNeURlbGVnYXRpbmdIYW5kbGVyIiBdLAogICAgInRyYW5zaWVudEVycm9ySGFuZGxlciI6ICJIdHRwUmVzaWxpZW5jZSIsCiAgICAibWF4UmV0cnlDb3VudCI6IDMsCiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUKICB9LAogICJhcGl6clNldHRpbmdzIjogewogICAgIndpdGhSZXF1ZXN0T3B0aW9ucyI6IHRydWUsIC8vIFJlY29tbWVuZGVkIHRvIGluY2x1ZGUgYW4gQXBpenIgcmVxdWVzdCBvcHRpb25zIHBhcmFtZXRlciB0byBSZWZpdCBpbnRlcmZhY2UgbWV0aG9kcwogICAgIndpdGhSZWdpc3RyYXRpb25IZWxwZXIiOiB0cnVlLCAvLyBNYW5kYXRvcnkgdG8gYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIEFwaXpyIHJlZ2lzdHJhdGlvbiBleHRlbmRlZCBtZXRob2QKICAgICJ3aXRoQ2FjaGVQcm92aWRlciI6ICJJbk1lbW9yeSIsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIE5vbmUKICAgICJ3aXRoUHJpb3JpdHkiOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhNZWRpYXRpb24iOiB0cnVlLCAvLyBPcHRpb25hbCwgZGVmYXVsdCBpcyBmYWxzZQogICAgIndpdGhPcHRpb25hbE1lZGlhdGlvbiI6IHRydWUsIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgICAid2l0aE1hcHBpbmdQcm92aWRlciI6ICJBdXRvTWFwcGVyIiwgLy8gT3B0aW9uYWwsIGRlZmF1bHQgaXMgTm9uZQogICAgIndpdGhGaWxlVHJhbnNmZXIiOiB0cnVlIC8vIE9wdGlvbmFsLCBkZWZhdWx0IGlzIGZhbHNlCiAgfQp9CmBgYAoKV2lsbCBnZW5lcmF0ZSBhIHNpbmdsZSBgQnVpbGRQZXRzdG9yZUFwaXpyTWFuYWdlcnMoKWAgYnVpbGRlciBtZXRob2QgdGhhdCBtYXkgY29udGFpbiBjb25maWd1cmF0aW9uIGNvZGUgZm9yIG11bHRpcGxlIGludGVyZmFjZXMgbGlrZSB0aGlzCgpgYGBjc2hhcnAKcHVibGljIHN0YXRpYyBJQXBpenJSZWdpc3RyeSBCdWlsZFBldHN0b3JlQXBpenJNYW5hZ2VycyhBY3Rpb248SUFwaXpyQ29tbW9uT3B0aW9uc0J1aWxkZXI+IG9wdGlvbnNCdWlsZGVyKQp7CiAgICBvcHRpb25zQnVpbGRlciA/Pz0gXyA9PiB7IH07IC8vIERlZmF1bHQgZW1wdHkgb3B0aW9ucyBpZiBudWxsCiAgICBvcHRpb25zQnVpbGRlciArPSBvcHRpb25zID0+IG9wdGlvbnMKICAgICAgICAuV2l0aEFrYXZhY2hlQ2FjaGVIYW5kbGVyKCkKICAgICAgICAuV2l0aEF1dG9NYXBwZXJNYXBwaW5nSGFuZGxlcihuZXcgTWFwcGVyQ29uZmlndXJhdGlvbihjb25maWcgPT4geyAvKiBZT1VSX01BUFBJTkdTX0hFUkUgKi8gfSkpCiAgICAgICAgLldpdGhQcmlvcml0eSgpOwogICAgICAgICAgICAKICAgIHJldHVybiBBcGl6ckJ1aWxkZXIuQ3VycmVudC5DcmVhdGVSZWdpc3RyeSgKICAgICAgICByZWdpc3RyeSA9PiByZWdpc3RyeQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJUGV0QXBpPigpCiAgICAgICAgICAgIC5BZGRNYW5hZ2VyRm9yPElTdG9yZUFwaT4oKQogICAgICAgICAgICAuQWRkTWFuYWdlckZvcjxJVXNlckFwaT4oKSwKICAgICAgICBvcHRpb25zQnVpbGRlcik7Cn0KYGBgCgpIZXJlLCBgSVBldEFwaWAsIGBJU3RvcmVBcGlgIGFuZCBgSVVzZXJBcGlgIGFyZSB0aGUgZ2VuZXJhdGVkIGludGVyZmFjZXMgd2hpY2ggc2hhcmUgdGhlIHNhbWUgY29tbW9uIGNvbmZpZ3VyYXRpb24gZGVmaW5lZCBmcm9tIHRoZSBgLnJlZml0dGVyYCBmaWxlLgoKKioqCgojIyMgQ3VzdG9taXppbmcgdGhlIGNvbmZpZ3VyYXRpb24KCllvdSBtYXkgd2FudCB0byBhZGp1c3QgYXBpcyBjb25maWd1cmF0aW9uLCBmb3IgZXhhbXBsZSwgdG8gYWRkIGEgY3VzdG9tIGhlYWRlciB0byByZXF1ZXN0cy4gVGhpcyBjYW4gYmUgZG9uZSB1c2luZyB0aGUgYEFjdGlvbjxUQXBpenJPcHRpb25zQnVpbGRlcj5gIHBhcmFtZXRlciB3aGlsZSBjYWxsaW5nIHRoZSBnZW5lcmF0ZWQgbWV0aG9kLgpUbyBrbm93IGhvdyB0byBtYWtlIEFwaXpyIGZpdCB5b3VyIG5lZWRzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIFtBcGl6ciBkb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5hcGl6ci5uZXQpLgoKIyMjIFVzaW5nIHRoZSBtYW5hZ2VycwoKT25jZSB5b3UgY2FsbGVkIHRoZSBnZW5lcmF0ZWQgbWV0aG9kLCB5b3Ugd2lsbCBnZXQgYW4gYElBcGl6ck1hbmFnZXI8VD5gIGluc3RhbmNlIHRoYXQgeW91IGNhbiB1c2UgdG8gbWFrZSByZXF1ZXN0cyB0byB0aGUgQVBJLiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgdG8gdXNlIGl0OgoKYGBgY3NoYXJwCnZhciByZXN1bHQgPSBhd2FpdCBwZXRzdG9yZU1hbmFnZXIuRXhlY3V0ZUFzeW5jKChhcGksIG9wdCkgPT4gYXBpLkdldFBldEJ5SWQoMSwgb3B0KSwgCiAgICBvcHRpb25zID0+IG9wdGlvbnMgLy8gV2hhdGV2ZXIgZmluYWwgcmVxdWVzdCBvcHRpb25zIHlvdSB3YW50IHRvIGFwcGx5CiAgICAgICAgLldpdGhQcmlvcml0eShQcmlvcml0eS5CYWNrZ3JvdW5kKQogICAgICAgIC5XaXRoSGVhZGVycyhbIkhlYWRlcktleTE6IEhlYWRlclZhbHVlMSJdKQogICAgICAgIC5XaXRoUmVxdWVzdFRpbWVvdXQoIjAwOjAwOjEwIikKICAgICAgICAuV2l0aENhbmNlbGxhdGlvbihjdHMuVG9rZW4pKTsKYGBgCgpQbGVhc2UgaGVhZCB0byB0aGUgW0FwaXpyIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmFwaXpyLm5ldCkgdG8gZ2V0IG1vcmUuCgojIyBTeXN0ZW0gcmVxdWlyZW1lbnRzCi5ORVQgOC4wCgojIyBDb250cmlidXRvcnMKCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1MSVNUOlNUQVJUIC0gRG8gbm90IHJlbW92ZSBvciBtb2RpZnkgdGhpcyBzZWN0aW9uIC0tPgo8IS0tIHByZXR0aWVyLWlnbm9yZS1zdGFydCAtLT4KPCEtLSBtYXJrZG93bmxpbnQtZGlzYWJsZSAtLT4KPHRhYmxlPgogIDx0Ym9keT4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbmVvR2VuZXZhIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzgwNDcyND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iUGhpbGlwIENveCIvPjxiciAvPjxzdWI+PGI+UGhpbGlwIENveDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPW5lb0dlbmV2YSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2NhbS5tYWNmYXIubGFuZC8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI5ODg0Nz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2FtZXJvbiBNYWNGYXJsYW5kIi8+PGJyIC8+PHN1Yj48Yj5DYW1lcm9uIE1hY0ZhcmxhbmQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1kaXN0YW50Y2FtIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHA6Ly9rZ2FtZS50dyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNjQ2NTMyP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJrZ2FtZSIvPjxiciAvPjxzdWI+PGI+a2dhbWU8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1rZ2FtZWNhcnRlciIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwOi8veXJraS5ubyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMTU3MzYwMT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iVGhvbWFzIFBldHRlcnNlbiAvIFlya2kiLz48YnIgLz48c3ViPjxiPlRob21hcyBQZXR0ZXJzZW4gLyBZcmtpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9IiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS8xa3ZpbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NjQyNTk4MD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQXJ0ZW0iLz48YnIgLz48c3ViPjxiPkFydGVtPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBMWt2aW4iIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tN2NsYXJrZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NzQzOTE0ND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ibTdjbGFya2UiLz48YnIgLz48c3ViPjxiPm03Y2xhcmtlPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBbTdjbGFya2UiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9raXJpZGVzIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEzNjAyMTQzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJraXJpZGVzIi8+PGJyIC8+PHN1Yj48Yj5raXJpZGVzPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBa2lyaWRlcyIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9a2lyaWRlcyIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2d1aWxsYXVtZXNlcmFsZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS82NjcyNDA2P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJndWlsbGF1bWVzZXJhbGUiLz48YnIgLz48c3ViPjxiPmd1aWxsYXVtZXNlcmFsZTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPWd1aWxsYXVtZXNlcmFsZSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FndWlsbGF1bWVzZXJhbGUiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Sb2ZsaW5jb3B0ZXIiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTY5MDI0Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRGVubmlzIEJyZW50amVzIi8+PGJyIC8+PHN1Yj48Yj5EZW5uaXMgQnJlbnRqZXM8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Sb2ZsaW5jb3B0ZXIiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSIjaWRlYXMtUm9mbGluY29wdGVyIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2luL2hpY2tleWRhbWlhbi8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTc0MzY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRhbWlhbiBIaWNrZXkiLz48YnIgLz48c3ViPjxiPkRhbWlhbiBIaWNrZXk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FkYW1pYW5oIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vcmljaGFyZGh1LWxtZyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMjY0MzA3ODc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InJpY2hhcmRodS1sbWciLz48YnIgLz48c3ViPjxiPnJpY2hhcmRodS1sbWc8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FyaWNoYXJkaHUtbG1nIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYnJlYXNlLWNvbGluIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ3MzU4OTM1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJicmVhc2UtY29saW4iLz48YnIgLz48c3ViPjxiPmJyZWFzZS1jb2xpbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWJyZWFzZS1jb2xpbiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FuZ2Vsb2ZiIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIwMzIyNTc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImFuZ2Vsb2ZiIi8+PGJyIC8+PHN1Yj48Yj5hbmdlbG9mYjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPWFuZ2Vsb2ZiIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Ob0dSbyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81NjY1MjczP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEaW0gTm9ncm8iLz48YnIgLz48c3ViPjxiPkRpbSBOb2dybzwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPU5vR1JvIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20veWFkYW5pbG92MTkiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTcxNjEwNjU/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InlhZGFuaWxvdjE5Ii8+PGJyIC8+PHN1Yj48Yj55YWRhbmlsb3YxOTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLXlhZGFuaWxvdjE5IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9eWFkYW5pbG92MTkiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhbnBvd2VsbDg4Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzExMDAzOTc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRhbmllbCBQb3dlbGwiLz48YnIgLz48c3ViPjxiPkRhbmllbCBQb3dlbGw8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FkYW5wb3dlbGw4OCIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0Vra2VpciI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNjE5NDY4NT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRWtrZWlyIi8+PGJyIC8+PHN1Yj48Yj5Fa2tlaXI8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Fa2tlaXIiIHRpdGxlPSJEb2N1bWVudGF0aW9uIj7wn5OWPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBRWtrZWlyIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vd2F5bG9ubXR6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ2MDQ1Nzk/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IldheWxvbiBNYXJ0aW5leiIvPjxiciAvPjxzdWI+PGI+V2F5bG9uIE1hcnRpbmV6PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBd2F5bG9ubXR6IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vdmluYXltYWR1cGF0aGkiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzgxMDI5MDA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InZrbWFkdXBhIi8+PGJyIC8+PHN1Yj48Yj52a21hZHVwYTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQXZpbmF5bWFkdXBhdGhpIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTm9ibGl4Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIyMDc2ODgzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJOb2JsaXgiLz48YnIgLz48c3ViPjxiPk5vYmxpeDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPU5vYmxpeCIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+IDxhIGhyZWY9IiNpZGVhcy1Ob2JsaXgiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL3d3dy52ZWV6bGEuaW8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMjMwNDMyP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJBdHRpbGEgSGFqZHJpayIvPjxiciAvPjxzdWI+PGI+QXR0aWxhIEhhamRyaWs8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1hdHRpbGFoIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9iaWVsaWswMSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS85MjA5NTA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImJpZWxpazAxIi8+PGJyIC8+PHN1Yj48Yj5iaWVsaWswMTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWJpZWxpazAxIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+IDxhIGhyZWY9IiNpZGVhcy1iaWVsaWswMSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9uYWFlZWYiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDMzMzkwNzE/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Im5hYWVlZiIvPjxiciAvPjxzdWI+PGI+bmFhZWVmPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtbmFhZWVmIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2FscnoiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzEwNTk3OT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQWxpcmV6YSBIYWJpYmkiLz48YnIgLz48c3ViPjxiPkFsaXJlemEgSGFiaWJpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBYWxyeiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0VFUGFya2VyIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODc0MDc2P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJKZWZmIFBhcmtlciwgUEUiLz48YnIgLz48c3ViPjxiPkplZmYgUGFya2VyLCBQRTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQUVFUGFya2VyIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vam9kczQiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzgzMjgyMD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iam9kcyIvPjxiciAvPjxzdWI+PGI+am9kczwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLWpvZHM0IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBam9kczQiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9lZGltYXJxdWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQxNzkxNzE5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJFZGltYXJxdWV6IE1lZGVpcm9zIi8+PGJyIC8+PHN1Yj48Yj5FZGltYXJxdWV6IE1lZGVpcm9zPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZWRpbWFycXVleiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2FmYWtrZXNpa2NpIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzcwNjcyNTI/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InNhZmFra2VzaWtjaSIvPjxiciAvPjxzdWI+PGI+c2FmYWtrZXNpa2NpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBc2FmYWtrZXNpa2NpIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZvbGJyZWNodCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDU1Mzc4NDY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImZvbGJyZWNodCIvPjxiciAvPjxzdWI+PGI+Zm9sYnJlY2h0PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZm9sYnJlY2h0IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbW9ydGVubGF1cnNlbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yODc1OTczNz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ibW9ydGVubGF1cnNlbiIvPjxiciAvPjxzdWI+PGI+bW9ydGVubGF1cnNlbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPW1vcnRlbmxhdXJzZW4iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hbnVlbC1mZXJuYW5kZXotcm9kcmlndWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ4NTIwMjA1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJtYW51ZWwtZmVybmFuZGV6LXJvZHJpZ3VleiIvPjxiciAvPjxzdWI+PGI+bWFudWVsLWZlcm5hbmRlei1yb2RyaWd1ZXo8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FtYW51ZWwtZmVybmFuZGV6LXJvZHJpZ3VleiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2VsaXlhbW1pbmUiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjY0NDgwNz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRWxpIFlhbW1pbmUiLz48YnIgLz48c3ViPjxiPkVsaSBZYW1taW5lPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZWxpeWFtbWluZSIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2thbWktcG9pIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ3MzIyNjkxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJrYW1pLXBvaSIvPjxiciAvPjxzdWI+PGI+a2FtaS1wb2k8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1rYW1pLXBvaSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9YZWV2aXMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTgzNTA0ND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iWGVldmlzIi8+PGJyIC8+PHN1Yj48Yj5YZWV2aXM8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FYZWV2aXMiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ESjRkZGkiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTY5NjEwMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iREo0ZGRpIi8+PGJyIC8+PHN1Yj48Yj5ESjRkZGk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1ESjRkZGkiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSIjaWRlYXMtREo0ZGRpIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kaXJlbmNhbmNhdGFsa2F5YSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81NzIyMzczMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iZGlyZW5jYW5jYXRhbGtheWEiLz48YnIgLz48c3ViPjxiPmRpcmVuY2FuY2F0YWxrYXlhPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZGlyZW5jYW5jYXRhbGtheWEiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JvYnBhbG0iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ5Mzk1MzA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IlJvYmVydCBQYWxtcXZpc3QiLz48YnIgLz48c3ViPjxiPlJvYmVydCBQYWxtcXZpc3Q8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1yb2JwYWxtIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9cm9icGFsbSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vVGltb3RoeU1ha2tpc29uIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ5MzQ5NTEzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJUaW0gTSIvPjxiciAvPjxzdWI+PGI+VGltIE08L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1UaW1vdGh5TWFra2lzb24iIHRpdGxlPSJEb2N1bWVudGF0aW9uIj7wn5OWPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2phbmZvbGJyZWNodCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80MjE4NjYwND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iamFuZm9sYnJlY2h0Ii8+PGJyIC8+PHN1Yj48Yj5qYW5mb2xicmVjaHQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1qYW5mb2xicmVjaHQiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1qYW5mb2xicmVjaHQiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL29zYy1uc2VndWluIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEzMzkxMDMwOT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iTmljayBTZWd1aW4iLz48YnIgLz48c3ViPjxiPk5pY2sgU2VndWluPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9b3NjLW5zZWd1aW4iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkLWJyaW5rLXRhbG9neSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80MzgyODczOT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRGF2aWQgQnJpbmsiLz48YnIgLz48c3ViPjxiPkRhdmlkIEJyaW5rPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZGF2aWQtYnJpbmstdGFsb2d5IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1kYXZpZC1icmluay10YWxvZ3kiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhbW1pdGphbmV0Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91Lzk1MjcyMz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iU3R1IFdpbHNvbiIvPjxiciAvPjxzdWI+PGI+U3R1IFdpbHNvbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLWRhbW1pdGphbmV0IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZGFtbWl0amFuZXQiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9zaGFycHppbGxhIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE2NzYzNjM0P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJzaGFycHppbGxhIi8+PGJyIC8+PHN1Yj48Yj5zaGFycHppbGxhPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtc2hhcnB6aWxsYSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9KYXBwaW5lbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NDQwODQ5Nz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iVGF0dSIvPjxiciAvPjxzdWI+PGI+VGF0dTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQUphcHBpbmVuIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwOi8vd3d3LnJlc3Bhd25zaXZlLmNvbSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80MjcyMzA3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJKw6lyw6lteSBCUlVOLVBJQ0FSRCIvPjxiciAvPjxzdWI+PGI+SsOpcsOpbXkgQlJVTi1QSUNBUkQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1KZXJlbXlCUCIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPUplcmVteUJQIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPUplcmVteUJQIiB0aXRsZT0iRG9jdW1lbnRhdGlvbiI+8J+TljwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9lYmFybmFyZCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMDU5NjgzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJFZCBCYXJuYXJkIi8+PGJyIC8+PHN1Yj48Yj5FZCBCYXJuYXJkPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtZWJhcm5hcmQiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmFzdGllbm5vZWw5MyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xODI1MDM1MD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iYmFzdGllbi5ub2VsIi8+PGJyIC8+PHN1Yj48Yj5iYXN0aWVuLm5vZWw8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FiYXN0aWVubm9lbDkzIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTWVpa2VsTFAiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTE2Njk4NDY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Ik1laWtlbCBQaGlsaXBwIi8+PGJyIC8+PHN1Yj48Yj5NZWlrZWwgUGhpbGlwcDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLU1laWtlbExQIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL2JlcmtzZWx2aS5kZXYiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTQ2NzY1MTY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkJlcmsgU2VsdmkiLz48YnIgLz48c3ViPjxiPkJlcmsgU2Vsdmk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1iZXJrc2x2IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9YmVya3NsdiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudGhlYnVpbGRzaGVldC5jb20vIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91Lzk5MDk1NjQ/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Ikpvc2h1YSBPemVyaSIvPjxiciAvPjxzdWI+PGI+Sm9zaHVhIE96ZXJpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBWGVDbHV0Y2giIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8va2FuY2FuZS5ubC8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNzAxNTM0P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJSeWFuIEhlYXRoIi8+PGJyIC8+PHN1Yj48Yj5SeWFuIEhlYXRoPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtcnlhbmhlYXRoIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9cnlhbmhlYXRoIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Ccmlhb2V1aWRodG5zIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91Lzc1MzAxNTY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkJyaWFuIEJydW5uZXIiLz48YnIgLz48c3ViPjxiPkJyaWFuIEJydW5uZXI8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1Ccmlhb2V1aWRodG5zIiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZzYW1pZWMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTMxNjYwMjA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkZyYW5rIFNhbWllYyIvPjxiciAvPjxzdWI+PGI+RnJhbmsgU2FtaWVjPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZnNhbWllYyIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZmFiaW9sb3JlZ2dpYW4iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzE0ODA3Njg/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkZhYmlvIExvcmVnZ2lhbiIvPjxiciAvPjxzdWI+PGI+RmFiaW8gTG9yZWdnaWFuPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZmFiaW9sb3JlZ2dpYW4iIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgPC90cj4KICA8L3Rib2R5Pgo8L3RhYmxlPgoKPCEtLSBtYXJrZG93bmxpbnQtcmVzdG9yZSAtLT4KPCEtLSBwcmV0dGllci1pZ25vcmUtZW5kIC0tPgoKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUxJU1Q6RU5EIC0tPgoKIwoKRm9yIHRpcHMgYW5kIHRyaWNrcyBvbiBzb2Z0d2FyZSBkZXZlbG9wbWVudCwgY2hlY2sgb3V0IFtteSBibG9nXShodHRwczovL2NocmlzdGlhbmhlbGxlLmNvbSkKCklmIHlvdSBmaW5kIHRoaXMgdXNlZnVsIGFuZCBmZWVsIGEgYml0IGdlbmVyb3VzIHRoZW4gZmVlbCBmcmVlIHRvIFtidXkgbWUgYSBjb2ZmZWUg4piVXShodHRwczovL3d3dy5idXltZWFjb2ZmZWUuY29tL2NocmlzdGlhbmhlbGxlKQo= + readmeEtag: '"667eaff227a595d53175f3c42eaddaae63d39e80"' + readmeLastModified: Tue, 05 Nov 2024 09:17:46 GMT repositoryId: 598846021 description: >- A tool for generating Refit interfaces and contracts from OpenAPI specifications created: '2023-02-07T23:18:12Z' - updated: '2024-11-04T12:06:11Z' + updated: '2024-11-05T22:52:47Z' language: C# archived: false - stars: 193 + stars: 194 watchers: 6 forks: 42 owner: christianhelle logo: https://avatars.githubusercontent.com/u/710400?v=4 license: MIT - repoEtag: '"c9937e7ce1a520d83563aabcd7247d8718c16594df2a41d91d0848e044b01674"' - repoLastModified: Mon, 04 Nov 2024 12:06:11 GMT + repoEtag: '"5efaadbe0e34a55bfd0c569ae3b3880bc1840b935a456838025c25426c641d38"' + repoLastModified: Tue, 05 Nov 2024 22:52:47 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -10422,17 +10421,17 @@ repositoryId: 285621457 description: OpenAPI - Getting started, and the specification explained created: '2020-08-06T16:40:47Z' - updated: '2024-10-23T02:36:41Z' + updated: '2024-11-05T10:12:27Z' language: Markdown archived: false - stars: 120 + stars: 121 watchers: 22 forks: 60 owner: OAI logo: https://avatars.githubusercontent.com/u/16343502?v=4 license: CC-BY-4.0 - repoEtag: '"d9ae31bdb597c252232179105d1048a777b6954093d1aa460bfeb89d9b385cb4"' - repoLastModified: Wed, 23 Oct 2024 02:36:41 GMT + repoEtag: '"9ab25cf08bccd69bc9b6f5147b51775e8b38670b744a29ff9f8c801267eb76a2"' + repoLastModified: Tue, 05 Nov 2024 10:12:27 GMT category: - Parsers - Server Implementations @@ -10644,17 +10643,17 @@ Simple and efficient HTTP mock server with specification in yaml, edn or OpenAPI created: '2022-02-23T10:49:57Z' - updated: '2024-11-01T07:41:24Z' + updated: '2024-11-05T23:13:08Z' language: Clojure archived: false - stars: 110 + stars: 112 watchers: 3 forks: 12 owner: moclojer logo: https://avatars.githubusercontent.com/u/103039458?v=4 license: MIT - repoEtag: '"5989cfa351fc18bca00dbd9e161de833ae573e530e1ee87d17c73852c991d387"' - repoLastModified: Fri, 01 Nov 2024 07:41:24 GMT + repoEtag: '"b64e9e273ea71effbe96d5b194ac500370182da67f61f596321b8fbc723c43f6"' + repoLastModified: Tue, 05 Nov 2024 23:13:08 GMT category: Testing foundInMaster: true oldLocations: @@ -10670,17 +10669,17 @@ repositoryId: 68995825 description: OpenAPI (fka Swagger) spec renderer for Sphinx. created: '2016-09-23T06:28:32Z' - updated: '2024-10-26T08:19:13Z' + updated: '2024-11-05T20:24:53Z' language: Python archived: false - stars: 110 + stars: 111 watchers: 11 forks: 80 owner: sphinx-contrib logo: https://avatars.githubusercontent.com/u/31936682?v=4 license: BSD-2-Clause - repoEtag: '"e558022f1b8b65a97f70d90dea16655f5a305afd0141f18a37c3bbef1913ad68"' - repoLastModified: Sat, 26 Oct 2024 08:19:13 GMT + repoEtag: '"e24affe460a70b6849d8d98af22343adbf18cfaa49b4aa88a4340c629fbcc39f"' + repoLastModified: Tue, 05 Nov 2024 20:24:53 GMT foundInMaster: true category: - Converters @@ -10730,7 +10729,7 @@ owner: digitalocean logo: https://avatars.githubusercontent.com/u/4650108?v=4 license: Apache-2.0 - repoEtag: '"51d3614b97d85148a129c70ae8cbdb9655a0975c963edfed072d2596ef0db55c"' + repoEtag: '"9f33c7f31b2683f98b98e6860066fc2d8bbc716d423e30eec141dafb0468288d"' repoLastModified: Mon, 04 Nov 2024 22:23:54 GMT foundInMaster: true category: @@ -10748,17 +10747,17 @@ repositoryId: 373055212 description: Swagger 3.0 implementation for go created: '2021-06-02T05:54:10Z' - updated: '2024-11-02T16:02:25Z' + updated: '2024-11-05T05:32:02Z' language: Go archived: false - stars: 108 + stars: 109 watchers: 5 forks: 11 owner: parvez3019 logo: https://avatars.githubusercontent.com/u/10362597?v=4 license: MIT - repoEtag: '"9bb1777d357cc2434fc49133150b562a0d3b2fea1274895562f71da68bf27ce6"' - repoLastModified: Sat, 02 Nov 2024 16:02:25 GMT + repoEtag: '"eafceede70b6f13431e36108a32c4275b13a6439a8ef33b64d5a9f57dd343e34"' + repoLastModified: Tue, 05 Nov 2024 05:32:02 GMT foundInMaster: true category: Server Implementations id: 00ef51b7bb2f326af2de90739df6907b @@ -10830,7 +10829,7 @@ A collection of open-source and commercial tools for creating your APIs with OpenAPI - Sourced from and published for the community created: '2022-01-14T19:24:14Z' - updated: '2024-11-04T03:38:51Z' + updated: '2024-11-05T03:39:27Z' language: JavaScript archived: false stars: 105 @@ -10838,8 +10837,8 @@ forks: 30 owner: OAI logo: https://avatars.githubusercontent.com/u/16343502?v=4 - repoEtag: '"663ab24303c84256065d67aff79eb74a36f6b9c2003d4bf8bce0f1ba935ecb72"' - repoLastModified: Mon, 04 Nov 2024 03:38:51 GMT + repoEtag: '"6ea899c8e2156704b4a12da024e0148761ae55b0ee86b0202967376ea7d91d70"' + repoLastModified: Tue, 05 Nov 2024 03:39:27 GMT category: Server Implementations foundInMaster: true oldLocations: @@ -11092,7 +11091,7 @@ owner: jellyfin logo: https://avatars.githubusercontent.com/u/45698031?v=4 license: LGPL-3.0 - repoEtag: '"fee9ea0336c96fca8d6e12813d70abf177303adc450b421a06bc7718d3e0bc20"' + repoEtag: '"7730b2a8da13b2dea9be11329fa384e747d9dd2e88956fbb956a1e0b216aee97"' repoLastModified: Sun, 03 Nov 2024 16:11:54 GMT foundInMaster: true category: Testing @@ -11197,7 +11196,7 @@ owner: christianhelle logo: https://avatars.githubusercontent.com/u/710400?v=4 license: MIT - repoEtag: '"7efb8d99b579c15b381b8b3c4213965e2ddae0fb38ab5b86e50e9f889c11ccab"' + repoEtag: '"d6e4dd86675c6a0debb6b8a6c1fb3a4b5aee275ecf27b573cffa5f3661113c2f"' repoLastModified: Wed, 30 Oct 2024 10:19:56 GMT category: Parsers foundInMaster: true @@ -11380,16 +11379,16 @@ repositoryId: 249737066 description: Semantic parser for API specifications created: '2020-03-24T14:55:51Z' - updated: '2024-11-05T00:00:48Z' + updated: '2024-11-06T03:01:20Z' language: TypeScript archived: false - stars: 68 + stars: 69 watchers: 10 forks: 18 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 - repoEtag: '"a8f7ad28b1c6a71e1fae1681d915026cc7fefd8e32f03b9d8fea4c0fcdff3008"' - repoLastModified: Tue, 05 Nov 2024 00:00:48 GMT + repoEtag: '"2f59211b49fc95d6f856820341267aa580741f560cba1eff5e7959194a08ec80"' + repoLastModified: Wed, 06 Nov 2024 03:01:20 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -11483,7 +11482,7 @@ OpenAPI 3 parser to use a specification inside of the code in your projects created: '2020-08-27T00:47:00Z' - updated: '2024-10-28T11:28:50Z' + updated: '2024-11-05T22:06:51Z' language: Python archived: false stars: 64 @@ -11492,8 +11491,8 @@ owner: manchenkoff logo: https://avatars.githubusercontent.com/u/6690063?v=4 license: MIT - repoEtag: '"599dfb997de27a49b3ef3a911699cca540bc702ee9106184877955f2323b8241"' - repoLastModified: Mon, 28 Oct 2024 11:28:50 GMT + repoEtag: '"11f0792299a7015f4085c285614bd1eefd58461ec6d8fbbae7878f3e46de64c3"' + repoLastModified: Tue, 05 Nov 2024 22:06:51 GMT foundInMaster: true category: Parsers id: 074facec95becd6c9d361eb75f2d1d2f @@ -11509,16 +11508,16 @@ repositoryId: 512335029 description: 'OpenAPI Specification & Swagger Tools : Zero To Master - Code Examples' created: '2022-07-10T03:25:03Z' - updated: '2024-10-09T12:40:35Z' + updated: '2024-11-05T06:23:02Z' language: Java archived: false - stars: 61 + stars: 62 watchers: 5 forks: 98 owner: eazybytes logo: https://avatars.githubusercontent.com/u/79041235?v=4 - repoEtag: '"11fb95a81e5720e37cb26907dc2e2389a565d1ca6bd8103814c438067034c488"' - repoLastModified: Wed, 09 Oct 2024 12:40:35 GMT + repoEtag: '"0df472258f5e1d191d3e6b8f169ca1bc61ec33dff17fe71f453358b23fac695b"' + repoLastModified: Tue, 05 Nov 2024 06:23:02 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -11742,17 +11741,17 @@ repositoryId: 599199253 description: Generate OpenAPI 3.0 specifications from Go code. created: '2023-02-08T16:53:48Z' - updated: '2024-11-01T18:07:58Z' + updated: '2024-11-05T17:07:56Z' language: Go archived: false - stars: 54 + stars: 55 watchers: 3 forks: 20 owner: a-h logo: https://avatars.githubusercontent.com/u/1029947?v=4 license: MIT - repoEtag: '"9e5c105a9e1af469639f5a062870514541a6c4e0fc464a271c2367a5dce85a98"' - repoLastModified: Fri, 01 Nov 2024 18:07:58 GMT + repoEtag: '"02ef5f415b18374a3bec8112910d700a06de03768e38e01ce05242ebc1ff05e5"' + repoLastModified: Tue, 05 Nov 2024 17:07:56 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -12049,7 +12048,7 @@ owner: enzonotario logo: https://avatars.githubusercontent.com/u/10469299?v=4 license: MIT - repoEtag: '"7d5d99bbdf4ac9224bb1fa45cba0615517646fd0d6eb2f270f0c6630d40b7b47"' + repoEtag: '"01e92262d8da2cb56174fe33219574e7388d872d3906f30ccc1a48e446576eb3"' repoLastModified: Mon, 04 Nov 2024 20:01:43 GMT category: Parsers foundInMaster: true @@ -12106,7 +12105,7 @@ This GitHub Actions validates OpenAPI (OAS) definition file using Swagger Editor. created: '2021-03-05T18:37:29Z' - updated: '2024-10-29T04:59:38Z' + updated: '2024-11-05T04:19:16Z' language: JavaScript archived: false stars: 48 @@ -12115,8 +12114,8 @@ owner: swaggerexpert logo: https://avatars.githubusercontent.com/u/172408630?v=4 license: BSD-3-Clause - repoEtag: '"57212a477fef361ee9fb52dda958dd0a1683dd9d45a48482205d067bc116ac75"' - repoLastModified: Tue, 29 Oct 2024 04:59:38 GMT + repoEtag: '"eae5e9a704a97acad788a90af7af3be023295db58658b423f3d765b2b1cf9398"' + repoLastModified: Tue, 05 Nov 2024 04:19:16 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -12155,7 +12154,7 @@ repositoryId: 286198180 description: Example application built using Quarkus framework created: '2020-08-09T08:34:19Z' - updated: '2024-11-03T01:31:29Z' + updated: '2024-11-05T15:14:40Z' language: Java archived: false stars: 47 @@ -12163,8 +12162,8 @@ forks: 26 owner: piomin logo: https://avatars.githubusercontent.com/u/2892502?v=4 - repoEtag: '"51322ec01e611842193d903c335e0f7ba74ea320465f9ec33e30fbff27e158a7"' - repoLastModified: Sun, 03 Nov 2024 01:31:29 GMT + repoEtag: '"11400ea1c57fb203d5c632369b3b8db3351ac558cee1c4a045e3b567538d817d"' + repoLastModified: Tue, 05 Nov 2024 15:14:40 GMT foundInMaster: true category: SDK id: dd8f9923c6579fbc72bcd8fc5a69a30c @@ -12240,7 +12239,7 @@ owner: javalin logo: https://avatars.githubusercontent.com/u/28701086?v=4 license: Apache-2.0 - repoEtag: '"9fd8cc6e454613aa792eb899011dc61fa69f9a0d3df3a2bb5b950ab25b8748d9"' + repoEtag: '"a4103eac40feb1d04cb9fd74212ac189c78972e0e0ab949704c045eac774c152"' repoLastModified: Mon, 07 Oct 2024 11:20:12 GMT category: SDK foundInMaster: true @@ -12263,11 +12262,11 @@ archived: false stars: 43 watchers: 3 - forks: 25 + forks: 26 owner: atlassian logo: https://avatars.githubusercontent.com/u/168166?v=4 license: NOASSERTION - repoEtag: '"879182a90b20239e31b2b6ce16d51ae368a95e42214043f3313e9759a0ad2395"' + repoEtag: '"98e829ed79aa394647b08cd15bb6b4bed1fd7a8ffb64763fc2e46bf37af8e04f"' repoLastModified: Wed, 30 Oct 2024 17:17:06 GMT foundInMaster: true id: 70270b46839e1466d6a425a8da6ded65 @@ -12417,7 +12416,7 @@ repositoryId: 241074287 description: Backbase Open Api Tools (boat) helps manage large OpenAPI projects created: '2020-02-17T10:00:41Z' - updated: '2024-11-04T15:14:30Z' + updated: '2024-11-05T11:53:16Z' language: Mustache archived: false stars: 42 @@ -12426,8 +12425,8 @@ owner: Backbase logo: https://avatars.githubusercontent.com/u/1914334?v=4 license: NOASSERTION - repoEtag: '"b4f6a76fc24b506c92721be282dc9aee72dc6cd66c7f33e814ae0b40c694502d"' - repoLastModified: Mon, 04 Nov 2024 15:14:30 GMT + repoEtag: '"600311dddb6bfaac56f5120d85b69017480d8dced4e4df7db74f1dc8828e7b3d"' + repoLastModified: Tue, 05 Nov 2024 11:53:16 GMT foundInMaster: true category: SDK id: fd5b893e6ddf5af8821536a61ecb1d4e @@ -12937,16 +12936,16 @@ Spring Boot and Swagger 3 example - configuration for API description / response example - Swagger annotations with OpenAPI 3 created: '2023-03-15T03:33:57Z' - updated: '2024-08-06T03:49:00Z' + updated: '2024-11-05T18:16:26Z' language: Java archived: false - stars: 33 + stars: 34 watchers: 2 forks: 27 owner: bezkoder logo: https://avatars.githubusercontent.com/u/52996966?v=4 - repoEtag: '"218a99f5f53e8d5d22806deb51e983b3898a3314b6edeaa4ef4d820ec0c31df6"' - repoLastModified: Tue, 06 Aug 2024 03:49:00 GMT + repoEtag: '"a996028117ca56013b70aeb39f61efe086010044eb6e8d8cdba38134f1bf0c5a"' + repoLastModified: Tue, 05 Nov 2024 18:16:26 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -12963,7 +12962,7 @@ open-source solution for your open and private data needs. French only for the time being, internationalization coming soon. created: '2017-11-24T22:19:00Z' - updated: '2024-11-04T17:13:53Z' + updated: '2024-11-05T15:48:24Z' language: JavaScript archived: false stars: 33 @@ -12972,8 +12971,8 @@ owner: data-fair logo: https://avatars.githubusercontent.com/u/83776320?v=4 license: AGPL-3.0 - repoEtag: '"527e67f14dd4230b6427a7efa4c871108a7d1a777b170d1781a37870ab75701f"' - repoLastModified: Mon, 04 Nov 2024 17:13:53 GMT + repoEtag: '"f660a9386c20b735b90b75e678cfcd9b40ca7f5b3a2a869b9ef2d550d6a6e5a1"' + repoLastModified: Tue, 05 Nov 2024 15:48:24 GMT foundInMaster: true category: - Documentation @@ -13303,7 +13302,7 @@ repositoryId: 393620909 description: RESTful API for managing a school created: '2021-08-07T08:06:01Z' - updated: '2024-11-02T11:03:00Z' + updated: '2024-11-05T15:36:47Z' language: Java archived: false stars: 28 @@ -13312,8 +13311,8 @@ owner: hei-school logo: https://avatars.githubusercontent.com/u/88576095?v=4 license: MIT - repoEtag: '"f3463e4041518aaf1e91ad4e9f42f30052a6274ac559a239d0eb2b542bc31f0b"' - repoLastModified: Sat, 02 Nov 2024 11:03:00 GMT + repoEtag: '"f2a4d6d86b5fffbf57054deb1a441f46764e05ea1023d1befd33017dd8a7932b"' + repoLastModified: Tue, 05 Nov 2024 15:36:47 GMT foundInMaster: true category: Code Generators id: bf98240ea893afa32efc180fb73dd5b6 @@ -13416,11 +13415,11 @@ archived: false stars: 27 watchers: 3 - forks: 34 + forks: 35 owner: OpenAPITools logo: https://avatars.githubusercontent.com/u/37325267?v=4 license: NOASSERTION - repoEtag: '"38af7045ca74643e53d25619e7a74753fe81d687cca175b13fbb4f5a0f000d16"' + repoEtag: '"a474f3486a17f550af5be48a67797a00c48a5d548ca14d73f3655678fcea1d40"' repoLastModified: Mon, 28 Oct 2024 22:27:01 GMT foundInMaster: true category: Description Validators @@ -13982,7 +13981,7 @@ forks: 3 owner: stackql logo: https://avatars.githubusercontent.com/u/95105302?v=4 - repoEtag: '"f8575bebf62ee9b2c4ee870020fa09cc5e1171b1943b8714b281ecaa8565ef54"' + repoEtag: '"835bd67923642a2583f43b09c17e505f7f8f89f3c3e0c88bff65c98aaec68857"' repoLastModified: Mon, 04 Nov 2024 00:21:31 GMT category: Server Implementations foundInMaster: true @@ -14470,7 +14469,7 @@ repositoryId: 98350934 description: Mockoon application official website repository and documentation created: '2017-07-25T21:19:22Z' - updated: '2024-11-04T15:34:46Z' + updated: '2024-11-05T14:36:49Z' language: TypeScript archived: false stars: 20 @@ -14479,8 +14478,8 @@ owner: mockoon logo: https://avatars.githubusercontent.com/u/49429147?v=4 license: NOASSERTION - repoEtag: '"87ee1ceb22cf9f100e19e453d9ef7636f077678e7cb79d4ccc6960883d256104"' - repoLastModified: Mon, 04 Nov 2024 15:34:46 GMT + repoEtag: '"c0ea06e7ffd37a35a84926fc2a20490e7cece5b73de3cb89ed22dfc35b2ee217"' + repoLastModified: Tue, 05 Nov 2024 14:36:49 GMT foundInMaster: true category: Testing id: 84d3391fa9deedcd6398666ba504eb78 @@ -15927,7 +15926,7 @@ owner: Jnig logo: https://avatars.githubusercontent.com/u/3729585?v=4 license: MIT - repoEtag: '"09ee20737a0ae1906544090694975a6a28b27e61e093b66937c78d56c9cdec1b"' + repoEtag: '"87a5b9b365f66fad0d3f44f6cde6aac0ac3ed66b9901dd08ec8e7e182a95b949"' repoLastModified: Tue, 29 Oct 2024 02:01:59 GMT category: - Data Validators @@ -16837,7 +16836,7 @@ owner: mchangrh logo: https://avatars.githubusercontent.com/u/15132783?v=4 license: GPL-3.0 - repoEtag: '"31fbec6e0a5231808c0d648996df787fd59bc0944c463c4dc506c2b738b4767d"' + repoEtag: '"aa1c139bb07504d2a2c84778a329fc281167a3757ea31f1e090df70705ccfe69"' repoLastModified: Mon, 14 Oct 2024 04:52:31 GMT foundInMaster: true category: @@ -17237,7 +17236,7 @@ owner: pb33f logo: https://avatars.githubusercontent.com/u/104016643?v=4 license: NOASSERTION - repoEtag: '"d0eaa422f49fa5f340aece3412a9520e939831d952dbc4a3cb89f6b0a0b8034e"' + repoEtag: '"3168c346d3280fd8fb37f199e4d494afab1376fd40ec30f3aabe58a0cb0a296f"' repoLastModified: Tue, 05 Nov 2024 03:26:57 GMT category: Server Implementations foundInMaster: true @@ -18250,7 +18249,7 @@ owner: meabed logo: https://avatars.githubusercontent.com/u/45731?v=4 license: MIT - repoEtag: '"47ca1710abe21f11bcf52bfd8141f7206aff32a77274e661c782f7d2a5a9f06e"' + repoEtag: '"c0691b8f9dcefa17872b4db418fa251dca031f7a0d1443d6d328d44a61527309"' repoLastModified: Fri, 12 Jan 2024 18:23:08 GMT foundInMaster: true category: @@ -19540,7 +19539,7 @@ owner: sergeyklay logo: https://avatars.githubusercontent.com/u/1256298?v=4 license: MIT - repoEtag: '"674c49cfd50cc10e0592ad7bf28d4d9c566179be5e2bed7428f73cfa815d2e53"' + repoEtag: '"ed4c41a725c79c8376558f4ec78d88e788cb4e50c1865d900abece0b95ac4981"' repoLastModified: Thu, 31 Oct 2024 15:36:14 GMT category: Server Implementations foundInMaster: true @@ -19919,7 +19918,7 @@ repositoryId: 490070672 description: Unofficial OpenAPI specification for the Redmine API created: '2022-05-08T22:36:30Z' - updated: '2024-06-12T04:16:55Z' + updated: '2024-11-05T10:11:23Z' language: null archived: false stars: 4 @@ -19928,8 +19927,8 @@ owner: d-yoshi logo: https://avatars.githubusercontent.com/u/22128066?v=4 license: MIT - repoEtag: '"8e04fa827c7a2dc436778d722610aff54b2da41d91a908966f9d1da039ddb5a8"' - repoLastModified: Wed, 12 Jun 2024 04:16:55 GMT + repoEtag: '"9ada7eac8881b81eec561de1fb5184d226aba28a8d1a3f3c25f9c8e3083ceaf4"' + repoLastModified: Tue, 05 Nov 2024 10:11:23 GMT category: - Description Validators - Server Implementations @@ -21167,7 +21166,7 @@ Lightweight API framework using an OpenAPI spec for routing and validation. created: '2022-08-12T17:32:43Z' - updated: '2024-07-25T14:14:21Z' + updated: '2024-11-05T21:54:05Z' language: Python archived: false stars: 3 @@ -21175,8 +21174,8 @@ forks: 0 owner: berislavlopac logo: https://avatars.githubusercontent.com/u/754090?v=4 - repoEtag: '"dfdf66538c83f4914258266d665cca42789433ba44a3ea234c040101ac3fdbdc"' - repoLastModified: Thu, 25 Jul 2024 14:14:21 GMT + repoEtag: '"4ed91305dcefaf9ef67d17568670138bb8072dfb073de3ffce34c6ca117cbf4f"' + repoLastModified: Tue, 05 Nov 2024 21:54:05 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -22197,7 +22196,7 @@ repositoryId: 672491411 description: Asset Administration Shell(AAS) proxy for RDBMS backend created: '2023-07-30T09:12:05Z' - updated: '2024-11-01T14:03:39Z' + updated: '2024-11-05T18:57:50Z' language: Go archived: false stars: 3 @@ -22206,8 +22205,8 @@ owner: hiroyoshii logo: https://avatars.githubusercontent.com/u/40140638?v=4 license: Apache-2.0 - repoEtag: '"ff515e1a49b4e11bfdda972afe34eece684101ea695bc93612877f9a57300219"' - repoLastModified: Fri, 01 Nov 2024 14:03:39 GMT + repoEtag: '"26bf8ee1e0fc039798e7e43996395370ad0611adfc11f0474de55feb68aa473b"' + repoLastModified: Tue, 05 Nov 2024 18:57:50 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -24626,7 +24625,7 @@ owner: tada5hi logo: https://avatars.githubusercontent.com/u/13162758?v=4 license: MIT - repoEtag: '"0d92129c85a74db958b39242e01079e0ff82fe4eaa05e81d68fc1e4518dc4b97"' + repoEtag: '"e6d0f26aad96809318553425af32ddd1b4c4a5b0ebdd54e69e5b523a2b099585"' repoLastModified: Sun, 29 Sep 2024 09:26:36 GMT category: Parsers foundInMaster: true @@ -25199,7 +25198,7 @@ owner: protung logo: https://avatars.githubusercontent.com/u/81255167?v=4 license: MIT - repoEtag: '"9504471ecddfacb1afa6776455bcb8874848d33b0be0061b83f837798fea9a57"' + repoEtag: '"ba98ba6a969478ad1844ca16340486eed57e836129b78f6a91cf3f230bb097db"' repoLastModified: Sat, 28 Sep 2024 14:25:45 GMT category: - Server @@ -27460,7 +27459,7 @@ forks: 0 owner: TheAirBlow logo: https://avatars.githubusercontent.com/u/68467762?v=4 - repoEtag: '"8ef394d34ab9ebd98800d25b6daf9f79b3feeb4501393dddf78256caa75e077e"' + repoEtag: '"ca6351410c145c6e5d38e9ec449334649e09b589473f4040cf13e762e3d16b12"' repoLastModified: Tue, 03 Jan 2023 13:13:05 GMT foundInMaster: true category: @@ -27979,7 +27978,7 @@ owner: WFCD logo: https://avatars.githubusercontent.com/u/24436369?v=4 license: MIT - repoEtag: '"f89bc560fc6155eba80abb259961060e0558768774e91e8d892eae45a472d6f5"' + repoEtag: '"183d40dbd8f0cb70f559fca3d63b64b7c4a2211fb4604071dce84acb60caebab"' repoLastModified: Wed, 23 Oct 2024 01:31:37 GMT foundInMaster: true category: @@ -30009,7 +30008,7 @@ owner: ExpediaGroup logo: https://avatars.githubusercontent.com/u/38541875?v=4 license: Apache-2.0 - repoEtag: '"7852315021b1906d3c9d0224004b6c6a82aa2e113bac7178d5dfeddeaf746116"' + repoEtag: '"e79b9acf4d312c332d263742c23a93ee09950e742506ed6296c2f9458160288d"' repoLastModified: Wed, 16 Oct 2024 12:26:42 GMT category: Parsers foundInMaster: true @@ -30320,11 +30319,11 @@ archived: false stars: 1 watchers: 2 - forks: 2 + forks: 3 owner: membrane-php logo: https://avatars.githubusercontent.com/u/104306108?v=4 license: NOASSERTION - repoEtag: '"2a0161da23eef18b3c1b74af051df3f2beaa03da7eeebbc1ad0cbe870f52f9e5"' + repoEtag: '"aba0f35f5efccb6655861cc15af1d80b95fe8a9b83795d21a5d576a0d59f4728"' repoLastModified: Fri, 04 Oct 2024 10:02:22 GMT category: Server Implementations foundInMaster: true @@ -31945,17 +31944,17 @@ Simple, Fast, Code first and Compile time generated OpenAPI documentation for Rust created: '2021-09-30T22:00:31Z' - updated: '2024-11-04T19:25:15Z' + updated: '2024-11-06T02:41:17Z' language: Rust archived: false - stars: 2454 + stars: 2456 watchers: 10 - forks: 188 + forks: 189 owner: juhaku logo: https://avatars.githubusercontent.com/u/26358664?v=4 license: Apache-2.0 - repoEtag: '"03d6364c269fd78a89086a952723cc9314be6d9c045a5c34c60adf456f44a4e9"' - repoLastModified: Mon, 04 Nov 2024 19:25:15 GMT + repoEtag: '"f1fb6953cf1a70339304e9cc980a0470a20e0ea316a9e6187f36260340d96c5b"' + repoLastModified: Wed, 06 Nov 2024 02:41:17 GMT foundInMaster: true category: Parsers id: 14269a89115b3be71493769fca4d995e @@ -31972,17 +31971,17 @@ repositoryId: 831796203 description: Generate Automatic Interactive Documentation for Your Rails API created: '2024-07-21T16:44:36Z' - updated: '2024-11-04T07:33:43Z' + updated: '2024-11-05T13:25:04Z' language: Ruby archived: false - stars: 65 + stars: 67 watchers: 4 forks: 4 owner: a-chacon logo: https://avatars.githubusercontent.com/u/39093711?v=4 license: GPL-3.0 - repoEtag: '"d31a9c3a630bf4de8397c8ba04d34983b0594e921529c8afd12ce9d5c270c69c"' - repoLastModified: Mon, 04 Nov 2024 07:33:43 GMT + repoEtag: '"f95c44995d07e7e900b5a893a2529b69746f893f6241518453bff72cd1562413"' + repoLastModified: Tue, 05 Nov 2024 13:25:04 GMT category: Parsers foundInMaster: true - source: openapi31 tags @@ -31999,7 +31998,7 @@ Sample OpenAPI description to use for whatever you like, as a hopefully more modern and useful alternative to the Petstore. created: '2024-02-01T12:49:32Z' - updated: '2024-10-31T12:21:16Z' + updated: '2024-11-05T13:50:34Z' language: JavaScript archived: false stars: 51 @@ -32008,8 +32007,8 @@ owner: bump-sh-examples logo: https://avatars.githubusercontent.com/u/157144805?v=4 license: NOASSERTION - repoEtag: '"a751f5389503d1bb5ba867b7ef1bf0e562badc8e5de8f7a616243b09ffb9a75c"' - repoLastModified: Thu, 31 Oct 2024 12:21:16 GMT + repoEtag: '"91b930aab76a8017a16feea9a30af2363c0b6587421f70a31d8aca343e5adbe4"' + repoLastModified: Tue, 05 Nov 2024 13:50:34 GMT category: Server Implementations foundInMaster: true - source: openapi31 tags @@ -32972,17 +32971,17 @@ (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. 🍺 created: '2020-02-05T08:31:50Z' - updated: '2024-11-04T20:33:58Z' + updated: '2024-11-05T18:10:06Z' language: TypeScript archived: false - stars: 3017 + stars: 3022 watchers: 14 forks: 331 owner: orval-labs logo: https://avatars.githubusercontent.com/u/176128704?v=4 license: MIT - repoEtag: '"8f26868027b66d46bf4c6a13163b25701c36854001b4ffe311c02b1fa9e757b7"' - repoLastModified: Mon, 04 Nov 2024 20:33:58 GMT + repoEtag: '"d93e2cb55e4572b4d7faee482781c15ade0ec8c8bc23ac9762d9fc51321f963c"' + repoLastModified: Tue, 05 Nov 2024 18:10:06 GMT foundInMaster: true oldLocations: - https://github.com/anymaniax/orval @@ -33688,7 +33687,7 @@ applications. Currently targeting whitebox and blackbox testing of Web APIs, like REST, GraphQL and RPC (e.g., gRPC and Thrift). created: '2017-05-25T09:11:23Z' - updated: '2024-11-04T11:22:12Z' + updated: '2024-11-05T12:25:14Z' language: Kotlin archived: false stars: 515 @@ -33697,8 +33696,8 @@ owner: WebFuzzing logo: https://avatars.githubusercontent.com/u/29148026?v=4 license: LGPL-3.0 - repoEtag: '"174d561c30ee2360d7410c631b5da4d3292880ef9c148d1035586308ebf7ff14"' - repoLastModified: Mon, 04 Nov 2024 11:22:12 GMT + repoEtag: '"bb241dcc2aa3e18cb14a729f1d1c0c2893a19dece8328f8e70c4d8ceda9f6408"' + repoLastModified: Tue, 05 Nov 2024 12:25:14 GMT foundInMaster: true id: d1d3d85149c4a9437dbdbf157cf3d7c7 oldLocations: @@ -34986,13 +34985,13 @@ id: 8deb5ec0f25533d10b0d6025d587f55c repositoryMetadata: base64Readme: >- - PiAqKmBLdWJiYCBpcyBzZWFyY2hpbmcgZm9yIG1haW50YWluZXJzLioqCgoKPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+Cgo8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2t1YmItbGFicy9rdWJiL21haW4vYXNzZXRzL2Jhbm5lci5wbmciIGFsdD0ibG9nbyIgIGhlaWdodD0iYXV0byIgLz4KClshW25wbSB2ZXJzaW9uXVtucG0tdmVyc2lvbi1zcmNdXVtucG0tdmVyc2lvbi1ocmVmXQpbIVtucG0gZG93bmxvYWRzXVtucG0tZG93bmxvYWRzLXNyY11dW25wbS1kb3dubG9hZHMtaHJlZl0KWyFbQ292ZXJhZ2VdW2NvdmVyYWdlLXNyY11dW2NvdmVyYWdlLWhyZWZdClshW0xpY2Vuc2VdW2xpY2Vuc2Utc3JjXV1bbGljZW5zZS1ocmVmXQpbIVtTcG9uc29yc11bc3BvbnNvcnMtc3JjXV1bc3BvbnNvcnMtaHJlZl0KCjxoND4KICAgIDxhIGhyZWY9Imh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9naXRodWIva3ViYi1sYWJzL2t1YmIvdHJlZS9tYWluLy9leGFtcGxlcy90eXBlc2NyaXB0IiB0YXJnZXQ9Il9ibGFuayI+VmlldyBEZW1vPC9hPgogICAgPHNwYW4+IMK3IDwvc3Bhbj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9rdWJiLmRldi8iIHRhcmdldD0iX2JsYW5rIj5Eb2N1bWVudGF0aW9uPC9hPgogICAgPHNwYW4+IMK3IDwvc3Bhbj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2lzc3Vlcy8iIHRhcmdldD0iX2JsYW5rIj5SZXBvcnQgQnVnPC9hPgogICAgPHNwYW4+IMK3IDwvc3Bhbj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2lzc3Vlcy8iIHRhcmdldD0iX2JsYW5rIj5SZXF1ZXN0IEZlYXR1cmU8L2E+CiAgPC9oND4KPC9kaXY+Cgo8YnIgLz4KCiMjIEZlYXR1cmVzCgo8ZGl2IGFsaWduPSJjZW50ZXIiPgogIDxpbWcgc3JjPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va3ViYi1sYWJzL2t1YmIvbWFpbi9hc3NldHMvZmVhdHVyZXMucG5nIiBhbHQ9ImZlYXR1cmVzIiAgaGVpZ2h0PSJhdXRvIiAvPgo8L2Rpdj4KCiMjIFN1cHBvcnRpbmcgS3ViYgoKS3ViYiB1c2VzIGFuIE1JVC1saWNlbnNlZCBvcGVuIHNvdXJjZSBwcm9qZWN0IHdpdGggaXRzIG9uZ29pbmcgZGV2ZWxvcG1lbnQgbWFkZSBwb3NzaWJsZSBlbnRpcmVseSBieSB0aGUgc3VwcG9ydCBvZiBTcG9uc29ycy4gSWYgeW91IHdvdWxkIGxpa2UgdG8gYmVjb21lIGEgc3BvbnNvciwgcGxlYXNlIGNvbnNpZGVyOgoKLSBbQmVjb21lIGEgU3BvbnNvciBvbiBHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zdGlqbnZhbmh1bGxlKQoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3N0aWpudmFuaHVsbGUiPgogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGlqbnZhbmh1bGxlL3Nwb25zb3JzL21haW4vc3BvbnNvcnMuc3ZnIiBhbHQ9Ik15IHNwb25zb3JzIiAvPgogIDwvYT4KPC9wPgoKIyMgQ29udHJpYnV0b3JzIFshW0NvbnRyaWJ1dG9yc11bY29udHJpYnV0b3JzLXNyY11dW2NvbnRyaWJ1dG9ycy1ocmVmXQoKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUxJU1Q6U1RBUlQgLSBEbyBub3QgcmVtb3ZlIG9yIG1vZGlmeSB0aGlzIHNlY3Rpb24gLS0+CjwhLS0gcHJldHRpZXItaWdub3JlLXN0YXJ0IC0tPgo8IS0tIG1hcmtkb3dubGludC1kaXNhYmxlIC0tPgo8dGFibGU+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHA6Ly93d3cuc3Rpam52YW5odWxsZS5iZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81OTA0NjgxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJTdGlqbiBWYW4gSHVsbGUiLz48YnIgLz48c3ViPjxiPlN0aWpuIFZhbiBIdWxsZTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPXN0aWpudmFuaHVsbGUiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9mb3NzdG9kb24ub3JnL0B4cGhlbnRvbSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81MDk2ODY3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJXb3V0ZXIgUm9vemVsZWVyIi8+PGJyIC8+PHN1Yj48Yj5Xb3V0ZXIgUm9vemVsZWVyPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9eFBoZW50b20iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9hbHVjLmlvLyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTUyMDAxNT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQWxmcmVkIi8+PGJyIC8+PHN1Yj48Yj5BbGZyZWQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9rdWJiLWxhYnMva3ViYi9jb21taXRzP2F1dGhvcj1iNnB6ZXVzYmM1NHR2aHc1amdweXc4cHd6Mng2Z3MiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JhdmVjbGFzc2ljIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE3NDM1Njg/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IktpcmlsbCBBZ2FsYWtvdiIvPjxiciAvPjxzdWI+PGI+S2lyaWxsIEFnYWxha292PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9cmF2ZWNsYXNzaWMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL3dpY2t5Lm5pbGxpYS5tcyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMDkxMzkwP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJOaWNrIFdpbGxpYW1zIi8+PGJyIC8+PHN1Yj48Yj5OaWNrIFdpbGxpYW1zPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9V2lja3lOaWxsaWFtcyIgdGl0bGU9IkRvY3VtZW50YXRpb24iPvCfk5Y8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vaGVsdCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNzMyMTEyP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJoZWx0Ii8+PGJyIC8+PHN1Yj48Yj5oZWx0PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9aGVsdCIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vVGktd2ViZGV2Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ3ODU2NT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iVmFzaWx5IE1pa2hheWxvdnNreSIvPjxiciAvPjxzdWI+PGI+VmFzaWx5IE1pa2hheWxvdnNreTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPVRpLXdlYmRldiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NoaXB0dXMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTM4MTY1NT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2hhaW0gTGV2LUFyaSIvPjxiciAvPjxzdWI+PGI+Q2hhaW0gTGV2LUFyaTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWNoaXB0dXMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL3Byb2plY3RzLnBhZm51dHkubmFtZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNjM1Njc5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJQYXZlbCBCZWxvdXNvdiIvPjxiciAvPjxzdWI+PGI+UGF2ZWwgQmVsb3Vzb3Y8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9rdWJiLWxhYnMva3ViYi9jb21taXRzP2F1dGhvcj1wYWZudXR5IiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kbWl0cnktYmxhY2t3YXZlIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzU1MjY1NDM/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRtaXRyeSBCZWxvdiIvPjxiciAvPjxzdWI+PGI+RG1pdHJ5IEJlbG92PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9ZG1pdHJ5LWJsYWNrd2F2ZSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWJ1cmdlbCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNDE0Nzg/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkFsZXggQnVyZ2VsIi8+PGJyIC8+PHN1Yj48Yj5BbGV4IEJ1cmdlbDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWFidXJnZWwiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RnYXJjaWFtdXJpYSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS84MTQ0MzMzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEYW5pZWwgR2FyY2lhIi8+PGJyIC8+PHN1Yj48Yj5EYW5pZWwgR2FyY2lhPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9ZGdhcmNpYW11cmlhIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS93dXl1YW55aTEzNSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMTc2MDg3MD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0id3V5dWFueWkxMzUiLz48YnIgLz48c3ViPjxiPnd1eXVhbnlpMTM1PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9d3V5dWFueWkxMzUiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NqdGhvbXBzb24iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTk1ODI2Nj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2hyaXMgVGhvbXBzb24iLz48YnIgLz48c3ViPjxiPkNocmlzIFRob21wc29uPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9Y2p0aG9tcHNvbiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2hrYW5nMSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yMjA5NzE/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkNhbGViIEhveW91bCBLYW5nIi8+PGJyIC8+PHN1Yj48Yj5DYWxlYiBIb3lvdWwgS2FuZzwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWhrYW5nMSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZ3JyZWVlbm4iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTMyMDQ4NTc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkdyZWdvcnkgWmh1a292c2t5Ii8+PGJyIC8+PHN1Yj48Yj5HcmVnb3J5IFpodWtvdnNreTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWdycmVlZW5uIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9DaGlsbG9NYW5pYWMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzc2MTk2ND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2hyaXN0b2ZmZXIgTsO4cmJqZXJnIi8+PGJyIC8+PHN1Yj48Yj5DaHJpc3RvZmZlciBOw7hyYmplcmc8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9rdWJiLWxhYnMva3ViYi9jb21taXRzP2F1dGhvcj1DaGlsbG9NYW5pYWMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9jb2RlZnkuZGUvZGUva2FycmllcmUiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTIyNTI0MzAxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJDSEUxUk9OIi8+PGJyIC8+PHN1Yj48Yj5DSEUxUk9OPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9Q0hFMVJPTiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjwhLS0gbWFya2Rvd25saW50LXJlc3RvcmUgLS0+CjwhLS0gcHJldHRpZXItaWdub3JlLWVuZCAtLT4KCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1MSVNUOkVORCAtLT4KPCEtLSBwcmV0dGllci1pZ25vcmUtc3RhcnQgLS0+CjwhLS0gbWFya2Rvd25saW50LWRpc2FibGUgLS0+Cgo8IS0tIG1hcmtkb3dubGludC1yZXN0b3JlIC0tPgo8IS0tIHByZXR0aWVyLWlnbm9yZS1lbmQgLS0+Cgo8IS0tIEFMTC1DT05UUklCVVRPUlMtTElTVDpFTkQgLS0+CgojIyBTdGFyIEhpc3RvcnkKCjxhIGhyZWY9Imh0dHBzOi8vc3Rhci1oaXN0b3J5LmNvbS8ja3ViYi1sYWJzL2t1YmImRGF0ZSI+CiAgPHBpY3R1cmU+CiAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vYXBpLnN0YXItaGlzdG9yeS5jb20vc3ZnP3JlcG9zPWt1YmItbGFicy9rdWJiJnR5cGU9RGF0ZSZ0aGVtZT1kYXJrIiAvPgogICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9hcGkuc3Rhci1oaXN0b3J5LmNvbS9zdmc/cmVwb3M9a3ViYi1sYWJzL2t1YmImdHlwZT1EYXRlIiAvPgogICAgPGltZyBhbHQ9IlN0YXIgSGlzdG9yeSBDaGFydCIgc3JjPSJodHRwczovL2FwaS5zdGFyLWhpc3RvcnkuY29tL3N2Zz9yZXBvcz1rdWJiLWxhYnMva3ViYiZ0eXBlPURhdGUiIC8+CiAgPC9waWN0dXJlPgo8L2E+CgoKPCEtLSBCYWRnZXMgLS0+CgpbbnBtLXZlcnNpb24tc3JjXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vdi9Aa3ViYi9jb3JlP2ZsYXQmY29sb3JBPTE4MTgxQiZjb2xvckI9ZjU4NTE3CltucG0tdmVyc2lvbi1ocmVmXTogaHR0cHM6Ly9ucG1qcy5jb20vcGFja2FnZS9Aa3ViYi9jb3JlCltucG0tZG93bmxvYWRzLXNyY106IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2RtL0BrdWJiL2NvcmU/ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW25wbS1kb3dubG9hZHMtaHJlZl06IGh0dHBzOi8vbnBtanMuY29tL3BhY2thZ2UvQGt1YmIvY29yZQpbbGljZW5zZS1zcmNdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9saWNlbnNlL2t1YmItbGFicy9rdWJiLnN2Zz9mbGF0JmNvbG9yQT0xODE4MUImY29sb3JCPWY1ODUxNwpbbGljZW5zZS1ocmVmXTogaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2Jsb2IvbWFpbi9MSUNFTlNFCltidWlsZC1zcmNdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9hY3Rpb25zL3dvcmtmbG93L3N0YXR1cy9rdWJiLWxhYnMva3ViYi9jaS55YW1sP3N0eWxlPWZsYXQmY29sb3JBPTE4MTgxQiZjb2xvckI9ZjU4NTE3CltidWlsZC1ocmVmXTogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGt1YmIvY29yZQpbbWluaWZpZWQtc3JjXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9idW5kbGVwaG9iaWEvbWluL0BrdWJiL2NvcmU/c3R5bGU9ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW21pbmlmaWVkLWhyZWZdOiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Aa3ViYi9jb3JlCltjb3ZlcmFnZS1zcmNdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2NvZGVjb3YvYy9naXRodWIva3ViYi1sYWJzL2t1YmI/c3R5bGU9ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW2NvdmVyYWdlLWhyZWZdOiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Aa3ViYi9jb3JlCltjb250cmlidXRvcnMtc3JjXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvY29udHJpYnV0b3JzL3N0aWpudmFuaHVsbGUva3ViYj9zdHlsZT1mbGF0JmNvbG9yQT0xODE4MUImY29sb3JCPWY1ODUxNyZsYWJlbD0lMjAKW2NvbnRyaWJ1dG9ycy1ocmVmXTogI2NvbnRyaWJ1dG9ycy0KW3Nwb25zb3JzLXNyY106IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3Nwb25zb3JzL3N0aWpudmFuaHVsbGU/c3R5bGU9ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW3Nwb25zb3JzLWhyZWZdOiBodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc3Rpam52YW5odWxsZS8K - readmeEtag: '"4ef0b0671ae67049c2a19fdd8b5de53848716b6a"' - readmeLastModified: Tue, 29 Oct 2024 16:18:29 GMT + PGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+Cgo8aW1nIHNyYz0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2t1YmItbGFicy9rdWJiL21haW4vYXNzZXRzL2Jhbm5lci5wbmciIGFsdD0ibG9nbyIgIGhlaWdodD0iYXV0byIgLz4KClshW25wbSB2ZXJzaW9uXVtucG0tdmVyc2lvbi1zcmNdXVtucG0tdmVyc2lvbi1ocmVmXQpbIVtucG0gZG93bmxvYWRzXVtucG0tZG93bmxvYWRzLXNyY11dW25wbS1kb3dubG9hZHMtaHJlZl0KWyFbQ292ZXJhZ2VdW2NvdmVyYWdlLXNyY11dW2NvdmVyYWdlLWhyZWZdClshW0xpY2Vuc2VdW2xpY2Vuc2Utc3JjXV1bbGljZW5zZS1ocmVmXQpbIVtTcG9uc29yc11bc3BvbnNvcnMtc3JjXV1bc3BvbnNvcnMtaHJlZl0KCjxoND4KICAgIDxhIGhyZWY9Imh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9naXRodWIva3ViYi1sYWJzL2t1YmIvdHJlZS9tYWluLy9leGFtcGxlcy90eXBlc2NyaXB0IiB0YXJnZXQ9Il9ibGFuayI+VmlldyBEZW1vPC9hPgogICAgPHNwYW4+IMK3IDwvc3Bhbj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9rdWJiLmRldi8iIHRhcmdldD0iX2JsYW5rIj5Eb2N1bWVudGF0aW9uPC9hPgogICAgPHNwYW4+IMK3IDwvc3Bhbj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2lzc3Vlcy8iIHRhcmdldD0iX2JsYW5rIj5SZXBvcnQgQnVnPC9hPgogICAgPHNwYW4+IMK3IDwvc3Bhbj4KICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2lzc3Vlcy8iIHRhcmdldD0iX2JsYW5rIj5SZXF1ZXN0IEZlYXR1cmU8L2E+CiAgPC9oND4KPC9kaXY+Cgo8YnIgLz4KCiMjIEZlYXR1cmVzCgo8ZGl2IGFsaWduPSJjZW50ZXIiPgogIDxpbWcgc3JjPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va3ViYi1sYWJzL2t1YmIvbWFpbi9hc3NldHMvZmVhdHVyZXMucG5nIiBhbHQ9ImZlYXR1cmVzIiAgaGVpZ2h0PSJhdXRvIiAvPgo8L2Rpdj4KCiMjIFN1cHBvcnRpbmcgS3ViYgoKS3ViYiB1c2VzIGFuIE1JVC1saWNlbnNlZCBvcGVuIHNvdXJjZSBwcm9qZWN0IHdpdGggaXRzIG9uZ29pbmcgZGV2ZWxvcG1lbnQgbWFkZSBwb3NzaWJsZSBlbnRpcmVseSBieSB0aGUgc3VwcG9ydCBvZiBTcG9uc29ycy4gSWYgeW91IHdvdWxkIGxpa2UgdG8gYmVjb21lIGEgc3BvbnNvciwgcGxlYXNlIGNvbnNpZGVyOgoKLSBbQmVjb21lIGEgU3BvbnNvciBvbiBHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zcG9uc29ycy9zdGlqbnZhbmh1bGxlKQoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL3N0aWpudmFuaHVsbGUiPgogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9zdGlqbnZhbmh1bGxlL3Nwb25zb3JzL21haW4vc3BvbnNvcnMuc3ZnIiBhbHQ9Ik15IHNwb25zb3JzIiAvPgogIDwvYT4KPC9wPgoKIyMgQ29udHJpYnV0b3JzIFshW0NvbnRyaWJ1dG9yc11bY29udHJpYnV0b3JzLXNyY11dW2NvbnRyaWJ1dG9ycy1ocmVmXQoKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUxJU1Q6U1RBUlQgLSBEbyBub3QgcmVtb3ZlIG9yIG1vZGlmeSB0aGlzIHNlY3Rpb24gLS0+CjwhLS0gcHJldHRpZXItaWdub3JlLXN0YXJ0IC0tPgo8IS0tIG1hcmtkb3dubGludC1kaXNhYmxlIC0tPgo8dGFibGU+CiAgPHRib2R5PgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHA6Ly93d3cuc3Rpam52YW5odWxsZS5iZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81OTA0NjgxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJTdGlqbiBWYW4gSHVsbGUiLz48YnIgLz48c3ViPjxiPlN0aWpuIFZhbiBIdWxsZTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPXN0aWpudmFuaHVsbGUiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9mb3NzdG9kb24ub3JnL0B4cGhlbnRvbSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81MDk2ODY3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJXb3V0ZXIgUm9vemVsZWVyIi8+PGJyIC8+PHN1Yj48Yj5Xb3V0ZXIgUm9vemVsZWVyPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9eFBoZW50b20iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9hbHVjLmlvLyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTUyMDAxNT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQWxmcmVkIi8+PGJyIC8+PHN1Yj48Yj5BbGZyZWQ8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9rdWJiLWxhYnMva3ViYi9jb21taXRzP2F1dGhvcj1iNnB6ZXVzYmM1NHR2aHc1amdweXc4cHd6Mng2Z3MiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JhdmVjbGFzc2ljIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE3NDM1Njg/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IktpcmlsbCBBZ2FsYWtvdiIvPjxiciAvPjxzdWI+PGI+S2lyaWxsIEFnYWxha292PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9cmF2ZWNsYXNzaWMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL3dpY2t5Lm5pbGxpYS5tcyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMDkxMzkwP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJOaWNrIFdpbGxpYW1zIi8+PGJyIC8+PHN1Yj48Yj5OaWNrIFdpbGxpYW1zPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9V2lja3lOaWxsaWFtcyIgdGl0bGU9IkRvY3VtZW50YXRpb24iPvCfk5Y8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vaGVsdCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNzMyMTEyP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJoZWx0Ii8+PGJyIC8+PHN1Yj48Yj5oZWx0PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9aGVsdCIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vVGktd2ViZGV2Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ3ODU2NT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iVmFzaWx5IE1pa2hheWxvdnNreSIvPjxiciAvPjxzdWI+PGI+VmFzaWx5IE1pa2hheWxvdnNreTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPVRpLXdlYmRldiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NoaXB0dXMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTM4MTY1NT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2hhaW0gTGV2LUFyaSIvPjxiciAvPjxzdWI+PGI+Q2hhaW0gTGV2LUFyaTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWNoaXB0dXMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL3Byb2plY3RzLnBhZm51dHkubmFtZSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNjM1Njc5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJQYXZlbCBCZWxvdXNvdiIvPjxiciAvPjxzdWI+PGI+UGF2ZWwgQmVsb3Vzb3Y8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9rdWJiLWxhYnMva3ViYi9jb21taXRzP2F1dGhvcj1wYWZudXR5IiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kbWl0cnktYmxhY2t3YXZlIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzU1MjY1NDM/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRtaXRyeSBCZWxvdiIvPjxiciAvPjxzdWI+PGI+RG1pdHJ5IEJlbG92PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9ZG1pdHJ5LWJsYWNrd2F2ZSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYWJ1cmdlbCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8zNDE0Nzg/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkFsZXggQnVyZ2VsIi8+PGJyIC8+PHN1Yj48Yj5BbGV4IEJ1cmdlbDwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWFidXJnZWwiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RnYXJjaWFtdXJpYSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS84MTQ0MzMzP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEYW5pZWwgR2FyY2lhIi8+PGJyIC8+PHN1Yj48Yj5EYW5pZWwgR2FyY2lhPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9ZGdhcmNpYW11cmlhIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS93dXl1YW55aTEzNSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMTc2MDg3MD92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0id3V5dWFueWkxMzUiLz48YnIgLz48c3ViPjxiPnd1eXVhbnlpMTM1PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9d3V5dWFueWkxMzUiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NqdGhvbXBzb24iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTk1ODI2Nj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2hyaXMgVGhvbXBzb24iLz48YnIgLz48c3ViPjxiPkNocmlzIFRob21wc29uPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9Y2p0aG9tcHNvbiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2hrYW5nMSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yMjA5NzE/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkNhbGViIEhveW91bCBLYW5nIi8+PGJyIC8+PHN1Yj48Yj5DYWxlYiBIb3lvdWwgS2FuZzwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWhrYW5nMSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZ3JyZWVlbm4iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTMyMDQ4NTc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkdyZWdvcnkgWmh1a292c2t5Ii8+PGJyIC8+PHN1Yj48Yj5HcmVnb3J5IFpodWtvdnNreTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2NvbW1pdHM/YXV0aG9yPWdycmVlZW5uIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9DaGlsbG9NYW5pYWMiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzc2MTk2ND92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQ2hyaXN0b2ZmZXIgTsO4cmJqZXJnIi8+PGJyIC8+PHN1Yj48Yj5DaHJpc3RvZmZlciBOw7hyYmplcmc8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9rdWJiLWxhYnMva3ViYi9jb21taXRzP2F1dGhvcj1DaGlsbG9NYW5pYWMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9jb2RlZnkuZGUvZGUva2FycmllcmUiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTIyNTI0MzAxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJDSEUxUk9OIi8+PGJyIC8+PHN1Yj48Yj5DSEUxUk9OPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va3ViYi1sYWJzL2t1YmIvY29tbWl0cz9hdXRob3I9Q0hFMVJPTiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgPC90Ym9keT4KPC90YWJsZT4KCjwhLS0gbWFya2Rvd25saW50LXJlc3RvcmUgLS0+CjwhLS0gcHJldHRpZXItaWdub3JlLWVuZCAtLT4KCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1MSVNUOkVORCAtLT4KPCEtLSBwcmV0dGllci1pZ25vcmUtc3RhcnQgLS0+CjwhLS0gbWFya2Rvd25saW50LWRpc2FibGUgLS0+Cgo8IS0tIG1hcmtkb3dubGludC1yZXN0b3JlIC0tPgo8IS0tIHByZXR0aWVyLWlnbm9yZS1lbmQgLS0+Cgo8IS0tIEFMTC1DT05UUklCVVRPUlMtTElTVDpFTkQgLS0+CgojIyBTdGFyIEhpc3RvcnkKCjxhIGhyZWY9Imh0dHBzOi8vc3Rhci1oaXN0b3J5LmNvbS8ja3ViYi1sYWJzL2t1YmImRGF0ZSI+CiAgPHBpY3R1cmU+CiAgICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Imh0dHBzOi8vYXBpLnN0YXItaGlzdG9yeS5jb20vc3ZnP3JlcG9zPWt1YmItbGFicy9rdWJiJnR5cGU9RGF0ZSZ0aGVtZT1kYXJrIiAvPgogICAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBsaWdodCkiIHNyY3NldD0iaHR0cHM6Ly9hcGkuc3Rhci1oaXN0b3J5LmNvbS9zdmc/cmVwb3M9a3ViYi1sYWJzL2t1YmImdHlwZT1EYXRlIiAvPgogICAgPGltZyBhbHQ9IlN0YXIgSGlzdG9yeSBDaGFydCIgc3JjPSJodHRwczovL2FwaS5zdGFyLWhpc3RvcnkuY29tL3N2Zz9yZXBvcz1rdWJiLWxhYnMva3ViYiZ0eXBlPURhdGUiIC8+CiAgPC9waWN0dXJlPgo8L2E+CgoKPCEtLSBCYWRnZXMgLS0+CgpbbnBtLXZlcnNpb24tc3JjXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vdi9Aa3ViYi9jb3JlP2ZsYXQmY29sb3JBPTE4MTgxQiZjb2xvckI9ZjU4NTE3CltucG0tdmVyc2lvbi1ocmVmXTogaHR0cHM6Ly9ucG1qcy5jb20vcGFja2FnZS9Aa3ViYi9jb3JlCltucG0tZG93bmxvYWRzLXNyY106IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2RtL0BrdWJiL2NvcmU/ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW25wbS1kb3dubG9hZHMtaHJlZl06IGh0dHBzOi8vbnBtanMuY29tL3BhY2thZ2UvQGt1YmIvY29yZQpbbGljZW5zZS1zcmNdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9saWNlbnNlL2t1YmItbGFicy9rdWJiLnN2Zz9mbGF0JmNvbG9yQT0xODE4MUImY29sb3JCPWY1ODUxNwpbbGljZW5zZS1ocmVmXTogaHR0cHM6Ly9naXRodWIuY29tL2t1YmItbGFicy9rdWJiL2Jsb2IvbWFpbi9MSUNFTlNFCltidWlsZC1zcmNdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9hY3Rpb25zL3dvcmtmbG93L3N0YXR1cy9rdWJiLWxhYnMva3ViYi9jaS55YW1sP3N0eWxlPWZsYXQmY29sb3JBPTE4MTgxQiZjb2xvckI9ZjU4NTE3CltidWlsZC1ocmVmXTogaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQGt1YmIvY29yZQpbbWluaWZpZWQtc3JjXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9idW5kbGVwaG9iaWEvbWluL0BrdWJiL2NvcmU/c3R5bGU9ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW21pbmlmaWVkLWhyZWZdOiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Aa3ViYi9jb3JlCltjb3ZlcmFnZS1zcmNdOiBodHRwczovL2ltZy5zaGllbGRzLmlvL2NvZGVjb3YvYy9naXRodWIva3ViYi1sYWJzL2t1YmI/c3R5bGU9ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW2NvdmVyYWdlLWhyZWZdOiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9Aa3ViYi9jb3JlCltjb250cmlidXRvcnMtc3JjXTogaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvY29udHJpYnV0b3JzL3N0aWpudmFuaHVsbGUva3ViYj9zdHlsZT1mbGF0JmNvbG9yQT0xODE4MUImY29sb3JCPWY1ODUxNyZsYWJlbD0lMjAKW2NvbnRyaWJ1dG9ycy1ocmVmXTogI2NvbnRyaWJ1dG9ycy0KW3Nwb25zb3JzLXNyY106IGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3Nwb25zb3JzL3N0aWpudmFuaHVsbGU/c3R5bGU9ZmxhdCZjb2xvckE9MTgxODFCJmNvbG9yQj1mNTg1MTcKW3Nwb25zb3JzLWhyZWZdOiBodHRwczovL2dpdGh1Yi5jb20vc3BvbnNvcnMvc3Rpam52YW5odWxsZS8K + readmeEtag: '"8206853583265f77813865cf6b02885b04cdff1c"' + readmeLastModified: Tue, 05 Nov 2024 20:19:26 GMT repositoryId: 586543156 description: The ultimate toolkit for working with APIs. created: '2023-01-08T14:15:23Z' - updated: '2024-11-04T18:07:22Z' + updated: '2024-11-05T20:19:33Z' language: TypeScript archived: false stars: 714 @@ -35001,8 +35000,8 @@ owner: kubb-labs logo: https://avatars.githubusercontent.com/u/122118236?v=4 license: MIT - repoEtag: '"485fd9a026ac1ec54214fe83d4efd62200a96f3c431eb8a69304e53c2ac98ca7"' - repoLastModified: Mon, 04 Nov 2024 18:07:22 GMT + repoEtag: '"91fe2b3c9aaa2a541084536b9c0923f767520b0b63662075f931da00fe117e82"' + repoLastModified: Tue, 05 Nov 2024 20:19:33 GMT foundInMaster: true oldLocations: - https://github.com/kubb-project/kubb @@ -35100,17 +35099,17 @@ Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more. created: '2019-02-23T15:08:34Z' - updated: '2024-11-05T03:19:28Z' + updated: '2024-11-06T03:24:49Z' language: TypeScript archived: false - stars: 27244 + stars: 27270 watchers: 263 - forks: 4861 + forks: 4872 owner: fastapi logo: https://avatars.githubusercontent.com/u/156354296?v=4 license: MIT - repoEtag: '"9457012e259a18ab785a27fd88f6e990962194091e79cde95dedb9b39e7bca73"' - repoLastModified: Tue, 05 Nov 2024 03:19:28 GMT + repoEtag: '"c3f50203d928468696ccbe3ecd1536c3860cd72959ea1b4436b3e2c1ffa765d7"' + repoLastModified: Wed, 06 Nov 2024 03:24:49 GMT foundInMaster: true category: Server Implementations id: 0354007b562b4efc3f08ce3da7f03afb @@ -35717,7 +35716,7 @@ A spring boot starter template that includes a docker image, generate helm chart using jkube, and GitHub action CI created: '2023-10-22T19:25:57Z' - updated: '2024-10-31T16:45:24Z' + updated: '2024-11-05T21:46:08Z' language: Java archived: false stars: 0 @@ -35725,8 +35724,8 @@ forks: 0 owner: bryopsida logo: https://avatars.githubusercontent.com/u/8363252?v=4 - repoEtag: '"4c5da437692f5aecb3e11027519ea4966c0bcb6e656837d6d66a7e9e6f5bfb4e"' - repoLastModified: Thu, 31 Oct 2024 16:45:24 GMT + repoEtag: '"c4a6fc32b57dded7dd72462140675a37b006610eaacdd992e9b3dff6c7a0dbac"' + repoLastModified: Tue, 05 Nov 2024 21:46:08 GMT category: Server Implementations foundInMaster: true - name: Ballerina OpenAPI tool @@ -39973,17 +39972,17 @@ Examples and server integrations for generating the Swagger API Specification, which enables easy access to your REST API created: '2011-07-05T23:44:11Z' - updated: '2024-11-03T09:28:43Z' + updated: '2024-11-05T08:17:44Z' language: Java archived: false - stars: 7386 + stars: 7387 watchers: 309 forks: 2182 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"ee551c8e972072365938d779c4d863ff50236f017cb6a3a4922bd8ec75b9e2f0"' - repoLastModified: Sun, 03 Nov 2024 09:28:43 GMT + repoEtag: '"5511866a6db0646ae46388ed2a123292318581f7136190ad462efbff35f2d51c"' + repoLastModified: Tue, 05 Nov 2024 08:17:44 GMT id: 266d60df2d48ad8a47539de3c1071f3a - source: IMPLEMENTATIONS.md name: Microsoft.OpenApi.net @@ -40006,17 +40005,17 @@ in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model. created: '2017-07-14T00:24:14Z' - updated: '2024-11-04T23:45:02Z' + updated: '2024-11-05T23:58:58Z' language: C# archived: false - stars: 1403 + stars: 1405 watchers: 64 - forks: 233 + forks: 232 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"26236ed985c2ea045cfa74d8521524f817d9a37181f85829847cbf09a22a3b72"' - repoLastModified: Mon, 04 Nov 2024 23:45:02 GMT + repoEtag: '"1f4081014debbad2ae7020ee5fe57fa5dc87de46f0ec4361061f0efc39680e20"' + repoLastModified: Tue, 05 Nov 2024 23:58:58 GMT id: f3215034d64cfcbcc28a4bdb0205a075 - source: IMPLEMENTATIONS.md name: openapi-validator @@ -40315,17 +40314,17 @@ repositoryId: 30567860 description: Single file PHP script that adds a REST API to a SQL database created: '2015-02-10T01:08:52Z' - updated: '2024-11-02T09:57:38Z' + updated: '2024-11-05T13:51:02Z' language: PHP archived: false - stars: 3598 - watchers: 172 - forks: 1009 + stars: 3601 + watchers: 173 + forks: 1008 owner: mevdschee logo: https://avatars.githubusercontent.com/u/1288217?v=4 license: MIT - repoEtag: '"303470c496a9bdf9a6d0817630ee6cfe077b774170709afa1e93a73d8b49fc0b"' - repoLastModified: Sat, 02 Nov 2024 09:57:38 GMT + repoEtag: '"3bcdbaa9dce0e6fde14e7bb781f746284acdca3ab313fbb4a80c0e38e1e53486"' + repoLastModified: Tue, 05 Nov 2024 13:51:02 GMT id: 84a7be428932f7789a8ad1a220b22216 - source: IMPLEMENTATIONS.md name: Fastify OpenAPI v3 @@ -41191,17 +41190,17 @@ LoopBack makes it easy to build modern API applications that require complex integrations. created: '2017-01-09T17:27:14Z' - updated: '2024-11-02T08:05:07Z' + updated: '2024-11-05T16:41:21Z' language: TypeScript archived: false - stars: 4958 + stars: 4957 watchers: 136 forks: 1066 owner: loopbackio logo: https://avatars.githubusercontent.com/u/22173486?v=4 license: NOASSERTION - repoEtag: '"ced0c1c51bcf5eb8ea83e920b8d0409823c4e69e9421d4a539d8acfbbc16d9ac"' - repoLastModified: Sat, 02 Nov 2024 08:05:07 GMT + repoEtag: '"216a6bcca7b25fd29b7085b59c5428571999cb26016bd735f6ced42c06320934"' + repoLastModified: Tue, 05 Nov 2024 16:41:21 GMT foundInMaster: true id: 9132c25ad468bed25b9dbbe3a352abc2 v3: true @@ -41273,17 +41272,17 @@ testing cloud services through their REST APIs and finding security and reliability bugs in these services. created: '2020-07-24T21:40:11Z' - updated: '2024-11-05T00:03:40Z' + updated: '2024-11-05T16:22:22Z' language: Python archived: false - stars: 2601 + stars: 2602 watchers: 35 forks: 300 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"69108229c711e45e0618043227d98665293781e343e8cbdc790a09ed9ad2d199"' - repoLastModified: Tue, 05 Nov 2024 00:03:40 GMT + repoEtag: '"5a34803a84dc0a258b07d08185646270231d39f00213692bd1ad975b248769dc"' + repoLastModified: Tue, 05 Nov 2024 16:22:22 GMT foundInMaster: true oldLocations: - https://github.com/microsoft/restler