cdk-nextjs 0.7.7 → 0.7.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.jsii +2 -2
  2. package/docs/adapter-runtime.md +1 -1
  3. package/docs/harness-coverage.md +153 -73
  4. package/lib/adapter/adapter.mjs +12 -3
  5. package/lib/adapter/aws-cache-store.d.ts +7 -0
  6. package/lib/adapter/aws-cache-store.js +12 -1
  7. package/lib/adapter/aws-cache-store.test.js +32 -1
  8. package/lib/adapter/cache-handler.d.ts +5 -3
  9. package/lib/adapter/cache-handler.js +16 -10
  10. package/lib/adapter/cache-handler.mjs +103 -26
  11. package/lib/adapter/cache-handler.test.js +44 -1
  12. package/lib/adapter/cache-utils.d.ts +22 -0
  13. package/lib/adapter/cache-utils.js +44 -1
  14. package/lib/adapter/function-groups.js +17 -4
  15. package/lib/adapter/function-groups.test.js +33 -1
  16. package/lib/adapter/memory-cache-handler.d.ts +5 -1
  17. package/lib/adapter/memory-cache-handler.js +6 -2
  18. package/lib/adapter/s3-cache-handler.d.ts +12 -1
  19. package/lib/adapter/s3-cache-handler.js +30 -8
  20. package/lib/adapter/s3-cache-handler.test.js +84 -2
  21. package/lib/adapter/use-cache-common.d.ts +13 -0
  22. package/lib/adapter/use-cache-common.js +22 -6
  23. package/lib/adapter/use-cache-common.test.js +37 -1
  24. package/lib/adapter/use-cache-default-handler.mjs +33 -10
  25. package/lib/adapter/use-cache-remote-handler.mjs +33 -12
  26. package/lib/nextjs-api.js +1 -1
  27. package/lib/nextjs-build/nextjs-build.js +1 -1
  28. package/lib/nextjs-cache.js +1 -1
  29. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  30. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  31. package/lib/nextjs-distribution.js +1 -1
  32. package/lib/nextjs-post-deploy.js +1 -1
  33. package/lib/nextjs-static-assets.js +1 -1
  34. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  35. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  36. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  37. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  38. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  39. package/lib/runtime/core.js +3 -1
  40. package/lib/runtime/image-utils.d.ts +8 -9
  41. package/lib/runtime/image-utils.js +16 -1
  42. package/lib/runtime/image-utils.test.js +13 -1
  43. package/lib/runtime/image.js +9 -3
  44. package/lib/runtime/lambda.mjs +50 -15
  45. package/lib/runtime/server.mjs +50 -15
  46. package/lib/runtime/tag-manifest.d.ts +25 -0
  47. package/lib/runtime/tag-manifest.js +37 -2
  48. package/lib/runtime/tag-manifest.test.js +27 -1
  49. package/package.json +3 -3
  50. package/scripts/e2e-deploy.sh +7 -2
  51. package/scripts/e2e-harness/README.md +72 -35
  52. package/scripts/e2e-harness/screen.mjs +148 -7
  53. package/scripts/playwright-install-deps.sh +40 -0
@@ -574,6 +574,38 @@ describe("what the edge routes, checked against what was packaged", () => {
574
574
  routing,
575
575
  })).toThrow(/CloudFront sends "\/old" to the "default" group/);
576
576
  });
577
+ it("resolves a destination through a rule for a run of fallback shells", () => {
578
+ // next 16.4's `collapseAdapterRoutes` folds `/en/[slug]` and
579
+ // `/fr/[slug]` into one rule, with the matched prefix as `$1`.
580
+ const routing = {
581
+ beforeFiles: [{ source: "/old", destination: "/en/hello" }],
582
+ dynamicRoutes: [
583
+ {
584
+ sourceRegex: "^/(en|fr)/(?<nxtPslug>[^/]+?)(?:/)?$",
585
+ destination: "/$1/[slug]?nxtPslug=$nxtPslug",
586
+ },
587
+ ],
588
+ };
589
+ expect(() => assign([{ name: "en", routes: ["/en/**"] }], routes("/en/[slug]", "/fr/[slug]"), "", { routing })).toThrow(/CloudFront sends "\/old" to the "default" group/);
590
+ });
591
+ it("passes over a rule whose filled-in destination names no file", () => {
592
+ // Matched case-insensitively, the collapsed rule fills in `/EN/[slug]`,
593
+ // which no file is; `resolveRoutes` goes on to the next rule.
594
+ const routing = {
595
+ beforeFiles: [{ source: "/old", destination: "/EN/hello" }],
596
+ dynamicRoutes: [
597
+ {
598
+ sourceRegex: "^/(en|fr)/(?<nxtPslug>[^/]+?)(?:/)?$",
599
+ destination: "/$1/[slug]?nxtPslug=$nxtPslug",
600
+ },
601
+ {
602
+ sourceRegex: "^/en/(?<nxtPslug>[^/]+?)(?:/)?$",
603
+ destination: "/en/[slug]?nxtPslug=$nxtPslug",
604
+ },
605
+ ],
606
+ };
607
+ expect(() => assign([{ name: "en", routes: ["/en/**"] }], routes("/en/[slug]", "/fr/[slug]"), "", { routing })).toThrow(/CloudFront sends "\/old" to the "default" group/);
608
+ });
577
609
  it("skips an afterFiles source a route already serves, and parameterized destinations", () => {
578
610
  const routing = {
579
611
  // Never applied: `/pricing` is a route, and afterFiles yields to it.
@@ -740,4 +772,4 @@ describe("parseFunctionGroupsEnv", () => {
740
772
  expect((0, function_groups_1.parseFunctionGroupsEnv)(undefined)).toBeUndefined();
741
773
  });
742
774
  });
743
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tZ3JvdXBzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci9mdW5jdGlvbi1ncm91cHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUFzRDtBQUN0RCwrRUFBbUY7QUFDbkYsbUZBR3lEO0FBQ3pELDZGQUErRDtBQUMvRCxxRkFBdUQ7QUFDdkQsbURBQTZFO0FBQzdFLHVEQVkyQjtBQUUzQixnRUFBZ0U7QUFDaEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQW1CLEVBQWdCLEVBQUUsQ0FDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQjs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxPQUFxQixFQUFFLFFBQWdCO0lBQzFELE1BQU0sVUFBVSxHQUFHLEdBQUcsUUFBUSxlQUFlLFFBQVEsR0FBRyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDekUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNYLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ3RCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNoQyxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLFdBQVcsRUFBRSxJQUFBLGdDQUFrQixF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Q0FBZSxFQUFDLFVBQVUsRUFBRTtZQUMxQixhQUFhLEVBQUUsS0FBSztZQUNwQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7UUFDMUUsTUFBTSxDQUNKLElBQUEsaUNBQWUsRUFBQyxpQkFBaUIsRUFBRTtZQUNqQyxhQUFhLEVBQUUsS0FBSztZQUNwQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7UUFDdEMsTUFBTSxDQUFDLElBQUEsd0NBQXNCLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBnZXROYW1lZFJvdXRlUmVnZXggfSBmcm9tIFwibmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLXJlZ2V4XCI7XG5pbXBvcnQge1xuICBnZXRTb3J0ZWRSb3V0ZU9iamVjdHMsXG4gIGdldFNvcnRlZFJvdXRlcyxcbn0gZnJvbSBcIm5leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzXCI7XG5pbXBvcnQgYXBwUGxheWdyb3VuZCBmcm9tIFwiLi9fX2ZpeHR1cmVzX18vYXBwLXBsYXlncm91bmQuanNvblwiO1xuaW1wb3J0IHBhZ2VzSTE4biBmcm9tIFwiLi9fX2ZpeHR1cmVzX18vcGFnZXMtaTE4bi5qc29uXCI7XG5pbXBvcnQgeyBCdWlsZENvbXBsZXRlQ29udGV4dCwgYnVpbGRBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9idWlsZC1vdXRwdXRzXCI7XG5pbXBvcnQge1xuICBBc3NpZ25Sb3V0ZXNPcHRpb25zLFxuICBERUZBVUxUX0ZVTkNUSU9OX0dST1VQLFxuICBGdW5jdGlvbkdyb3VwU3BlYyxcbiAgUm91dGVFbnRyeSxcbiAgUm91dGluZ1J1bGVzLFxuICBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyxcbiAgaW50ZXJjZXB0ZWRSb3V0ZSxcbiAgcGFyc2VGdW5jdGlvbkdyb3Vwc0VudixcbiAgcGF0aFBhdHRlcm5zRm9yLFxuICByb3V0ZWRQYXR0ZXJucyxcbiAgdmFsaWRhdGVGdW5jdGlvbkdyb3Vwcyxcbn0gZnJvbSBcIi4vZnVuY3Rpb24tZ3JvdXBzXCI7XG5cbi8qKiBPbmUgZW50cnlwb2ludCBwZXIgdGVtcGxhdGUgdW5sZXNzIGEgdGVzdCBzYXlzIG90aGVyd2lzZS4gKi9cbmNvbnN0IHJvdXRlcyA9ICguLi50ZW1wbGF0ZXM6IHN0cmluZ1tdKTogUm91dGVFbnRyeVtdID0+XG4gIHRlbXBsYXRlcy5tYXAoKHRlbXBsYXRlKSA9PiAoeyB0ZW1wbGF0ZSwgZW50cnlwb2ludElkOiB0ZW1wbGF0ZSB9KSk7XG5cbmNvbnN0IEJVSUxEX0lEID0gXCJhYmMxMjNcIjtcblxuLyoqXG4gKiBgY3R4LnJvdXRpbmcuZHluYW1pY1JvdXRlc2AgYXMgYG5leHQgYnVpbGRgIGRlcml2ZXMgaXQgZnJvbSBgZW50cmllc2A6IE5leHQnc1xuICogb3duIHJvdXRlIHNvcnQgYW5kIHJlZ2V4ZXMsIGRhdGEgVVJMcyBpbmNsdWRlZC5cbiAqL1xuZnVuY3Rpb24gbmV4dFJvdXRpbmcoZW50cmllczogUm91dGVFbnRyeVtdLCBiYXNlUGF0aDogc3RyaW5nKTogUm91dGluZ1J1bGVzIHtcbiAgY29uc3QgZGF0YVByZWZpeCA9IGAke2Jhc2VQYXRofS9fbmV4dC9kYXRhLyR7QlVJTERfSUR9L2A7XG4gIGNvbnN0IGR5bmFtaWMgPSBbLi4ubmV3IFNldChlbnRyaWVzLm1hcCgoZW50cnkpID0+IGVudHJ5LnRlbXBsYXRlKSldLmZpbHRlcihcbiAgICAodGVtcGxhdGUpID0+XG4gICAgICB0ZW1wbGF0ZS5pbmNsdWRlcyhcIltcIikgJiZcbiAgICAgICF0ZW1wbGF0ZS5lbmRzV2l0aChcIi5yc2NcIikgJiZcbiAgICAgICEvXFwoXFwuezEsM31cXCkvLnRlc3QodGVtcGxhdGUpLFxuICApO1xuICBjb25zdCByb3V0ZSA9ICh0ZW1wbGF0ZTogc3RyaW5nKSA9PiAoe1xuICAgIHNvdXJjZVJlZ2V4OiBnZXROYW1lZFJvdXRlUmVnZXgodGVtcGxhdGUsIHtcbiAgICAgIHByZWZpeFJvdXRlS2V5czogdHJ1ZSxcbiAgICAgIGluY2x1ZGVTdWZmaXg6IHRydWUsXG4gICAgfSkubmFtZWRSZWdleCxcbiAgICBkZXN0aW5hdGlvbjogdGVtcGxhdGUsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGR5bmFtaWNSb3V0ZXM6IFtcbiAgICAgIC8vIFNvcnRlZCBieSB0aGUgcGFnZSB0aGV5IG5hbWU6IE5leHQncyBzb3J0IHJlYWRzIGBbc2x1Z10uanNvbmAgYXMgc3RhdGljLlxuICAgICAgLi4uZ2V0U29ydGVkUm91dGVPYmplY3RzKFxuICAgICAgICBkeW5hbWljLmZpbHRlcigodGVtcGxhdGUpID0+IHRlbXBsYXRlLnN0YXJ0c1dpdGgoZGF0YVByZWZpeCkpLFxuICAgICAgICAodGVtcGxhdGUpID0+IGAvJHt0ZW1wbGF0ZS5zbGljZShkYXRhUHJlZml4Lmxlbmd0aCwgLVwiLmpzb25cIi5sZW5ndGgpfWAsXG4gICAgICApLm1hcChyb3V0ZSksXG4gICAgICAuLi5nZXRTb3J0ZWRSb3V0ZXMoXG4gICAgICAgIGR5bmFtaWMuZmlsdGVyKCh0ZW1wbGF0ZSkgPT4gIXRlbXBsYXRlLnN0YXJ0c1dpdGgoZGF0YVByZWZpeCkpLFxuICAgICAgKS5tYXAocm91dGUpLFxuICAgIF0sXG4gIH07XG59XG5cbmNvbnN0IGFzc2lnbm1lbnQgPSAoXG4gIGdyb3VwczogRnVuY3Rpb25Hcm91cFNwZWNbXSxcbiAgZW50cmllczogUm91dGVFbnRyeVtdLFxuICBiYXNlUGF0aCA9IFwiXCIsXG4gIG9wdGlvbnM6IFBhcnRpYWw8QXNzaWduUm91dGVzT3B0aW9ucz4gPSB7fSxcbikgPT5cbiAgYXNzaWduUm91dGVzVG9Hcm91cHMoZ3JvdXBzLCBlbnRyaWVzLCB7XG4gICAgYmFzZVBhdGgsXG4gICAgYnVpbGRJZDogQlVJTERfSUQsXG4gICAgLi4ub3B0aW9ucyxcbiAgICByb3V0aW5nOiB7IC4uLm5leHRSb3V0aW5nKGVudHJpZXMsIGJhc2VQYXRoKSwgLi4ub3B0aW9ucy5yb3V0aW5nIH0sXG4gIH0pO1xuXG5jb25zdCBhc3NpZ24gPSAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgYXNzaWdubWVudD4pID0+XG4gIGFzc2lnbm1lbnQoLi4uYXJncykudGVtcGxhdGVzO1xuXG4vKiogVGhlIHBhdGggcGF0dGVybnMgb2YgdGhlIGJlaGF2aW9ycyB0aGUgYXNzaWdubWVudCByZXR1cm5zLCBpbiBvcmRlci4gKi9cbmNvbnN0IHBhdHRlcm5zT2YgPSAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgYXNzaWdubWVudD4pID0+XG4gIGFzc2lnbm1lbnQoLi4uYXJncykuYmVoYXZpb3JzLm1hcCgoeyBwYXR0ZXJuIH0pID0+IHBhdHRlcm4pO1xuXG4vKipcbiAqIEEgY2FwdHVyZWQgYG9uQnVpbGRDb21wbGV0ZWAgZml4dHVyZSdzIHJvdXRlcywgZXhhY3RseSBhcyBgYnVpbGRBZGFwdGVyTWFuaWZlc3RgXG4gKiBoYW5kcyB0aGVtIHRvIHRoZSBhc3NpZ25tZW50LCBwbHVzIHRoZSByZXN0IG9mIHdoYXQgaXQgcGFzc2VzLlxuICovXG5mdW5jdGlvbiBmaXh0dXJlUm91dGVzKGZpeHR1cmU6IHVua25vd24pIHtcbiAgY29uc3QgY3R4ID0gc3RydWN0dXJlZENsb25lKGZpeHR1cmUpIGFzIEJ1aWxkQ29tcGxldGVDb250ZXh0O1xuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7IGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpciB9KTtcbiAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICBjb25zdCBlbnRyaWVzOiBSb3V0ZUVudHJ5W10gPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5lbnRyeXBvaW50cykubWFwKFxuICAgIChbdGVtcGxhdGUsIGVudHJ5cG9pbnRdKSA9PiAoe1xuICAgICAgdGVtcGxhdGUsXG4gICAgICBlbnRyeXBvaW50SWQ6IGVudHJ5cG9pbnQuZmlsZVBhdGgsXG4gICAgICB0eXBlOiBlbnRyeXBvaW50LnR5cGUsXG4gICAgfSksXG4gICk7XG4gIHJldHVybiB7XG4gICAgZW50cmllcyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBiYXNlUGF0aDogY3R4LmNvbmZpZy5iYXNlUGF0aCB8fCBcIlwiLFxuICAgICAgYnVpbGRJZDogY3R4LmJ1aWxkSWQsXG4gICAgICB0cmFpbGluZ1NsYXNoOiBjdHguY29uZmlnLnRyYWlsaW5nU2xhc2ggPT09IHRydWUsXG4gICAgICByb3V0aW5nOiBjdHgucm91dGluZyxcbiAgICB9IGFzIEFzc2lnblJvdXRlc09wdGlvbnMsXG4gIH07XG59XG5cbmRlc2NyaWJlKFwidmFsaWRhdGVGdW5jdGlvbkdyb3Vwc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVqZWN0cyBhbiBlbXB0eSBhcnJheSByYXRoZXIgdGhhbiB0cmVhdGluZyBpdCBhcyBubyBzcGxpdHRpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFtdKSkudG9UaHJvdygvT21pdCB0aGUgcHJvcCBlbnRpcmVseS8pO1xuICB9KTtcblxuICBpdChcInJlc2VydmVzIHRoZSBkZWZhdWx0IGdyb3VwIG5hbWVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lOiBcImRlZmF1bHRcIiwgcm91dGVzOiBbXCIvYVwiXSB9XSksXG4gICAgKS50b1Rocm93KC9yZXNlcnZlZCBncm91cCBuYW1lLyk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1tcImhhcyBzcGFjZVwiXSwgW1widW5kZXJfc2NvcmVcIl0sIFtcImRvdHMuaGVyZVwiXSwgW1wiXCJdXSkoXG4gICAgXCJyZWplY3RzIGdyb3VwIG5hbWUgJXAsIHdoaWNoIGhhcyB0byBiZSBhIGNvbnN0cnVjdCBpZFwiLFxuICAgIChuYW1lKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lLCByb3V0ZXM6IFtcIi9hXCJdIH1dKSkudG9UaHJvdyhcbiAgICAgICAgL211c3QgbWF0Y2gvLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIGl0KFwicmVqZWN0cyB0d28gZ3JvdXBzIHdpdGggdGhlIHNhbWUgbmFtZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFtcbiAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hXCJdIH0sXG4gICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYlwiXSB9LFxuICAgICAgXSksXG4gICAgKS50b1Rocm93KC9ib3RoIG5hbWVkIFwiYXBpXCIvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgZ3JvdXAgdGhhdCBvd25zIG5vIHJvdXRlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXSB9XSkpLnRvVGhyb3coXG4gICAgICAvb3ducyBubyByb3V0ZXMvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB0aGUgc2FtZSBwYXR0ZXJuIGluIHR3byBncm91cHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbXG4gICAgICAgIHsgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgICB7IG5hbWU6IFwiYlwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfSxcbiAgICAgIF0pLFxuICAgICkudG9UaHJvdygvYXBwZWFycyBpbiBib3RoIGdyb3VwIFwiYVwiIGFuZCBncm91cCBcImJcIi8pO1xuICB9KTtcblxuICBpdChcImFsbG93cyBvdmVybGFwcGluZy1idXQtZGlmZmVyZW50IHBhdHRlcm5zLCB3aGljaCByZXNvbHZlIGxvbmdlc3QtZmlyc3RcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbXG4gICAgICAgIHsgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgICB7IG5hbWU6IFwiYlwiLCByb3V0ZXM6IFtcIi9hcGkvcmVwb3J0cy8qKlwiXSB9LFxuICAgICAgXSksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlcXVpcmVzIGEgbGVhZGluZyBzbGFzaFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtcImFwaS8qKlwiXSB9XSksXG4gICAgKS50b1Rocm93KC9tdXN0IHN0YXJ0IHdpdGggXCJcXC9cIi8pO1xuICB9KTtcblxuICBpdC5lYWNoKFtbXCIvZGFzaGJvYXJkL1tpZF1cIl0sIFtcIi9ibG9nL1suLi5zbHVnXVwiXSwgW1wiL3Nob3AvW1suLi5zbHVnXV1cIl1dKShcbiAgICBcInJlamVjdHMgdGhlIGR5bmFtaWMgc2VnbWVudCBpbiAlcCwgd2hpY2ggQ2xvdWRGcm9udCBjYW5ub3QgZXhwcmVzc1wiLFxuICAgIChyb3V0ZSkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW3JvdXRlXSB9XSksXG4gICAgICApLnRvVGhyb3coL2NvbnRhaW5zIGEgZHluYW1pYyBzZWdtZW50Lyk7XG4gICAgfSxcbiAgKTtcblxuICBpdChcInJlamVjdHMgYSByb3V0ZSBncm91cCBzZWdtZW50LCB3aGljaCBuZXZlciBhcHBlYXJzIGluIGEgVVJMXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiLyhtYXJrZXRpbmcpL2Fib3V0XCJdIH1dKSxcbiAgICApLnRvVGhyb3coL3JvdXRlIGdyb3VwIHNlZ21lbnQvKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbW1wiL2FwaS8qXCJdLCBbXCIvYXBpLyoqL3hcIl0sIFtcIi9hcGkvcmVwbz90c1wiXSwgW1wiLypcIl1dKShcbiAgICBcInJlamVjdHMgdGhlIHdpbGRjYXJkIHBsYWNlbWVudCBpbiAlcFwiLFxuICAgIChyb3V0ZSkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW3JvdXRlXSB9XSksXG4gICAgICApLnRvVGhyb3coL3dpbGRjYXJkIHNvbWV3aGVyZSBvdGhlciB0aGFuIGEgdHJhaWxpbmcvKTtcbiAgICB9LFxuICApO1xuXG4gIGl0KFwicmVqZWN0cyBhIHBhdHRlcm4gdGhhdCB3b3VsZCBvd24gZXZlcnl0aGluZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtcIi8qKlwiXSB9XSksXG4gICAgKS50b1Rocm93KC93b3VsZCBvd24gZXZlcnkgcm91dGUvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHRoZSByb290LCB3aGljaCBubyBDbG91ZEZyb250IHBhdGggcGF0dGVybiBjYW4gbWF0Y2ggYWxvbmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lOiBcImFcIiwgcm91dGVzOiBbXCIvXCJdIH1dKSxcbiAgICApLnRvVGhyb3coL2Nhbm5vdCBiZSByb3V0ZWQvKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIC9pbmRleCwgd2hpY2ggaXMgYSByZWFsIEFwcCBSb3V0ZXIgcm91dGVcIiwgKCkgPT4ge1xuICAgIC8vIGBhcHAvaW5kZXgvcGFnZS50c3hgIGlzIHNlcnZlZCBhdCBgL2luZGV4YCwgYXBhcnQgZnJvbSBgL2AuIE9ubHkgdGhlXG4gICAgLy8gYXNzaWdubWVudCBrbm93cyB3aGljaCByb3V0ZXIgYC9pbmRleGAgY2FtZSBmcm9tOyBpdCByZWplY3RzIHRoZSBQYWdlc1xuICAgIC8vIFJvdXRlciBob21lIHBhZ2UsIHdoaWNoIGlzIHRoZSBzYW1lIGZpbGUgYXMgYC9gLlxuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lOiBcImFcIiwgcm91dGVzOiBbXCIvaW5kZXhcIl0gfV0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXCIvX25leHRcIiwgXCIvX25leHQvKipcIiwgXCIvX25leHQvZGF0YS8qKlwiXSkoXG4gICAgXCJyZWplY3RzICVzLCB3aGljaCBOZXh0LmpzIHJlc2VydmVzXCIsXG4gICAgKHJvdXRlKSA9PiB7XG4gICAgICAvLyBBIGRhdGEgcm91dGUgZm9sbG93cyBpdHMgcGFnZSBpbnRvIHRoZSBwYWdlJ3MgZ3JvdXA7IGEgYF9uZXh0LypgXG4gICAgICAvLyBiZWhhdmlvciB3b3VsZCBjb21wZXRlIHdpdGggdGhlIHN0YXRpYy1hc3NldCBhbmQgaW1hZ2UgYmVoYXZpb3JzLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW3JvdXRlXSB9XSksXG4gICAgICApLnRvVGhyb3coL3VuZGVyIFwiXFwvX25leHRcIi8pO1xuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJyZWplY3RzIGFuIGVtcHR5IHBhdGggc2VnbWVudFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtcIi9hcGkvL3hcIl0gfV0pLFxuICAgICkudG9UaHJvdygvZW1wdHkgcGF0aCBzZWdtZW50Lyk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1xuICAgIFtcIi/DvGJlclwiLCAnXCLDvFwiJ10sXG4gICAgW1wiL2EgYlwiLCAnXCIgXCInXSxcbiAgICBbXCIvc2hvcC9hLGIvKipcIiwgJ1wiLFwiJ10sXG4gICAgW1wiLzEwMCUyNVwiLCAnXCIlXCInXSxcbiAgXSkoXG4gICAgXCJyZWplY3RzICVwLCB3aGljaCBob2xkcyBhIGNoYXJhY3RlciBubyBDbG91ZEZyb250IHBhdGggcGF0dGVybiBjYW5cIixcbiAgICAocm91dGUsIGNoYXIpID0+IHtcbiAgICAgIC8vIGBwYXRoUGF0dGVybnNGb3JgIGNvcGllcyB0aGUgcm91dGUgdmVyYmF0aW0gaW50byBhIGJlaGF2aW9yIHBhdGhcbiAgICAgIC8vIHBhdHRlcm4sIHNvIHdpdGhvdXQgdGhpcyBpdCBmYWlsZWQgYXQgZGVwbG95IG5hbWluZyBuZWl0aGVyIHRoZSBncm91cFxuICAgICAgLy8gbm9yIHRoZSByb3V0ZS5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtyb3V0ZV0gfV0pLFxuICAgICAgKS50b1Rocm93KGBjb250YWlucyAke2NoYXJ9LCB3aGljaCBhIENsb3VkRnJvbnQgYmVoYXZpb3IgcGF0aCBwYXR0ZXJuYCk7XG4gICAgfSxcbiAgKTtcblxuICBpdChcImFjY2VwdHMgZXZlcnkgbGl0ZXJhbCBpbiBDbG91ZEZyb250J3MgcGF0aCBwYXR0ZXJuIGFscGhhYmV0XCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJhXCIsXG4gICAgICAgICAgcm91dGVzOiBbYC9BWmF6MDlfLS4kflwiJ0A6KyYvKipgXSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhc3NpZ25Sb3V0ZXNUb0dyb3Vwc1wiLCAoKSA9PiB7XG4gIGl0KFwicHV0cyB1bmFzc2lnbmVkIHJvdXRlcyBpbiB0aGUgZGVmYXVsdCBncm91cCwgd2hpY2ggYWx3YXlzIGV4aXN0c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfV0sXG4gICAgICByb3V0ZXMoXCIvXCIsIFwiL3ByaWNpbmdcIiwgXCIvYXBpL2hlYWx0aFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZCkudG9FcXVhbCh7XG4gICAgICBbREVGQVVMVF9GVU5DVElPTl9HUk9VUF06IFtcIi9cIiwgXCIvcHJpY2luZ1wiXSxcbiAgICAgIGFwaTogW1wiL2FwaS9oZWFsdGhcIl0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwibWF0Y2hlcyBhbiBleGFjdCBwYXR0ZXJuIG9ubHkgZXhhY3RseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbeyBuYW1lOiBcInBcIiwgcm91dGVzOiBbXCIvcHJpY2luZ1wiXSB9XSxcbiAgICAgIHJvdXRlcyhcIi9wcmljaW5nXCIsIFwiL3ByaWNpbmcvZW50ZXJwcmlzZVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZC5wKS50b0VxdWFsKFtcIi9wcmljaW5nXCJdKTtcbiAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL3ByaWNpbmcvZW50ZXJwcmlzZVwiXSk7XG4gIH0pO1xuXG4gIGl0KFwibWF0Y2hlcyBhIHN1YnRyZWUgYWdhaW5zdCB0aGUgZHluYW1pYyByb3V0ZXMgdW5kZXIgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICByb3V0ZXMoXCIvYmxvZy9bc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z10vY29tbWVudHNcIiwgXCIvYmxvZ3JvbGxcIiksXG4gICAgKTtcbiAgICBleHBlY3QoYXNzaWduZWQuYmxvZykudG9FcXVhbChbXCIvYmxvZy9bc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z10vY29tbWVudHNcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXCIvYmxvZ3JvbGxcIl0pO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGxldCBhIHN1YnRyZWUgY2xhaW0gaXRzIG93biByb290LCBiZWNhdXNlIHRoZSBiZWhhdmlvciB3b3VsZCBub3RcIiwgKCkgPT4ge1xuICAgIC8vIGAvYXBpL3JlcG9ydHMvKipgIGRlcGxveXMgYXMgQ2xvdWRGcm9udCBgYXBpL3JlcG9ydHMvKmAsIHdoaWNoIGRvZXMgbm90XG4gICAgLy8gbWF0Y2ggYC9hcGkvcmVwb3J0c2AuIENsYWltaW5nIGl0IGhlcmUgd291bGQgcGFja2FnZSB0aGUgcm91dGUgaW50byBhXG4gICAgLy8gZnVuY3Rpb24gdGhlIGVkZ2UgbmV2ZXIgcm91dGVzIGl0IHRvLlxuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgYXNzaWduKFxuICAgICAgICBbeyBuYW1lOiBcInJcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfV0sXG4gICAgICAgIHJvdXRlcyhcIi9hcGkvcmVwb3J0c1wiKSxcbiAgICAgICksXG4gICAgKS50b1Rocm93KC9tYXRjaGVzIG5vIHJvdXRlIGluIHRoaXMgYnVpbGQvKTtcbiAgfSk7XG5cbiAgaXQoXCJnaXZlcyB0aGUgbG9uZ2VzdCBtYXRjaGluZyBwYXR0ZXJuIHRoZSByb3V0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbXG4gICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH0sXG4gICAgICAgIHsgbmFtZTogXCJyZXBvcnRzXCIsIHJvdXRlczogW1wiL2FwaS9yZXBvcnRzLyoqXCJdIH0sXG4gICAgICBdLFxuICAgICAgcm91dGVzKFwiL2FwaS9oZWFsdGhcIiwgXCIvYXBpL3JlcG9ydHMvW2lkXVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZC5hcGkpLnRvRXF1YWwoW1wiL2FwaS9oZWFsdGhcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZC5yZXBvcnRzKS50b0VxdWFsKFtcIi9hcGkvcmVwb3J0cy9baWRdXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJyYW5rcyBieSBzZWdtZW50IGNvdW50IGJlZm9yZSBzdHJpbmcgbGVuZ3RoXCIsICgpID0+IHtcbiAgICAvLyBcIi9hL2JcIiBpcyBkZWVwZXIgdGhhbiBcIi9hbG9uZ25hbWVcIiBldmVuIHRob3VnaCBpdCBpcyBzaG9ydGVyLlxuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW1xuICAgICAgICB7IG5hbWU6IFwiZGVlcFwiLCByb3V0ZXM6IFtcIi9hL2IvKipcIl0gfSxcbiAgICAgICAgeyBuYW1lOiBcImxvbmdcIiwgcm91dGVzOiBbXCIvYS8qKlwiXSB9LFxuICAgICAgXSxcbiAgICAgIHJvdXRlcyhcIi9hL2IvY1wiLCBcIi9hL3hcIiksXG4gICAgKTtcbiAgICBleHBlY3QoYXNzaWduZWQuZGVlcCkudG9FcXVhbChbXCIvYS9iL2NcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZC5sb25nKS50b0VxdWFsKFtcIi9hL3hcIl0pO1xuICB9KTtcblxuICBpdChcInRocm93cyBvbiBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIG5vdGhpbmcsIGJlY2F1c2UgdGhlIHR5cG8gaXMgaW52aXNpYmxlXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL2FweS8qKlwiXSB9XSxcbiAgICAgICAgcm91dGVzKFwiL2FwaS94XCIpLFxuICAgICAgKSxcbiAgICApLnRvVGhyb3coL3BhdHRlcm4gXCJcXC9hcHlcXC9cXCpcXCpcIiBtYXRjaGVzIG5vIHJvdXRlLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyBhIHBhdHRlcm4gZXZlcnkgbWF0Y2ggb2Ygd2hpY2ggYSBuYXJyb3dlciBwYXR0ZXJuIGFsc28gY2xhaW1zXCIsICgpID0+IHtcbiAgICAvLyBgL2FwaS8qKmAgbmV2ZXIgd2lucyBhIHJvdXRlIGhlcmUsIGJlY2F1c2UgZXZlcnkgQVBJIHJvdXRlIHRoaXMgYnVpbGQgaGFzXG4gICAgLy8gaXMgdW5kZXIgYC9hcGkvcmVwb3J0cy9gLiBSZWNvcmRpbmcgb25seSB0aGUgKndpbm5pbmcqIHBhdHRlcm4gbWFkZSBpdCBsb29rXG4gICAgLy8gbGlrZSBhIHR5cG8gYW5kIHRocmV3IC0gcmVqZWN0aW5nIHRoZSBleGFjdCBsYXlvdXQgdGhlIGR1cGxpY2F0ZS1wYXR0ZXJuXG4gICAgLy8gZXJyb3IgZG9jdW1lbnRzIGFzIHN1cHBvcnRlZC4gVGhlIGdyb3VwIGlzIGxlZ2l0aW1hdGVseSBlbXB0eTogaXQgaXMgdGhlXG4gICAgLy8gY29uc3VtZXIncyBjaG9pY2UgdG8ga2VlcCBpdCBmb3IgdGhlIHJvdXRlcyBpdCB3aWxsIG93biBsYXRlci5cbiAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgIFtcbiAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfSxcbiAgICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgIF0sXG4gICAgICByb3V0ZXMoXCIvYXBpL3JlcG9ydHMvW2lkXVwiLCBcIi9hcGkvcmVwb3J0cy9zdW1tYXJ5XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGFzc2lnbmVkLmFwaSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KGFzc2lnbmVkLnJlcG9ydHMpLnRvRXF1YWwoW1xuICAgICAgXCIvYXBpL3JlcG9ydHMvW2lkXVwiLFxuICAgICAgXCIvYXBpL3JlcG9ydHMvc3VtbWFyeVwiLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImdpdmVzIGEgc2hhcmVkIGVudHJ5cG9pbnQgdG8gaXRzIG1vc3Qgc3BlY2lmaWMgbWF0Y2gsIG5vdCBpdHMgbGFzdCBvbmVcIiwgKCkgPT4ge1xuICAgIC8vIFR3byB0ZW1wbGF0ZXMsIG9uZSBmaWxlLCB0d28gZ3JvdXBzIHdob3NlIHBhdHRlcm5zIGJvdGggbWF0Y2ggLSBvbmVcbiAgICAvLyBuYXJyb3dseSwgb25lIGJyb2FkbHkuIE93bmVyc2hpcCB1c2VkIHRvIGJlIGxhc3Qtd3JpdGUtd2lucyBvdmVyIGBlbnRyaWVzYCxcbiAgICAvLyBzbyB0aGUgc2FtZSBidWlsZCBncm91cGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiBtYW5pZmVzdCBrZXkgb3JkZXIuXG4gICAgY29uc3QgZW50cmllczogUm91dGVFbnRyeVtdID0gW1xuICAgICAgLy8gTWF0Y2hlZCBvbmx5IGJ5IHRoZSBicm9hZCBwYXR0ZXJuLlxuICAgICAgeyB0ZW1wbGF0ZTogXCIvYXBpL2hlYWx0aFwiLCBlbnRyeXBvaW50SWQ6IFwic2hhcmVkXCIgfSxcbiAgICAgIC8vIE1hdGNoZWQgYnkgYm90aDsgdGhlIG5hcnJvdyBvbmUgd2lucy5cbiAgICAgIHsgdGVtcGxhdGU6IFwiL2FwaS9yZXBvcnRzL3N1bW1hcnlcIiwgZW50cnlwb2ludElkOiBcInNoYXJlZFwiIH0sXG4gICAgXTtcbiAgICBjb25zdCBncm91cHM6IEZ1bmN0aW9uR3JvdXBTcGVjW10gPSBbXG4gICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICBdO1xuICAgIC8vIGAvYXBpL3JlcG9ydHMvKipgIGlzIHRoZSBtb3N0IHNwZWNpZmljIGNsYWltIGFueSBvZiB0aGUgZW50cnlwb2ludCdzXG4gICAgLy8gdGVtcGxhdGVzIGhhcywgc28gaXQgdGFrZXMgdGhlIHdob2xlIGVudHJ5cG9pbnQg4oCUIGFuZCB0aGVuIHRoZSBlZGdlIHN0aWxsXG4gICAgLy8gc2VuZHMgYC9hcGkvaGVhbHRoYCB0byB0aGUgYXBpIGdyb3VwLCB3aGljaCBsYWNrcyB0aGUgZmlsZS4gVGhhdCB1c2VkIHRvXG4gICAgLy8gZGVwbG95IGFuZCA1MDA7IGl0IGlzIHRoZSBjb3ZlcmFnZSBjaGVjaydzIHRvIHJlamVjdCwgaWRlbnRpY2FsbHkgaW4gYm90aFxuICAgIC8vIG9yZGVycy5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIC9cIlxcL2FwaVxcL2hlYWx0aFwiIHRvIGdyb3VwIFwiYXBpXCIgXFwoaXRzIHBhdHRlcm4gXCJcXC9hcGlcXC9cXCpcXCpcIlxcKS87XG4gICAgZXhwZWN0KCgpID0+IGFzc2lnbihncm91cHMsIGVudHJpZXMpKS50b1Rocm93KG1lc3NhZ2UpO1xuICAgIGV4cGVjdCgoKSA9PiBhc3NpZ24oZ3JvdXBzLCBbLi4uZW50cmllc10ucmV2ZXJzZSgpKSkudG9UaHJvdyhtZXNzYWdlKTtcbiAgICBleHBlY3QoKCkgPT4gYXNzaWduKGdyb3VwcywgZW50cmllcykpLnRvVGhyb3coXG4gICAgICAvQWRkIFwiXFwvYXBpXFwvaGVhbHRoXCIgdG8gZ3JvdXAgXCJyZXBvcnRzXCIncyByb3V0ZXMvLFxuICAgICk7XG4gICAgLy8gV2hpY2ggaXMgdGhlIGZpeDogdGhlIGV4YWN0IHBhdHRlcm4gYmVhdHMgdGhlIGFwaSBzdWJ0cmVlIGF0IHRoZSBlZGdlLlxuICAgIGNvbnN0IGZpeGVkID0gYXNzaWduKFxuICAgICAgW1xuICAgICAgICBncm91cHNbMF0sXG4gICAgICAgIHsgbmFtZTogXCJyZXBvcnRzXCIsIHJvdXRlczogW1wiL2FwaS9yZXBvcnRzLyoqXCIsIFwiL2FwaS9oZWFsdGhcIl0gfSxcbiAgICAgIF0sXG4gICAgICBlbnRyaWVzLFxuICAgICk7XG4gICAgZXhwZWN0KGZpeGVkLnJlcG9ydHMpLnRvRXF1YWwoW1wiL2FwaS9oZWFsdGhcIiwgXCIvYXBpL3JlcG9ydHMvc3VtbWFyeVwiXSk7XG4gICAgZXhwZWN0KGZpeGVkLmFwaSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwicHJlZml4ZXMgYmFzZVBhdGggYmVmb3JlIG1hdGNoaW5nLCBzaW5jZSBtYW5pZmVzdCB0ZW1wbGF0ZXMgY2FycnkgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgcm91dGVzKFwiL3Byb2QvYXBpL2hlYWx0aFwiLCBcIi9wcm9kL3ByaWNpbmdcIiksXG4gICAgICBcIi9wcm9kXCIsXG4gICAgKTtcbiAgICBleHBlY3QoYXNzaWduZWQuYXBpKS50b0VxdWFsKFtcIi9wcm9kL2FwaS9oZWFsdGhcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXCIvcHJvZC9wcmljaW5nXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0d28gdGVtcGxhdGVzIHNoYXJpbmcgb25lIGVudHJ5cG9pbnQgaW4gdGhlIHNhbWUgZ3JvdXBcIiwgKCkgPT4ge1xuICAgIC8vIEEgUGFnZXMgUm91dGVyIHBhZ2UgYW5kIGl0cyBgL19uZXh0L2RhdGEvPGJ1aWxkSWQ+L+KApmpzb25gIHNpYmxpbmcgYXJlIG9uZVxuICAgIC8vIGZpbGU7IHNwbGl0dGluZyB0aGVtIHdvdWxkIHN0YWdlIGl0IHR3aWNlIGFuZCBtaXNyb3V0ZSBvbmUgb2YgdGhlbS5cbiAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgdGVtcGxhdGU6IFwiL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgICAgZW50cnlwb2ludElkOiBcInBhZ2VzL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogXCIvX25leHQvZGF0YS9hYmMxMjMvYmxvZy9bc2x1Z10uanNvblwiLFxuICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9ibG9nL1tzbHVnXVwiLFxuICAgICAgICAgIHR5cGU6IFwicGFnZVwiLFxuICAgICAgICB9LFxuICAgICAgICB7IHRlbXBsYXRlOiBcIi9cIiwgZW50cnlwb2ludElkOiBcInBhZ2VzL2luZGV4XCIsIHR5cGU6IFwicGFnZVwiIH0sXG4gICAgICBdLFxuICAgICk7XG4gICAgZXhwZWN0KGFzc2lnbmVkLmJsb2cpLnRvRXF1YWwoW1xuICAgICAgXCIvX25leHQvZGF0YS9hYmMxMjMvYmxvZy9bc2x1Z10uanNvblwiLFxuICAgICAgXCIvYmxvZy9bc2x1Z11cIixcbiAgICBdKTtcbiAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL1wiXSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBldmVyeSBncm91cCBldmVuIHdoZW4gYSBncm91cCBlbmRzIHVwIHdpdGggb25seSB0aGUgZGVmYXVsdCdzIGxlZnRvdmVyc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfV0sXG4gICAgICByb3V0ZXMoXCIvYXBpL2hlYWx0aFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChPYmplY3Qua2V5cyhhc3NpZ25lZCkuc29ydCgpKS50b0VxdWFsKFtcImFwaVwiLCBcImRlZmF1bHRcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwic29ydHMgZWFjaCBncm91cCdzIHRlbXBsYXRlcyBzbyB0aGUgbWFuaWZlc3QgaXMgYnl0ZS1zdGFibGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgcm91dGVzKFwiL2FwaS96XCIsIFwiL2FwaS9hXCIsIFwiL3pcIiwgXCIvYVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZC5hcGkpLnRvRXF1YWwoW1wiL2FwaS9hXCIsIFwiL2FwaS96XCJdKTtcbiAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL2FcIiwgXCIvelwiXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwidGhlIGJlaGF2aW9ycyB0aGUgYXNzaWdubWVudCByZXR1cm5zXCIsICgpID0+IHtcbiAgaXQoXCJvcmRlcnMgb3ZlcmxhcHBpbmcgZ3JvdXAgcGF0dGVybnMgbW9zdCBzcGVjaWZpYyBmaXJzdFwiLCAoKSA9PiB7XG4gICAgLy8gQ2xvdWRGcm9udCBzdG9wcyBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgYmVoYXZpb3IsIHNvIGBhcGkvKmAgYWhlYWQgb2ZcbiAgICAvLyBgYXBpL3JlcG9ydHMvKmAgd291bGQgc2VuZCBldmVyeSByZXBvcnQgcmVxdWVzdCB0byB0aGUgd3JvbmcgZnVuY3Rpb24uXG4gICAgZXhwZWN0KFxuICAgICAgcGF0dGVybnNPZihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgcm91dGVzKFwiL2FwaS9beF1cIiwgXCIvYXBpL3JlcG9ydHMvW2lkXVwiKSxcbiAgICAgICksXG4gICAgKS50b0VxdWFsKFtcImFwaS9yZXBvcnRzLypcIiwgXCJhcGkvKlwiXSk7XG4gIH0pO1xuXG4gIGl0KFwicmFua3MgYnkgc2VnbWVudCBjb3VudCBiZWZvcmUgc3RyaW5nIGxlbmd0aFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcGF0dGVybnNPZihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiL2EvYi8qKlwiXSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJiXCIsIHJvdXRlczogW1wiL2F2ZXJ5dmVyeWxvbmdzZWdtZW50LyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJvdXRlcyhcIi9hL2IvW3hdXCIsIFwiL2F2ZXJ5dmVyeWxvbmdzZWdtZW50L1t4XVwiKSxcbiAgICAgICksXG4gICAgKS50b0VxdWFsKFtcImEvYi8qXCIsIFwiYXZlcnl2ZXJ5bG9uZ3NlZ21lbnQvKlwiXSk7XG4gIH0pO1xuXG4gIGl0KFwicHV0cyBhbiBleGFjdCBwYXR0ZXJuIGFoZWFkIG9mIGEgd2lsZGNhcmQgb2YgdGhlIHNhbWUgZGVwdGhcIiwgKCkgPT4ge1xuICAgIC8vIGBhLypgIGFuZCBgYS9iYCBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWdtZW50IGNvdW50OyBgYS8qYCBmaXJzdFxuICAgIC8vIHN3YWxsb3dzIGBhL2JgLCBzZW5kaW5nIGdyb3VwIGIncyBvbmx5IHJvdXRlIHRvIGdyb3VwIGEncyBmdW5jdGlvbi5cbiAgICBleHBlY3QoXG4gICAgICBwYXR0ZXJuc09mKFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImFcIiwgcm91dGVzOiBbXCIvYS8qKlwiXSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJiXCIsIHJvdXRlczogW1wiL2EvYlwiXSB9LFxuICAgICAgICBdLFxuICAgICAgICByb3V0ZXMoXCIvYS9iXCIsIFwiL2EvW3hdXCIpLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW1wiYS9iXCIsIFwiYS8qXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJhZGRzIGRhdGEtVVJMIGJlaGF2aW9ycyBvbmx5IGZvciB0aGUgZ3JvdXBzIHRoYXQgb3duIGEgUGFnZXMgUm91dGVyIHBhZ2VcIiwgKCkgPT4ge1xuICAgIC8vIE9uZSBsZWdhY3kgcGFnZSBtdXN0IG5vdCBkb3VibGUgZXZlcnkgZ3JvdXAncyBiZWhhdmlvcnMuXG4gICAgZXhwZWN0KFxuICAgICAgcGF0dGVybnNPZihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCIvYmxvZy9bc2x1Z11cIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9ibG9nL1tzbHVnXS5qc1wiLFxuICAgICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHRlbXBsYXRlOiBcIi9kb2NzL1twYWdlXVwiLCBlbnRyeXBvaW50SWQ6IFwiYXBwL2RvY3MvW3BhZ2VdL3BhZ2UuanNcIiB9LFxuICAgICAgICBdLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW1wiX25leHQvZGF0YS9hYmMxMjMvYmxvZy8qXCIsIFwiYmxvZy8qXCIsIFwiZG9jcy8qXCJdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3aGF0IHRoZSBlZGdlIHJvdXRlcywgY2hlY2tlZCBhZ2FpbnN0IHdoYXQgd2FzIHBhY2thZ2VkXCIsICgpID0+IHtcbiAgZGVzY3JpYmUoXCJQYWdlcyBSb3V0ZXIgZGF0YSBVUkxzIChBKVwiLCAoKSA9PiB7XG4gICAgaXQoXCJrZWVwcyBhIG5lc3RlZCBwYWdlJ3MgZGF0YSBVUkwgaW4gaXRzIG93biBncm91cFwiLCAoKSA9PiB7XG4gICAgICAvLyBXaXRoIGBfbmV4dC9kYXRhLyovYmxvZy8qYCwgQ2xvdWRGcm9udCBzZW50IHRoZSBkb2NzIGdyb3VwJ3NcbiAgICAgIC8vIGAvX25leHQvZGF0YS88aWQ+L2RvY3MvYmxvZy9pbnRyby5qc29uYCB0byB0aGUgYmxvZyBmdW5jdGlvbi5cbiAgICAgIGNvbnN0IHBhZ2UgPSAodGVtcGxhdGU6IHN0cmluZywgZmlsZTogc3RyaW5nKTogUm91dGVFbnRyeVtdID0+IFtcbiAgICAgICAgeyB0ZW1wbGF0ZSwgZW50cnlwb2ludElkOiBmaWxlLCB0eXBlOiBcInBhZ2VcIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGVtcGxhdGU6IGAvX25leHQvZGF0YS8ke0JVSUxEX0lEfSR7dGVtcGxhdGV9Lmpzb25gLFxuICAgICAgICAgIGVudHJ5cG9pbnRJZDogZmlsZSxcbiAgICAgICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5wYWdlKFwiL2Jsb2cvW3NsdWddXCIsIFwicGFnZXMvYmxvZy9bc2x1Z10uanNcIiksXG4gICAgICAgICAgLi4ucGFnZShcIi9kb2NzL2Jsb2cvW3NsdWddXCIsIFwicGFnZXMvZG9jcy9ibG9nL1tzbHVnXS5qc1wiKSxcbiAgICAgICAgXSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQuZG9jcykudG9FcXVhbChbXG4gICAgICAgIFwiL19uZXh0L2RhdGEvYWJjMTIzL2RvY3MvYmxvZy9bc2x1Z10uanNvblwiLFxuICAgICAgICBcIi9kb2NzL2Jsb2cvW3NsdWddXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicm91dGVzIHRoZSBwYWdlcy1pMThuIGZpeHR1cmUncyBwYWdlIGFuZCBkYXRhIFVSTHMgdG9nZXRoZXJcIiwgKCkgPT4ge1xuICAgICAgLy8gU3BsaXR0aW5nIHJlZnVzZXMgaTE4biwgc28gZHJvcCB0aGUgbG9jYWxlLXByZWZpeGVkIGNvcGllcyBhbmQga2VlcCB0aGVcbiAgICAgIC8vIHNoYXBlIHRoZSBmaXh0dXJlIGhhcyB3aXRob3V0IHRoZW06IGEgZHluYW1pYyBTU0cgcGFnZSwgYW4gU1NSIHBhZ2Ugd2l0aFxuICAgICAgLy8gaXRzIGRhdGEgb3V0cHV0LCB0d28gQVBJIHJvdXRlcy5cbiAgICAgIGNvbnN0IHsgZW50cmllcywgb3B0aW9ucyB9ID0gZml4dHVyZVJvdXRlcyhwYWdlc0kxOG4pO1xuICAgICAgY29uc3QgbG9jYWxlID0gL15cXC8oPzpfbmV4dFxcL2RhdGFcXC9bXi9dK1xcLyk/KD86ZW4tVVN8ZnJ8bmwtTkwpKD86XFwvfCQpLztcbiAgICAgIGNvbnN0IHVubG9jYWxpemVkID0gZW50cmllcy5maWx0ZXIoXG4gICAgICAgIChlbnRyeSkgPT4gIWxvY2FsZS50ZXN0KGVudHJ5LnRlbXBsYXRlKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB7IHRlbXBsYXRlcywgYmVoYXZpb3JzIH0gPSBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyhcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwic3NyXCIsIHJvdXRlczogW1wiL3NzclwiXSB9LFxuICAgICAgICBdLFxuICAgICAgICB1bmxvY2FsaXplZCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG4gICAgICBleHBlY3QodGVtcGxhdGVzLmJsb2cpLnRvRXF1YWwoW1wiL2Jsb2cvW3NsdWddXCJdKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZXMuc3NyKS50b0VxdWFsKFtcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7b3B0aW9ucy5idWlsZElkfS9zc3IuanNvbmAsXG4gICAgICAgIFwiL3NzclwiLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGJlaGF2aW9ycy5maWx0ZXIoKHsgcGF0dGVybiB9KSA9PiBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCJfbmV4dC9kYXRhL1wiKSksXG4gICAgICApLnRvRXF1YWwoW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXA6IFwic3NyXCIsXG4gICAgICAgICAgcm91dGU6IFwiL3NzclwiLFxuICAgICAgICAgIHBhdHRlcm46IGBfbmV4dC9kYXRhLyR7b3B0aW9ucy5idWlsZElkfS9zc3IuanNvbmAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogXCJibG9nXCIsXG4gICAgICAgICAgcm91dGU6IFwiL2Jsb2cvKipcIixcbiAgICAgICAgICBwYXR0ZXJuOiBgX25leHQvZGF0YS8ke29wdGlvbnMuYnVpbGRJZH0vYmxvZy8qYCxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImFuIG9wdGlvbmFsIGNhdGNoLWFsbCdzIHBhcmVudCAoQilcIiwgKCkgPT4ge1xuICAgIGl0KFwicm91dGVzIHRoZSBwYXJlbnQgVVJMIHdpdGggdGhlIHN1YnRyZWUgdGhhdCBtb3ZlZCB0aGUgZmlsZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGVudHJpZXMsIG9wdGlvbnMgfSA9IGZpeHR1cmVSb3V0ZXMoYXBwUGxheWdyb3VuZCk7XG4gICAgICBjb25zdCBncm91cHMgPSBbeyBuYW1lOiBcInBhcmFtc1wiLCByb3V0ZXM6IFtcIi9wYXJhbXMvb3B0aW9uYWwvKipcIl0gfV07XG4gICAgICBjb25zdCB7IHRlbXBsYXRlcywgYmVoYXZpb3JzIH0gPSBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyhcbiAgICAgICAgZ3JvdXBzLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZXMucGFyYW1zKS50b0NvbnRhaW4oXCIvcGFyYW1zL29wdGlvbmFsL1tbLi4ucmVzdF1dXCIpO1xuICAgICAgLy8gYHBhcmFtcy9vcHRpb25hbC8qYCBkb2VzIG5vdCBtYXRjaCBgL3BhcmFtcy9vcHRpb25hbGAsIHdoaWNoIHRoZSBzYW1lXG4gICAgICAvLyBmaWxlIHNlcnZlcywgc28gaXQgZ2V0cyBhbiBleGFjdCBiZWhhdmlvciBvZiBpdHMgb3duLlxuICAgICAgZXhwZWN0KGJlaGF2aW9ycykudG9FcXVhbChbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogXCJwYXJhbXNcIixcbiAgICAgICAgICByb3V0ZTogXCIvcGFyYW1zL29wdGlvbmFsXCIsXG4gICAgICAgICAgcGF0dGVybjogXCJwYXJhbXMvb3B0aW9uYWxcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiBcInBhcmFtc1wiLFxuICAgICAgICAgIHJvdXRlOiBcIi9wYXJhbXMvb3B0aW9uYWwvKipcIixcbiAgICAgICAgICBwYXR0ZXJuOiBcInBhcmFtcy9vcHRpb25hbC8qXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicG9pbnRzIHRoZSBvbGQgZXhhY3QtcGF0dGVybiB3b3JrYXJvdW5kIGF0IHRoZSBzdWJ0cmVlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgZW50cmllcywgb3B0aW9ucyB9ID0gZml4dHVyZVJvdXRlcyhhcHBQbGF5Z3JvdW5kKTtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyhcbiAgICAgICAgICBbeyBuYW1lOiBcInBhcmFtc1wiLCByb3V0ZXM6IFtcIi9wYXJhbXMvb3B0aW9uYWxcIl0gfV0sXG4gICAgICAgICAgZW50cmllcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvc2VydmVkIGJ5IHRoZSBvcHRpb25hbCBjYXRjaC1hbGwgXCJcXC9wYXJhbXNcXC9vcHRpb25hbFxcL1xcW1xcW1xcLlxcLlxcLnJlc3RcXF1cXF1cIiwgd2hvc2Ugc3VidHJlZSBwYXR0ZXJuIFwiXFwvcGFyYW1zXFwvb3B0aW9uYWxcXC9cXCpcXCpcIiByb3V0ZXMgXCJcXC9wYXJhbXNcXC9vcHRpb25hbFwiIGFzIHdlbGwvLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwid29ya3MgdW5kZXIgYSBiYXNlUGF0aCB0b29cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICAgIFt7IG5hbWU6IFwic2hvcFwiLCByb3V0ZXM6IFtcIi9zaG9wLyoqXCJdIH1dLFxuICAgICAgICByb3V0ZXMoXCIvYmFzZS9zaG9wL1tbLi4uc2x1Z11dXCIsIFwiL2Jhc2VcIiksXG4gICAgICAgIFwiL2Jhc2VcIixcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQuc2hvcCkudG9FcXVhbChbXCIvYmFzZS9zaG9wL1tbLi4uc2x1Z11dXCJdKTtcbiAgICAgIGV4cGVjdChyb3V0ZWRQYXR0ZXJucyhbXCIvc2hvcC8qKlwiXSwgYXNzaWduZWQuc2hvcCwgXCJiYXNlXCIpKS50b0VxdWFsKFtcbiAgICAgICAgXCIvc2hvcC8qKlwiLFxuICAgICAgICBcIi9zaG9wXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicm91dGVzIGEgUGFnZXMgUm91dGVyIG9wdGlvbmFsIGNhdGNoLWFsbCdzIHBhcmVudCBkYXRhIFVSTFwiLCAoKSA9PiB7XG4gICAgICAvLyBgL19uZXh0L2RhdGEvPGlkPi9zaG9wLmpzb25gIGJlbG9uZ3MgdG8gdGhlIHNhbWUgZmlsZSwgYW5kIHRoZSBleGFjdFxuICAgICAgLy8gYC9zaG9wYCBwYXR0ZXJuIGByb3V0ZWRQYXR0ZXJuc2AgYWRkcyBjYXJyaWVzIGl0LlxuICAgICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICAgIFt7IG5hbWU6IFwic2hvcFwiLCByb3V0ZXM6IFtcIi9zaG9wLyoqXCJdIH1dLFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVtcGxhdGU6IFwiL3Nob3AvW1suLi5zbHVnXV1cIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9zaG9wL1tbLi4uc2x1Z11dLmpzXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC5zaG9wKS50b0VxdWFsKFtcIi9zaG9wL1tbLi4uc2x1Z11dXCJdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJvbmUgZmlsZSBiZWhpbmQgc2V2ZXJhbCB0ZW1wbGF0ZXMgKEMpXCIsICgpID0+IHtcbiAgICAvLyBgYXBwL1tsb2NhbGVdL3BhZ2UudHN4YCB3aXRoIHJvb3QgcGFyYW1zOiBgL2VuYCBhbmQgYC9kZWAgYXJlIHN5bnRoZXNpemVkXG4gICAgLy8gZnJvbSBvbmUgb3V0cHV0LCBhbG9uZ3NpZGUgaXRzIG93biBgL1tsb2NhbGVdYCB0ZW1wbGF0ZS5cbiAgICBjb25zdCByb290UGFyYW1zOiBSb3V0ZUVudHJ5W10gPSBbXG4gICAgICBcIi9bbG9jYWxlXVwiLFxuICAgICAgXCIvW2xvY2FsZV0ucnNjXCIsXG4gICAgICBcIi9lblwiLFxuICAgICAgXCIvZW4ucnNjXCIsXG4gICAgICBcIi9kZVwiLFxuICAgICAgXCIvZGUucnNjXCIsXG4gICAgXS5tYXAoKHRlbXBsYXRlKSA9PiAoe1xuICAgICAgdGVtcGxhdGUsXG4gICAgICBlbnRyeXBvaW50SWQ6IFwiYXBwL1tsb2NhbGVdL3BhZ2UuanNcIixcbiAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICB9KSk7XG5cbiAgICBpdChcInJlamVjdHMgYSBwYXR0ZXJuIHRoYXQgbW92ZXMgdGhlIGZpbGUgZm9yIG9uZSBvZiBpdHMgVVJMc1wiLCAoKSA9PiB7XG4gICAgICAvLyBPbmx5IGBlbmAgZ290IGEgYmVoYXZpb3IsIHNvIGAvZGVgIHJlYWNoZWQgdGhlIGRlZmF1bHQgZnVuY3Rpb24sIHdoaWNoXG4gICAgICAvLyBubyBsb25nZXIgaGFkIHRoZSBmaWxlLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihbeyBuYW1lOiBcImludGxcIiwgcm91dGVzOiBbXCIvZW5cIl0gfV0sIHJvb3RQYXJhbXMpLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvXCJhcHBcXC9cXFtsb2NhbGVcXF1cXC9wYWdlXFwuanNcIiBpcyBwYWNrYWdlZCBpbnRvIGdyb3VwIFwiaW50bFwiLCBidXQgQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvXFxbbG9jYWxlXFxdXCIgdG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLCBcIlxcL2RlXCIgdG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLyxcbiAgICAgICk7XG4gICAgICAvLyBBbmQgc2F5cyB0aGUgZmlsZSBjYW5ub3QgYmUgZ3JvdXBlZCBhdCBhbGw6IGAvW2xvY2FsZV1gIHdvdWxkIG5lZWQgYC8qKmAuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFt7IG5hbWU6IFwiaW50bFwiLCByb3V0ZXM6IFtcIi9lblwiLCBcIi9kZVwiXSB9XSwgcm9vdFBhcmFtcyksXG4gICAgICApLnRvVGhyb3coL1wiXFwvXFxbbG9jYWxlXFxdXCIgY2Fubm90IGJlIHJvdXRlZCB0byBhbnkgZ3JvdXAvKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3VnZ2VzdHMgdGhlIHBhdHRlcm4gdGhhdCBjb3ZlcnMgYSBzdGF0aWMgdGVtcGxhdGUgaXQgbGVmdCBiZWhpbmRcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2hhcmVkOiBSb3V0ZUVudHJ5W10gPSBbXG4gICAgICAgIHsgdGVtcGxhdGU6IFwiL2Fib3V0XCIsIGVudHJ5cG9pbnRJZDogXCJzaGFyZWQuanNcIiB9LFxuICAgICAgICB7IHRlbXBsYXRlOiBcIi90ZWFtXCIsIGVudHJ5cG9pbnRJZDogXCJzaGFyZWQuanNcIiB9LFxuICAgICAgXTtcbiAgICAgIGV4cGVjdCgoKSA9PiBhc3NpZ24oW3sgbmFtZTogXCJtXCIsIHJvdXRlczogW1wiL2Fib3V0XCJdIH1dLCBzaGFyZWQpKS50b1Rocm93KFxuICAgICAgICAvQWRkIFwiXFwvdGVhbVwiIHRvIGdyb3VwIFwibVwiJ3Mgcm91dGVzLyxcbiAgICAgICk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGFzc2lnbihbeyBuYW1lOiBcIm1cIiwgcm91dGVzOiBbXCIvYWJvdXRcIiwgXCIvdGVhbVwiXSB9XSwgc2hhcmVkKS5tLFxuICAgICAgKS50b0VxdWFsKFtcIi9hYm91dFwiLCBcIi90ZWFtXCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIHRoZSB0cmFpbGluZ1NsYXNoIGZvcm0sIHdoaWNoIGV4YWN0IHBhdHRlcm5zIHJvdXRlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgICBbeyBuYW1lOiBcInBcIiwgcm91dGVzOiBbXCIvcHJpY2luZ1wiXSB9XSxcbiAgICAgICAgcm91dGVzKFwiL3ByaWNpbmdcIiksXG4gICAgICAgIFwiXCIsXG4gICAgICAgIHsgdHJhaWxpbmdTbGFzaDogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC5wKS50b0VxdWFsKFtcIi9wcmljaW5nXCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicHV0cyBhbiBleGFjdCB0cmFpbGluZ1NsYXNoIGZvcm0gYWhlYWQgb2YgYSBzdWJ0cmVlIGl0IHNpdHMgYXQgdGhlIGJhc2Ugb2ZcIiwgKCkgPT4ge1xuICAgICAgLy8gYGEvYi9gIGFuZCBgYS9iLypgIGhhdmUgdGhlIHNhbWUgbGl0ZXJhbCBkZXB0aDsgd2VyZSB0aGUgc3VidHJlZSBmaXJzdFxuICAgICAgLy8gaXQgd291bGQgdGFrZSBgL2EvYi9gIGZyb20gZ3JvdXAgeC5cbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcInhcIiwgcm91dGVzOiBbXCIvYS9iXCJdIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInlcIiwgcm91dGVzOiBbXCIvYS9iLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJvdXRlcyhcIi9cIiwgXCIvYS9iXCIsIFwiL2EvYi9baWRdXCIpLFxuICAgICAgICBcIlwiLFxuICAgICAgICB7IHRyYWlsaW5nU2xhc2g6IHRydWUgfSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQueCkudG9FcXVhbChbXCIvYS9iXCJdKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC55KS50b0VxdWFsKFtcIi9hL2IvW2lkXVwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImdpdmVzIGEgZ3JvdXAgd2l0aG91dCBQYWdlcyBSb3V0ZXIgcm91dGVzIG5vIGRhdGEgVVJMIGJlaGF2aW9yc1wiLCAoKSA9PiB7XG4gICAgICAvLyBBbiBBcHAgUm91dGVyIGAvaW5kZXhgIG5leHQgdG8gYSBQYWdlcyBSb3V0ZXIgaG9tZSBwYWdlOiBhIGRhdGEgYmVoYXZpb3JcbiAgICAgIC8vIGZvciB0aGUgZ3JvdXAsIGBfbmV4dC9kYXRhLzxpZD4vaW5kZXguanNvbmAsIHdvdWxkIGJlIHRoZSBob21lIHBhZ2Unc1xuICAgICAgLy8gZGF0YSBVUkwuIFRoZSBncm91cCBvd25zIG5vIHBhZ2UsIHNvIGl0IGdldHMgbm9uZS5cbiAgICAgIGV4cGVjdChcbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiaWR4XCIsIHJvdXRlczogW1wiL2luZGV4XCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgdGVtcGxhdGU6IFwiL1wiLCBlbnRyeXBvaW50SWQ6IFwicGFnZXMvaW5kZXguanNcIiwgdHlwZTogXCJwYWdlXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IFwiL2luZGV4XCIsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvaW5kZXgvcGFnZS5qc1wiLFxuICAgICAgICAgICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICkuaWR4LFxuICAgICAgKS50b0VxdWFsKFtcIi9pbmRleFwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlamVjdHMgYSBncm91cCBwYXR0ZXJuIGNsYWltaW5nIGEgZGF0YSBVUkwgb2YgYSBmaWxlIGxlZnQgaW4gZGVmYXVsdFwiLCAoKSA9PiB7XG4gICAgICAvLyBUaGUgc2FtZSBjb2xsaXNpb24gaW4gYSBncm91cCB0aGF0IGRvZXMgb3duIGEgcGFnZS5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJpZHhcIiwgcm91dGVzOiBbXCIvaW5kZXhcIiwgXCIvbGVnYWN5XCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgdGVtcGxhdGU6IFwiL1wiLCBlbnRyeXBvaW50SWQ6IFwicGFnZXMvaW5kZXguanNcIiwgdHlwZTogXCJwYWdlXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IFwiL2luZGV4XCIsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvaW5kZXgvcGFnZS5qc1wiLFxuICAgICAgICAgICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZTogXCIvbGVnYWN5XCIsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9sZWdhY3kuanNcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coXG4gICAgICAgIC9cInBhZ2VzXFwvaW5kZXhcXC5qc1wiIGlzIHBhY2thZ2VkIGludG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLCBidXQgQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvX25leHRcXC9kYXRhXFwvYWJjMTIzXFwvaW5kZXhcXC5qc29uXCIgdG8gZ3JvdXAgXCJpZHhcIi8sXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImludGVyY2VwdGlvbiByb3V0ZXMgKEQpXCIsICgpID0+IHtcbiAgICBjb25zdCBwaG90b0FwcCA9ICgpOiBSb3V0ZUVudHJ5W10gPT4gW1xuICAgICAgeyB0ZW1wbGF0ZTogXCIvZmVlZFwiLCBlbnRyeXBvaW50SWQ6IFwiYXBwL2ZlZWQvcGFnZS5qc1wiLCB0eXBlOiBcImFwcC1wYWdlXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdGVtcGxhdGU6IFwiL2ZlZWQvKC4uKXBob3RvL1tpZF1cIixcbiAgICAgICAgZW50cnlwb2ludElkOiBcImFwcC9mZWVkLyguLilwaG90by9baWRdL3BhZ2UuanNcIixcbiAgICAgICAgdHlwZTogXCJhcHAtcGFnZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGVtcGxhdGU6IFwiL2ZlZWQvKC4uKXBob3RvL1tpZF0ucnNjXCIsXG4gICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvZmVlZC8oLi4pcGhvdG8vW2lkXS9wYWdlLmpzXCIsXG4gICAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRlbXBsYXRlOiBcIi9waG90by9baWRdXCIsXG4gICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvcGhvdG8vW2lkXS9wYWdlLmpzXCIsXG4gICAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGl0KFwicGFja2FnZXMgYW4gaW50ZXJjZXB0aW5nIGZpbGUgd2l0aCB0aGUgVVJMIGl0IGludGVyY2VwdHNcIiwgKCkgPT4ge1xuICAgICAgLy8gVGhlIHNvZnQgbmF2aWdhdGlvbiByZXF1ZXN0cyBgL3Bob3RvLzFgLCB3aGljaCBDbG91ZEZyb250IHNlbmRzIHRvIHRoZVxuICAgICAgLy8gZGVmYXVsdCBmdW5jdGlvbjsgTmV4dC5qcyByZXdyaXRlcyBpdCB0aGVyZSB0byB0aGUgaW50ZXJjZXB0aW5nIGZpbGUuXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJmZWVkXCIsIHJvdXRlczogW1wiL2ZlZWQvKipcIl0gfV0sXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5waG90b0FwcCgpLFxuICAgICAgICAgIHsgdGVtcGxhdGU6IFwiL2ZlZWQvW3Bvc3RdXCIsIGVudHJ5cG9pbnRJZDogXCJhcHAvZmVlZC9bcG9zdF0vcGFnZS5qc1wiIH0sXG4gICAgICAgIF0sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkLmZlZWQpLnRvRXF1YWwoW1wiL2ZlZWQvW3Bvc3RdXCJdKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9Db250YWluKFxuICAgICAgICBcIi9mZWVkLyguLilwaG90by9baWRdXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkW0RFRkFVTFRfRlVOQ1RJT05fR1JPVVBdKS50b0NvbnRhaW4oXG4gICAgICAgIFwiL2ZlZWQvKC4uKXBob3RvL1tpZF0ucnNjXCIsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJmb2xsb3dzIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSBpbnRvIGl0cyBncm91cFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJwaG90b3NcIiwgcm91dGVzOiBbXCIvcGhvdG8vKipcIl0gfV0sXG4gICAgICAgIHBob3RvQXBwKCksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkLnBob3RvcykudG9FcXVhbChbXG4gICAgICAgIFwiL2ZlZWQvKC4uKXBob3RvL1tpZF1cIixcbiAgICAgICAgXCIvZmVlZC8oLi4pcGhvdG8vW2lkXS5yc2NcIixcbiAgICAgICAgXCIvcGhvdG8vW2lkXVwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInRocm93cyB3aGVuIHRoZSBpbnRlcmNlcHRlZCBVUkwgc3BhY2UgaXMgc3BsaXQgYmV0d2VlbiBncm91cHNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcIm9uZVwiLCByb3V0ZXM6IFtcIi9waG90by8xXCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC4uLnBob3RvQXBwKCksXG4gICAgICAgICAgICB7IHRlbXBsYXRlOiBcIi9waG90by8xXCIsIGVudHJ5cG9pbnRJZDogXCJhcHAvcGhvdG8vMS9wYWdlLmpzXCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvaW50ZXJjZXB0aW9uIHJvdXRlIFwiXFwvZmVlZFxcL1xcKFxcLlxcLlxcKXBob3RvXFwvXFxbaWRcXF1cIi4qZ3JvdXAgXCJvbmVcIidzIHBhdHRlcm4gXCJcXC9waG90b1xcLzFcIiBjbGFpbXMgcGFydCBvZiBpdC9zLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0LmVhY2goW1xuICAgICAgW1wiL2ZlZWQvKC4uKXBob3RvL1tpZF1cIiwgXCIvcGhvdG8vW2lkXVwiXSxcbiAgICAgIFtcIi9mZWVkLyguKXBob3RvL1tpZF1cIiwgXCIvZmVlZC9waG90by9baWRdXCJdLFxuICAgICAgW1wiLyguKXBob3RvL1tpZF1cIiwgXCIvcGhvdG8vW2lkXVwiXSxcbiAgICAgIFtcIi9hL2IvKC4uKSguLilwaG90b1wiLCBcIi9waG90b1wiXSxcbiAgICAgIFtcIi9hL2IvKC4uLilwaG90b1wiLCBcIi9waG90b1wiXSxcbiAgICAgIFtcIi9waG90by9baWRdXCIsIHVuZGVmaW5lZF0sXG4gICAgXSkoXCJyZXNvbHZlcyAlcCB0byB0aGUgcm91dGUgaXQgaW50ZXJjZXB0cywgJXBcIiwgKHBhdGgsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBleHBlY3QoaW50ZXJjZXB0ZWRSb3V0ZShwYXRoKSkudG9CZShleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwibmV4dC5jb25maWcgcmV3cml0ZXMgKEQpXCIsICgpID0+IHtcbiAgICBpdChcInJlamVjdHMgYSByZXdyaXRlIHdob3NlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGFuZCBpbiBkaWZmZXJlbnQgZ3JvdXBzXCIsICgpID0+IHtcbiAgICAgIC8vIGFwcC1wbGF5Z3JvdW5kIHJld3JpdGVzIGAvZTJlL3Jld3JpdGUvOnBhdGgoLiopYCB0byBgL2UyZS9yZXdyaXRlL2VjaG9gLlxuICAgICAgLy8gR3JvdXBpbmcgb25seSB0aGUgZGVzdGluYXRpb24gbGVhdmVzIHRoZSBzb3VyY2Ugb24gdGhlIGRlZmF1bHRcbiAgICAgIC8vIGZ1bmN0aW9uLCB3aGljaCB0aGVuIHJld3JpdGVzIHRvIGEgZmlsZSBpdCBkb2VzIG5vdCBoYXZlLlxuICAgICAgY29uc3QgeyBlbnRyaWVzLCBvcHRpb25zIH0gPSBmaXh0dXJlUm91dGVzKGFwcFBsYXlncm91bmQpO1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnblJvdXRlc1RvR3JvdXBzKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZWNob1wiLCByb3V0ZXM6IFtcIi9lMmUvcmV3cml0ZS9lY2hvXCJdIH1dLFxuICAgICAgICAgIGVudHJpZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdyhcbiAgICAgICAgL3Jld3JpdGUgZnJvbSBcIlxcL2UyZVxcL3Jld3JpdGVcXC86cGF0aFxcKFxcLlxcKlxcKVwiIHRvIFwiXFwvZTJlXFwvcmV3cml0ZVxcL2VjaG9cXD8uKlwiIGNyb3NzZXMgZ3JvdXBzOiBDbG91ZEZyb250IHNlbmRzIFwiXFwvZTJlXFwvcmV3cml0ZVxcL1xcW3BhdGhcXF1cIiB0byB0aGUgXCJkZWZhdWx0XCIgZ3JvdXAsIGFuZCBOZXh0XFwuanMgdGhlbiBzZXJ2ZXMgaXQgd2l0aCBcIi4qZWNob1xcL3BhZ2VcXC5qc1wiLCB3aGljaCBpcyBwYWNrYWdlZCBpbnRvIGdyb3VwIFwiZWNob1wiLyxcbiAgICAgICk7XG4gICAgICAvLyBCb3RoIGVuZHMgaW4gb25lIGdyb3VwIGlzIGZpbmUuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGFzc2lnblJvdXRlc1RvR3JvdXBzKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZTJlXCIsIHJvdXRlczogW1wiL2UyZS9yZXdyaXRlLyoqXCJdIH1dLFxuICAgICAgICAgIGVudHJpZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKS50ZW1wbGF0ZXMuZTJlLFxuICAgICAgKS50b0NvbnRhaW4oXCIvZTJlL3Jld3JpdGUvZWNob1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVzb2x2ZXMgYSBkZXN0aW5hdGlvbiB0aHJvdWdoIE5leHQuanMncyBkeW5hbWljIHJvdXRlIHJ1bGVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvdXRpbmcgPSB7XG4gICAgICAgIGJlZm9yZUZpbGVzOiBbeyBzb3VyY2U6IFwiL29sZFwiLCBkZXN0aW5hdGlvbjogXCIvYmxvZy9oZWxsb1wiIH1dLFxuICAgICAgICBkeW5hbWljUm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlUmVnZXg6IFwiXi9ibG9nLyhbXi9dKz8pKD86Lyk/JFwiLFxuICAgICAgICAgICAgZGVzdGluYXRpb246IFwiL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9ibG9nL1tzbHVnXVwiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvdXRpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdygvQ2xvdWRGcm9udCBzZW5kcyBcIlxcL29sZFwiIHRvIHRoZSBcImRlZmF1bHRcIiBncm91cC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJza2lwcyBhbiBhZnRlckZpbGVzIHNvdXJjZSBhIHJvdXRlIGFscmVhZHkgc2VydmVzLCBhbmQgcGFyYW1ldGVyaXplZCBkZXN0aW5hdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgcm91dGluZyA9IHtcbiAgICAgICAgLy8gTmV2ZXIgYXBwbGllZDogYC9wcmljaW5nYCBpcyBhIHJvdXRlLCBhbmQgYWZ0ZXJGaWxlcyB5aWVsZHMgdG8gaXQuXG4gICAgICAgIGFmdGVyRmlsZXM6IFt7IHNvdXJjZTogXCIvcHJpY2luZ1wiLCBkZXN0aW5hdGlvbjogXCIvYmxvZy94XCIgfV0sXG4gICAgICAgIC8vIE5vdCByZXNvbHZhYmxlIGF0IHN5bnRoLlxuICAgICAgICBiZWZvcmVGaWxlczogW3sgc291cmNlOiBcIi9iLzpzbHVnXCIsIGRlc3RpbmF0aW9uOiBcIi9ibG9nLzpzbHVnXCIgfV0sXG4gICAgICB9O1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImJsb2dcIiwgcm91dGVzOiBbXCIvYmxvZy8qKlwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvYmxvZy94XCIsIFwiL3ByaWNpbmdcIiksXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICB7IHJvdXRpbmcgfSxcbiAgICAgICAgKSxcbiAgICAgICkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIHRoZSBwYXRoIGFuIG9wdGlvbmFsIHBhcmFtZXRlciBsZWF2ZXNcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgcm91dGluZyA9IHtcbiAgICAgICAgYmVmb3JlRmlsZXM6IFt7IHNvdXJjZTogXCIvZG9jcy86cGF0aCpcIiwgZGVzdGluYXRpb246IFwiL2RvY3MtYXBwXCIgfV0sXG4gICAgICB9O1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImRvY3NcIiwgcm91dGVzOiBbXCIvZG9jcy8qKlwiLCBcIi9kb2NzLWFwcFwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvZG9jcy1hcHBcIiwgXCIvZG9jcy9bcGFnZV1cIiksXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICB7IHJvdXRpbmcgfSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdygvQ2xvdWRGcm9udCBzZW5kcyBcIlxcL2RvY3NcIiB0byB0aGUgXCJkZWZhdWx0XCIgZ3JvdXAvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJhIGR5bmFtaWMgcm91dGUncyBVUkwgc3BhY2UgKEUpXCIsICgpID0+IHtcbiAgICBpdChcInJlamVjdHMgYSBzdWJ0cmVlIGNhcHR1cmluZyBVUkxzIGEgZGVmYXVsdC1ncm91cCBjYXRjaC1hbGwgc2VydmVzXCIsICgpID0+IHtcbiAgICAgIC8vIGAvYmxvZy9bc2x1Z11gIG9ubHkgbWF0Y2hlcyBvbmUgc2VnbWVudCwgc28gYC9ibG9nL2EvYmAgcmVhY2hlcyB0aGVcbiAgICAgIC8vIGJsb2cgZnVuY3Rpb24gdmlhIGBibG9nLypgIGFuZCByZXNvbHZlcyB0aGVyZSB0byBgL1suLi5zbHVnXWAsIHdoaWNoXG4gICAgICAvLyB0aGUgYmxvZyB6aXAgbGFja3MuIFRoZSB0ZW1wbGF0ZSB0ZXh0IGl0c2VsZiBuZXZlciBtYXRjaGVkIGBibG9nLypgLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImJsb2dcIiwgcm91dGVzOiBbXCIvYmxvZy8qKlwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvXCIsIFwiL1suLi5zbHVnXVwiLCBcIi9ibG9nL1tzbHVnXVwiKSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdyhcbiAgICAgICAgL1wiXFwvXFxbXFwuXFwuXFwuc2x1Z1xcXVwiIGlzIHBhY2thZ2VkIGludG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLCBidXQgQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvYmxvZ1xcL19cXC9fXCIgdG8gZ3JvdXAgXCJibG9nXCIgXFwoaXRzIHBhdHRlcm4gXCJcXC9ibG9nXFwvXFwqXFwqXCJcXCkuKmR5bmFtaWMgcm91dGUgXCJcXC9cXFtcXC5cXC5cXC5zbHVnXFxdXCIvcyxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcImNoZWNrcyB1bmRlciBhIGJhc2VQYXRoIHRvb1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9iYXNlXCIsIFwiL2Jhc2UvWy4uLnNsdWddXCIsIFwiL2Jhc2UvYmxvZy9bc2x1Z11cIiksXG4gICAgICAgICAgXCIvYmFzZVwiLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9DbG91ZEZyb250IHdvdWxkIHNlbmQgXCJcXC9iYXNlXFwvYmxvZ1xcL19cXC9fXCIgdG8gZ3JvdXAgXCJibG9nXCIvKTtcbiAgICB9KTtcblxuICAgIGl0KFwiYWNjZXB0cyB0aGUgY2FwdHVyZSB3aGVuIHRoZSBncm91cCdzIG93biByb3V0ZXMgc2hhZG93IGV2ZXJ5IFVSTCBvZiBpdFwiLCAoKSA9PiB7XG4gICAgICAvLyBBIG1vcmUgc3BlY2lmaWMgcm91dGUgaW4gdGhlIGNhcHR1cmluZyBncm91cCB3aW5zIGluc2lkZSBOZXh0LmpzLCBzb1xuICAgICAgLy8gd2l0aCBgL2Jsb2cvWy4uLnJlc3RdYCB0aGVyZSBub3RoaW5nIHVuZGVyIGAvYmxvZy9gIHJlc29sdmVzIHRvIHRoZVxuICAgICAgLy8gcm9vdCBjYXRjaC1hbGwuXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICAgIHJvdXRlcyhcIi9cIiwgXCIvWy4uLnNsdWddXCIsIFwiL2Jsb2cvW3NsdWddXCIsIFwiL2Jsb2cvWy4uLnJlc3RdXCIpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXCIvXCIsIFwiL1suLi5zbHVnXVwiXSk7XG4gICAgICBleHBlY3QoYXNzaWduZWQuYmxvZykudG9FcXVhbChbXCIvYmxvZy9bLi4ucmVzdF1cIiwgXCIvYmxvZy9bc2x1Z11cIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhY2NlcHRzIGEgc2luZ2xlLXNlZ21lbnQgcm9vdCBwYXJhbSwgd2hpY2ggbmV2ZXIgcmVhY2hlcyB1bmRlciBhIHN1YnRyZWVcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICByb3V0ZXMoXCIvXCIsIFwiL1tzbHVnXVwiLCBcIi9ibG9nL1tzbHVnXVwiKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL1wiLCBcIi9bc2x1Z11cIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWplY3RzIHRoZSB0cmFpbGluZ1NsYXNoIGZvcm0gb2YgYSBzdWJ0cmVlJ3MgYmFzZSB0aGF0IGEgcm9vdCBwYXJhbSBzZXJ2ZXNcIiwgKCkgPT4ge1xuICAgICAgLy8gYC9ibG9nL2AgbWF0Y2hlcyBgYmxvZy8qYCwgYW5kIHdpdGggbm8gYC9ibG9nYCBwYWdlIE5leHQuanMgc2VydmVzIGl0XG4gICAgICAvLyB3aXRoIGAvW3NsdWddYC5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICAgICAgcm91dGVzKFwiL1wiLCBcIi9bc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z11cIiksXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICB7IHRyYWlsaW5nU2xhc2g6IHRydWUgfSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdygvQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvYmxvZ1xcL1wiIHRvIGdyb3VwIFwiYmxvZ1wiLyk7XG4gICAgfSk7XG5cbiAgICBpdChcImxldHMgYSBzdGF0aWMgZmlyc3Qgc2VnbWVudCBpbiB0aGUgZ3JvdXAgb3V0cmFuayBhIHBhcmFtIGluIGEgbGF0ZXIgb25lXCIsICgpID0+IHtcbiAgICAgIC8vIGAvYmxvZy9zZXR0aW5nc2AgcmVhY2hlcyB0aGUgYmxvZyBmdW5jdGlvbjsgYC9ibG9nL1tzbHVnXWAgYmVhdHNcbiAgICAgIC8vIGAvW3RlYW1dL3NldHRpbmdzYCB0aGVyZSwgc3RhdGljIGZpcnN0IHNlZ21lbnQgYmVmb3JlIGR5bmFtaWMuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9cIiwgXCIvW3RlYW1dL3NldHRpbmdzXCIsIFwiL2Jsb2cvW3NsdWddXCIpLFxuICAgICAgICApLFxuICAgICAgKS5ub3QudG9UaHJvdygpO1xuICAgICAgLy8gV2l0aG91dCBpdCwgYC9bdGVhbV0vc2V0dGluZ3NgIGlzIHdoYXQgTmV4dC5qcyByZXNvbHZlcyBpdCB0by5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICAgICAgcm91dGVzKFwiL1wiLCBcIi9bdGVhbV0vc2V0dGluZ3NcIiwgXCIvYmxvZy94XCIpLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9cIlxcL2Jsb2dcXC9zZXR0aW5nc1wiIHRvIGdyb3VwIFwiYmxvZ1wiLyk7XG4gICAgfSk7XG5cbiAgICBpdChcImNoZWNrcyBhIHJvb3Qgb3B0aW9uYWwgY2F0Y2gtYWxsIGFnYWluc3Qgc3VidHJlZSBhbmQgZXhhY3QgcGF0dGVybnNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImRvY3NcIiwgcm91dGVzOiBbXCIvZG9jcy8qKlwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvW1suLi5zbHVnXV1cIiwgXCIvZG9jcy9bcGFnZV1cIiksXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coL1wiXFwvZG9jc1xcL19cXC9fXCIgdG8gZ3JvdXAgXCJkb2NzXCIvKTtcbiAgICAgIC8vIEFuIGV4YWN0IHBhdHRlcm4gb3ducyBhIHN0YXRpYyByb3V0ZSwgd2hpY2ggTmV4dC5qcyBwcmVmZXJzLlxuICAgICAgZXhwZWN0KFxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJhYm91dFwiLCByb3V0ZXM6IFtcIi9hYm91dFwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvW1suLi5zbHVnXV1cIiwgXCIvYWJvdXRcIiksXG4gICAgICAgICkuYWJvdXQsXG4gICAgICApLnRvRXF1YWwoW1wiL2Fib3V0XCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIGEgZ3JvdXBlZCBjYXRjaC1hbGwgYWdhaW5zdCBhIG5hcnJvd2VyIGdyb3VwJ3Mgc3VidHJlZVwiLCAoKSA9PiB7XG4gICAgICAvLyBgL2FwaS9yZXBvcnRzLzEvMmAgcmVhY2hlcyB0aGUgcmVwb3J0cyBmdW5jdGlvbiwgd2hpY2ggb25seSBoYXNcbiAgICAgIC8vIGAvYXBpL3JlcG9ydHMvW2lkXWA7IE5leHQuanMgcmVzb2x2ZXMgaXQgdG8gYC9hcGkvWy4uLnJlc3RdYC5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW1xuICAgICAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfSxcbiAgICAgICAgICAgIHsgbmFtZTogXCJyZXBvcnRzXCIsIHJvdXRlczogW1wiL2FwaS9yZXBvcnRzLyoqXCJdIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICByb3V0ZXMoXCIvYXBpL1suLi5yZXN0XVwiLCBcIi9hcGkvcmVwb3J0cy9baWRdXCIpLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvXCJcXC9hcGlcXC9cXFtcXC5cXC5cXC5yZXN0XFxdXCIgaXMgcGFja2FnZWQgaW50byBncm91cCBcImFwaVwiLCBidXQgQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvYXBpXFwvcmVwb3J0c1xcL19cXC9fXCIgdG8gZ3JvdXAgXCJyZXBvcnRzXCIvLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIGEgUGFnZXMgUm91dGVyIGNhdGNoLWFsbCdzIGRhdGEgVVJMc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYWdlID0gKHRlbXBsYXRlOiBzdHJpbmcsIGZpbGU6IHN0cmluZyk6IFJvdXRlRW50cnlbXSA9PiBbXG4gICAgICAgIHsgdGVtcGxhdGUsIGVudHJ5cG9pbnRJZDogZmlsZSwgdHlwZTogXCJwYWdlXCIgfSxcbiAgICAgICAge1xuICAgICAgICAgIHRlbXBsYXRlOiBgL19uZXh0L2RhdGEvJHtCVUlMRF9JRH0ke3RlbXBsYXRlfS5qc29uYCxcbiAgICAgICAgICBlbnRyeXBvaW50SWQ6IGZpbGUsXG4gICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImJsb2dcIiwgcm91dGVzOiBbXCIvYmxvZy8qKlwiXSB9XSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICAuLi5wYWdlKFwiL1suLi5zbHVnXVwiLCBcInBhZ2VzL1suLi5zbHVnXS5qc1wiKSxcbiAgICAgICAgICAgIC4uLnBhZ2UoXCIvYmxvZy9bc2x1Z11cIiwgXCJwYWdlcy9ibG9nL1tzbHVnXS5qc1wiKSxcbiAgICAgICAgICBdLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9cIlxcL19uZXh0XFwvZGF0YVxcL2FiYzEyM1xcL2Jsb2dcXC9fXFwvX1xcLmpzb25cIiB0byBncm91cCBcImJsb2dcIi8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcIi9pbmRleCAoRylcIiwgKCkgPT4ge1xuICAgIGl0KFwiZ3JvdXBzIGFuIEFwcCBSb3V0ZXIgL2luZGV4LCBhIHJvdXRlIG9mIGl0cyBvd25cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICAgIFt7IG5hbWU6IFwiaWR4XCIsIHJvdXRlczogW1wiL2luZGV4XCJdIH1dLFxuICAgICAgICBbXG4gICAgICAgICAgeyB0ZW1wbGF0ZTogXCIvXCIsIGVudHJ5cG9pbnRJZDogXCJhcHAvcGFnZS5qc1wiLCB0eXBlOiBcImFwcC1wYWdlXCIgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCIvaW5kZXgucnNjXCIsXG4gICAgICAgICAgICBlbnRyeXBvaW50SWQ6IFwiYXBwL3BhZ2UuanNcIixcbiAgICAgICAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlOiBcIi9pbmRleFwiLFxuICAgICAgICAgICAgZW50cnlwb2ludElkOiBcImFwcC9pbmRleC9wYWdlLmpzXCIsXG4gICAgICAgICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQuaWR4KS50b0VxdWFsKFtcIi9pbmRleFwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlamVjdHMgdGhlIFBhZ2VzIFJvdXRlciBob21lIHBhZ2UsIHdoaWNoIGlzIGFsc28gL1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiaWR4XCIsIHJvdXRlczogW1wiL2luZGV4XCJdIH1dLFxuICAgICAgICAgIFtcIi9cIiwgXCIvaW5kZXhcIiwgYC9fbmV4dC9kYXRhLyR7QlVJTERfSUR9L2luZGV4Lmpzb25gXS5tYXAoXG4gICAgICAgICAgICAodGVtcGxhdGUpID0+ICh7XG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgICAgICBlbnRyeXBvaW50SWQ6IFwicGFnZXMvaW5kZXguanNcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9cIlxcL1wiIGNhbm5vdCBiZSByb3V0ZWQgdG8gYW55IGdyb3VwLipcIlxcL2luZGV4XCI6IG9uZSBmaWxlL3MpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJvdXRlZFBhdHRlcm5zXCIsICgpID0+IHtcbiAgaXQoXCJhZGRzIG5vdGhpbmcgZm9yIGEgZ3JvdXAgd2l0aG91dCBhbiBvcHRpb25hbCBjYXRjaC1hbGwgYXQgYSBzdWJ0cmVlJ3MgYmFzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcm91dGVkUGF0dGVybnMoXG4gICAgICAgIFtcIi9ibG9nLyoqXCIsIFwiL3ByaWNpbmdcIl0sXG4gICAgICAgIFtcIi9ibG9nL1tzbHVnXVwiLCBcIi9ibG9nL3gvW1suLi5yZXN0XV1cIiwgXCIvcHJpY2luZ1wiXSxcbiAgICAgICAgXCJcIixcbiAgICAgICksXG4gICAgKS50b0VxdWFsKFtcIi9ibG9nLyoqXCIsIFwiL3ByaWNpbmdcIl0pO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IHJlcGVhdCBhIHBhcmVudCB0aGUgZ3JvdXAgYWxyZWFkeSBkZWNsYXJlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcm91dGVkUGF0dGVybnMoW1wiL3Nob3AvKipcIiwgXCIvc2hvcFwiXSwgW1wiL3Nob3AvW1suLi5zbHVnXV1cIl0sIFwiXCIpLFxuICAgICkudG9FcXVhbChbXCIvc2hvcC8qKlwiLCBcIi9zaG9wXCJdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYXRoUGF0dGVybnNGb3JcIiwgKCkgPT4ge1xuICBpdChcImRyb3BzIHRoZSBsZWFkaW5nIHNsYXNoLCBiZWNhdXNlIHRoZSBkaXN0cmlidXRpb24gYWRkcyBiYXNlUGF0aCBpdHNlbGZcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnNGb3IoXCIvcHJpY2luZ1wiLCB7IGhhc0RhdGFSb3V0ZXM6IGZhbHNlIH0pKS50b0VxdWFsKFtcbiAgICAgIFwicHJpY2luZ1wiLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcInR1cm5zIGEgc3VidHJlZSBpbnRvIGEgc2luZ2xlIHRyYWlsaW5nIHdpbGRjYXJkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBwYXRoUGF0dGVybnNGb3IoXCIvYXBpL3JlcG9ydHMvKipcIiwgeyBoYXNEYXRhUm91dGVzOiBmYWxzZSB9KSxcbiAgICApLnRvRXF1YWwoW1wiYXBpL3JlcG9ydHMvKlwiXSk7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyB0aGUgYF9uZXh0L2RhdGFgIFVSTCBzcGFjZSBmb3IgUGFnZXMgUm91dGVyIGdyb3Vwcywgb24gdGhlIGxpdGVyYWwgYnVpbGQgSURcIiwgKCkgPT4ge1xuICAgIC8vIEEgYCpgIGZvciB0aGUgYnVpbGQgSUQgYWxzbyBtYXRjaGVzIGAvYCwgc28gYF9uZXh0L2RhdGEvKi9ibG9nLypgIGNsYWltZWRcbiAgICAvLyBgL19uZXh0L2RhdGEvPGlkPi9kb2NzL2Jsb2cveC5qc29uYCwgYSBwYWdlIG9mIGFub3RoZXIgZ3JvdXAuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgaGFzRGF0YVJvdXRlczogdHJ1ZSwgYnVpbGRJZDogQlVJTERfSUQgfTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zRm9yKFwiL2Jsb2cvKipcIiwgb3B0aW9ucykpLnRvRXF1YWwoW1xuICAgICAgXCJibG9nLypcIixcbiAgICAgIFwiX25leHQvZGF0YS9hYmMxMjMvYmxvZy8qXCIsXG4gICAgXSk7XG4gICAgZXhwZWN0KHBhdGhQYXR0ZXJuc0ZvcihcIi9wcmljaW5nXCIsIG9wdGlvbnMpKS50b0VxdWFsKFtcbiAgICAgIFwicHJpY2luZ1wiLFxuICAgICAgXCJfbmV4dC9kYXRhL2FiYzEyMy9wcmljaW5nLmpzb25cIixcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWZ1c2VzIHRvIHJvdXRlIGRhdGEgVVJMcyB3aXRob3V0IHRoZSBidWlsZCBJRFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHBhdGhQYXR0ZXJuc0ZvcihcIi9ibG9nLyoqXCIsIHsgaGFzRGF0YVJvdXRlczogdHJ1ZSB9KSkudG9UaHJvdyhcbiAgICAgIC9uZWVkcyBpdHMgYnVpbGQgSUQvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVmdXNlcyBhIGJ1aWxkIElEIGEgcGF0aCBwYXR0ZXJuIGNhbm5vdCBob2xkXCIsICgpID0+IHtcbiAgICAvLyBgZ2VuZXJhdGVCdWlsZElkYCBjYW4gcmV0dXJuIGFueXRoaW5nLlxuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgcGF0aFBhdHRlcm5zRm9yKFwiL2Jsb2cvKipcIiwgeyBoYXNEYXRhUm91dGVzOiB0cnVlLCBidWlsZElkOiBcInYxLzIgM1wiIH0pLFxuICAgICkudG9UaHJvdygvVGhlIGJ1aWxkIElEIFwidjFcXC8yIDNcIiBjb250YWlucyBcIlxcL1wiLCBcIiBcIi8pO1xuICB9KTtcblxuICBpdChcImFkZHMgdGhlIHRyYWlsaW5nLXNsYXNoIGZvcm0gZm9yIGEgdHJhaWxpbmdTbGFzaCBhcHBcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFdpdGggYHRyYWlsaW5nU2xhc2g6IHRydWVgIHRoZSBjYW5vbmljYWwgVVJMIGlzIGAvcHJpY2luZy9gLCBhbmQgdGhhdCBpc1xuICAgIC8vIHdoYXQgZXZlcnkgbGluayBpbiB0aGUgYXBwIHBvaW50cyBhdC4gQSBiZWhhdmlvciBvbiBgcHJpY2luZ2AgYWxvbmUgZG9lc1xuICAgIC8vIG5vdCBtYXRjaCBpdCwgc28gdGhlIHJlcXVlc3QgZmVsbCB0aHJvdWdoIHRvIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIC0gd2hpY2hcbiAgICAvLyBkb2VzIG5vdCBoYXZlIHRoZSByb3V0ZSBwYWNrYWdlZC5cbiAgICBleHBlY3QocGF0aFBhdHRlcm5zRm9yKFwiL3ByaWNpbmdcIiwgeyBoYXNEYXRhUm91dGVzOiBmYWxzZSB9KSkudG9FcXVhbChbXG4gICAgICBcInByaWNpbmdcIixcbiAgICBdKTtcbiAgICBleHBlY3QoXG4gICAgICBwYXRoUGF0dGVybnNGb3IoXCIvcHJpY2luZ1wiLCB7XG4gICAgICAgIGhhc0RhdGFSb3V0ZXM6IGZhbHNlLFxuICAgICAgICB0cmFpbGluZ1NsYXNoOiB0cnVlLFxuICAgICAgfSksXG4gICAgKS50b0VxdWFsKFtcInByaWNpbmdcIiwgXCJwcmljaW5nL1wiXSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgc3VidHJlZSBwYXR0ZXJuIGFsb25lLCB3aGljaCBhbHJlYWR5IG1hdGNoZXMgYm90aCBmb3Jtc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcGF0aFBhdHRlcm5zRm9yKFwiL2FwaS9yZXBvcnRzLyoqXCIsIHtcbiAgICAgICAgaGFzRGF0YVJvdXRlczogZmFsc2UsXG4gICAgICAgIHRyYWlsaW5nU2xhc2g6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwoW1wiYXBpL3JlcG9ydHMvKlwiXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGFyc2VGdW5jdGlvbkdyb3Vwc0VudlwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgd2hlbiB1bnNldFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHBhcnNlRnVuY3Rpb25Hcm91cHNFbnYodW5kZWZpbmVkKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuIl19
775
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24tZ3JvdXBzLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci9mdW5jdGlvbi1ncm91cHMudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNEQUFzRDtBQUN0RCwrRUFBbUY7QUFDbkYsbUZBR3lEO0FBQ3pELDZGQUErRDtBQUMvRCxxRkFBdUQ7QUFDdkQsbURBQTZFO0FBQzdFLHVEQVkyQjtBQUUzQixnRUFBZ0U7QUFDaEUsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQW1CLEVBQWdCLEVBQUUsQ0FDdEQsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUUxQjs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxPQUFxQixFQUFFLFFBQWdCO0lBQzFELE1BQU0sVUFBVSxHQUFHLEdBQUcsUUFBUSxlQUFlLFFBQVEsR0FBRyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FDekUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUNYLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQ3RCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUNoQyxDQUFDO0lBQ0YsTUFBTSxLQUFLLEdBQUcsQ0FBQyxRQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLFdBQVcsRUFBRSxJQUFBLGdDQUFrQixFQUFDLFFBQVEsRUFBRTtZQUN4QyxlQUFlLEVBQUUsSUFBSTtZQUNyQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQUMsVUFBVTtRQUNiLFdBQVcsRUFBRSxRQUFRO0tBQ3RCLENBQUMsQ0FBQztJQUNILE9BQU87UUFDTCxhQUFhLEVBQUU7WUFDYiwyRUFBMkU7WUFDM0UsR0FBRyxJQUFBLHFDQUFxQixFQUN0QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQzdELENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUN2RSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7WUFDWixHQUFHLElBQUEsK0JBQWUsRUFDaEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQy9ELENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztTQUNiO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixNQUEyQixFQUMzQixPQUFxQixFQUNyQixRQUFRLEdBQUcsRUFBRSxFQUNiLFVBQXdDLEVBQUUsRUFDMUMsRUFBRSxDQUNGLElBQUEsc0NBQW9CLEVBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtJQUNwQyxRQUFRO0lBQ1IsT0FBTyxFQUFFLFFBQVE7SUFDakIsR0FBRyxPQUFPO0lBQ1YsT0FBTyxFQUFFLEVBQUUsR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRTtDQUNuRSxDQUFDLENBQUM7QUFFTCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBbUMsRUFBRSxFQUFFLENBQ3hELFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUVoQywyRUFBMkU7QUFDM0UsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQW1DLEVBQUUsRUFBRSxDQUM1RCxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhLENBQUMsT0FBZ0I7SUFDckMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBeUIsQ0FBQztJQUM3RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBQSxvQ0FBb0IsRUFBQyxHQUFHLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDN0UsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ25CLE1BQU0sT0FBTyxHQUFpQixNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQ3BFLENBQUMsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDM0IsUUFBUTtRQUNSLFlBQVksRUFBRSxVQUFVLENBQUMsUUFBUTtRQUNqQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7S0FDdEIsQ0FBQyxDQUNILENBQUM7SUFDRixPQUFPO1FBQ0wsT0FBTztRQUNQLE9BQU8sRUFBRTtZQUNQLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTztZQUNwQixhQUFhLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssSUFBSTtZQUNoRCxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87U0FDRTtLQUN6QixDQUFDO0FBQ0osQ0FBQztBQUVELFFBQVEsQ0FBQyx3QkFBd0IsRUFBRSxHQUFHLEVBQUU7SUFDdEMsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtRQUN4RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx3Q0FBc0IsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQzdFLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtRQUN6QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDOUQsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDNUQsdURBQXVELEVBQ3ZELENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDUCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx3Q0FBc0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN0RSxZQUFZLENBQ2IsQ0FBQztJQUNKLENBQUMsQ0FDRixDQUFDO0lBRUYsRUFBRSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUMvQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQztZQUNyQixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1NBQ2hDLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHFDQUFxQyxFQUFFLEdBQUcsRUFBRTtRQUM3QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSx3Q0FBc0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN6RSxnQkFBZ0IsQ0FDakIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQztZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1NBQ25DLENBQUMsQ0FDSCxDQUFDLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtRQUNoRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQztZQUNyQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7U0FDM0MsQ0FBQyxDQUNILENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtRQUNsQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDNUQsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQ3hFLG9FQUFvRSxFQUNwRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsd0NBQXNCLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUMsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDMUMsQ0FBQyxDQUNGLENBQUM7SUFFRixFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLHdDQUFzQixFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3hFLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQzVELHNDQUFzQyxFQUN0QyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsd0NBQXNCLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUNGLENBQUM7SUFFRixFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1FBQ3JELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLHdDQUFzQixFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEdBQUcsRUFBRTtRQUM1RSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDdkQsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsdUVBQXVFO1FBQ3ZFLHlFQUF5RTtRQUN6RSxtREFBbUQ7UUFDbkQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsd0NBQXNCLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQzVELENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUNoRCxvQ0FBb0MsRUFDcEMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNSLG1FQUFtRTtRQUNuRSxvRUFBb0U7UUFDcEUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsd0NBQXNCLEVBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUNGLENBQUM7SUFFRixFQUFFLENBQUMsK0JBQStCLEVBQUUsR0FBRyxFQUFFO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLHdDQUFzQixFQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUM3RCxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLElBQUksQ0FBQztRQUNOLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztRQUNoQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDZixDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUM7UUFDdkIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDO0tBQ25CLENBQUMsQ0FDQSxvRUFBb0UsRUFDcEUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDZCxtRUFBbUU7UUFDbkUsd0VBQXdFO1FBQ3hFLGlCQUFpQjtRQUNqQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLDRDQUE0QyxDQUFDLENBQUM7SUFDMUUsQ0FBQyxDQUNGLENBQUM7SUFFRixFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLHdDQUFzQixFQUFDO1lBQ3JCO2dCQUNFLElBQUksRUFBRSxHQUFHO2dCQUNULE1BQU0sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2FBQ2xDO1NBQ0YsQ0FBQyxDQUNILENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7UUFDMUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUN2QyxDQUFDO1FBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN2QixDQUFDLHdDQUFzQixDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDO1lBQzNDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7UUFDL0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQ3JDLE1BQU0sQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsQ0FDMUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLENBQUMsUUFBUSxDQUFDLHdDQUFzQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdURBQXVELEVBQUUsR0FBRyxFQUFFO1FBQy9ELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FDckIsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsY0FBYyxFQUFFLHVCQUF1QixFQUFFLFdBQVcsQ0FBQyxDQUM3RCxDQUFDO1FBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMkVBQTJFLEVBQUUsR0FBRyxFQUFFO1FBQ25GLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsd0NBQXdDO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLEVBQzVDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FDdkIsQ0FDRixDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtRQUN0RCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCO1lBQ0UsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1NBQ2pELEVBQ0QsTUFBTSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxDQUMzQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCxnRUFBZ0U7UUFDaEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQjtZQUNFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7U0FDcEMsRUFDRCxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUN6QixDQUFDO1FBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxHQUFHLEVBQUU7UUFDakYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNqRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQ2pCLENBQ0YsQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQztJQUN0RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1RUFBdUUsRUFBRSxHQUFHLEVBQUU7UUFDL0UsNEVBQTRFO1FBQzVFLDhFQUE4RTtRQUM5RSwyRUFBMkU7UUFDM0UsMkVBQTJFO1FBQzNFLGlFQUFpRTtRQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCO1lBQ0UsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1NBQ2pELEVBQ0QsTUFBTSxDQUFDLG1CQUFtQixFQUFFLHNCQUFzQixDQUFDLENBQ3BELENBQUM7UUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMvQixtQkFBbUI7WUFDbkIsc0JBQXNCO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtRQUNoRixzRUFBc0U7UUFDdEUsOEVBQThFO1FBQzlFLHlFQUF5RTtRQUN6RSxNQUFNLE9BQU8sR0FBaUI7WUFDNUIscUNBQXFDO1lBQ3JDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFO1lBQ25ELHdDQUF3QztZQUN4QyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFO1NBQzdELENBQUM7UUFDRixNQUFNLE1BQU0sR0FBd0I7WUFDbEMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3BDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1NBQ2pELENBQUM7UUFDRix1RUFBdUU7UUFDdkUsNEVBQTRFO1FBQzVFLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsVUFBVTtRQUNWLE1BQU0sT0FBTyxHQUNYLDhEQUE4RCxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUMzQyxpREFBaUQsQ0FDbEQsQ0FBQztRQUNGLHlFQUF5RTtRQUN6RSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQ2xCO1lBQ0UsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNULEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsRUFBRTtTQUNoRSxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0YsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNFQUFzRSxFQUFFLEdBQUcsRUFBRTtRQUM5RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDdEMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxFQUMzQyxPQUFPLENBQ1IsQ0FBQztRQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1FBQ3RFLDRFQUE0RTtRQUM1RSxzRUFBc0U7UUFDdEUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQ3hDO1lBQ0U7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLFlBQVksRUFBRSxtQkFBbUI7Z0JBQ2pDLElBQUksRUFBRSxNQUFNO2FBQ2I7WUFDRDtnQkFDRSxRQUFRLEVBQUUscUNBQXFDO2dCQUMvQyxZQUFZLEVBQUUsbUJBQW1CO2dCQUNqQyxJQUFJLEVBQUUsTUFBTTthQUNiO1lBQ0QsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtTQUM3RCxDQUNGLENBQUM7UUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUM1QixxQ0FBcUM7WUFDckMsY0FBYztTQUNmLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaUZBQWlGLEVBQUUsR0FBRyxFQUFFO1FBQ3pGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FDckIsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUN0QyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQ3RCLENBQUM7UUFDRixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2REFBNkQsRUFBRSxHQUFHLEVBQUU7UUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ3RDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDdkMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkQsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3Q0FBc0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLEVBQUU7SUFDcEQsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCx1RUFBdUU7UUFDdkUseUVBQXlFO1FBQ3pFLE1BQU0sQ0FDSixVQUFVLENBQ1I7WUFDRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDcEMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7U0FDakQsRUFDRCxNQUFNLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQ3hDLENBQ0YsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDckQsTUFBTSxDQUNKLFVBQVUsQ0FDUjtZQUNFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNsQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsMEJBQTBCLENBQUMsRUFBRTtTQUNwRCxFQUNELE1BQU0sQ0FBQyxVQUFVLEVBQUUsMkJBQTJCLENBQUMsQ0FDaEQsQ0FDRixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLHFFQUFxRTtRQUNyRSxzRUFBc0U7UUFDdEUsTUFBTSxDQUNKLFVBQVUsQ0FDUjtZQUNFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNoQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUU7U0FDaEMsRUFDRCxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUN6QixDQUNGLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO1FBQ2xGLDJEQUEyRDtRQUMzRCxNQUFNLENBQ0osVUFBVSxDQUNSO1lBQ0UsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtTQUN2QyxFQUNEO1lBQ0U7Z0JBQ0UsUUFBUSxFQUFFLGNBQWM7Z0JBQ3hCLFlBQVksRUFBRSxzQkFBc0I7Z0JBQ3BDLElBQUksRUFBRSxNQUFNO2FBQ2I7WUFDRCxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFO1NBQ3RFLENBQ0YsQ0FDRixDQUFDLE9BQU8sQ0FBQyxDQUFDLDBCQUEwQixFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO0lBQ3ZFLFFBQVEsQ0FBQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUU7UUFDMUMsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCwrREFBK0Q7WUFDL0QsZ0VBQWdFO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQWdCLEVBQUUsQ0FBQztnQkFDN0QsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUM5QztvQkFDRSxRQUFRLEVBQUUsZUFBZSxRQUFRLEdBQUcsUUFBUSxPQUFPO29CQUNuRCxZQUFZLEVBQUUsSUFBSTtvQkFDbEIsSUFBSSxFQUFFLE1BQU07aUJBQ2I7YUFDRixDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQjtnQkFDRSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3RDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTthQUN2QyxFQUNEO2dCQUNFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQztnQkFDL0MsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLENBQUM7YUFDMUQsQ0FDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQzVCLDBDQUEwQztnQkFDMUMsbUJBQW1CO2FBQ3BCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLEdBQUcsRUFBRTtZQUNyRSwwRUFBMEU7WUFDMUUsMkVBQTJFO1lBQzNFLG1DQUFtQztZQUNuQyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyx5QkFBUyxDQUFDLENBQUM7WUFDdEQsTUFBTSxNQUFNLEdBQUcsd0RBQXdELENBQUM7WUFDeEUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDaEMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ3hDLENBQUM7WUFDRixNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUEsc0NBQW9CLEVBQ25EO2dCQUNFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2FBQ2xDLEVBQ0QsV0FBVyxFQUNYLE9BQU8sQ0FDUixDQUFDO1lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2pELE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUM1QixlQUFlLE9BQU8sQ0FBQyxPQUFPLFdBQVc7Z0JBQ3pDLE1BQU07YUFDUCxDQUFDLENBQUM7WUFDSCxNQUFNLENBQ0osU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FDckUsQ0FBQyxPQUFPLENBQUM7Z0JBQ1I7b0JBQ0UsS0FBSyxFQUFFLEtBQUs7b0JBQ1osS0FBSyxFQUFFLE1BQU07b0JBQ2IsT0FBTyxFQUFFLGNBQWMsT0FBTyxDQUFDLE9BQU8sV0FBVztpQkFDbEQ7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLE1BQU07b0JBQ2IsS0FBSyxFQUFFLFVBQVU7b0JBQ2pCLE9BQU8sRUFBRSxjQUFjLE9BQU8sQ0FBQyxPQUFPLFNBQVM7aUJBQ2hEO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUU7UUFDbEQsRUFBRSxDQUFDLDREQUE0RCxFQUFFLEdBQUcsRUFBRTtZQUNwRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyw2QkFBYSxDQUFDLENBQUM7WUFDMUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFBLHNDQUFvQixFQUNuRCxNQUFNLEVBQ04sT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDO1lBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUNuRSx3RUFBd0U7WUFDeEUsd0RBQXdEO1lBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hCO29CQUNFLEtBQUssRUFBRSxRQUFRO29CQUNmLEtBQUssRUFBRSxrQkFBa0I7b0JBQ3pCLE9BQU8sRUFBRSxpQkFBaUI7aUJBQzNCO2dCQUNEO29CQUNFLEtBQUssRUFBRSxRQUFRO29CQUNmLEtBQUssRUFBRSxxQkFBcUI7b0JBQzVCLE9BQU8sRUFBRSxtQkFBbUI7aUJBQzdCO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUUsR0FBRyxFQUFFO1lBQ2hFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsYUFBYSxDQUFDLDZCQUFhLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSxzQ0FBb0IsRUFDbEIsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLEVBQ2xELE9BQU8sRUFDUCxPQUFPLENBQ1IsQ0FDRixDQUFDLE9BQU8sQ0FDUCxpS0FBaUssQ0FDbEssQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRCQUE0QixFQUFFLEdBQUcsRUFBRTtZQUNwQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDeEMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxFQUN6QyxPQUFPLENBQ1IsQ0FBQztZQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxJQUFBLGdDQUFjLEVBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNsRSxVQUFVO2dCQUNWLE9BQU87YUFDUixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxHQUFHLEVBQUU7WUFDcEUsdUVBQXVFO1lBQ3ZFLG9EQUFvRDtZQUNwRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDeEM7Z0JBQ0U7b0JBQ0UsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsWUFBWSxFQUFFLDJCQUEyQjtvQkFDekMsSUFBSSxFQUFFLE1BQU07aUJBQ2I7YUFDRixDQUNGLENBQUM7WUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHVDQUF1QyxFQUFFLEdBQUcsRUFBRTtRQUNyRCw0RUFBNEU7UUFDNUUsMkRBQTJEO1FBQzNELE1BQU0sVUFBVSxHQUFpQjtZQUMvQixXQUFXO1lBQ1gsZUFBZTtZQUNmLEtBQUs7WUFDTCxTQUFTO1lBQ1QsS0FBSztZQUNMLFNBQVM7U0FDVixDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuQixRQUFRO1lBQ1IsWUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxJQUFJLEVBQUUsVUFBVTtTQUNqQixDQUFDLENBQUMsQ0FBQztRQUVKLEVBQUUsQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7WUFDbkUseUVBQXlFO1lBQ3pFLDBCQUEwQjtZQUMxQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FDeEQsQ0FBQyxPQUFPLENBQ1AsMkpBQTJKLENBQzVKLENBQUM7WUFDRiw0RUFBNEU7WUFDNUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUMvRCxDQUFDLE9BQU8sQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1FQUFtRSxFQUFFLEdBQUcsRUFBRTtZQUMzRSxNQUFNLE1BQU0sR0FBaUI7Z0JBQzNCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFO2dCQUNqRCxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRTthQUNqRCxDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQ3ZFLG9DQUFvQyxDQUNyQyxDQUFDO1lBQ0YsTUFBTSxDQUNKLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDL0QsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRSxHQUFHLEVBQUU7WUFDbkUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQ3JDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFDbEIsRUFBRSxFQUNGLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUN4QixDQUFDO1lBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRFQUE0RSxFQUFFLEdBQUcsRUFBRTtZQUNwRix5RUFBeUU7WUFDekUsc0NBQXNDO1lBQ3RDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FDckI7Z0JBQ0UsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMvQixFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7YUFDbkMsRUFDRCxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsRUFDaEMsRUFBRSxFQUNGLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUN4QixDQUFDO1lBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpRUFBaUUsRUFBRSxHQUFHLEVBQUU7WUFDekUsMkVBQTJFO1lBQzNFLHdFQUF3RTtZQUN4RSxxREFBcUQ7WUFDckQsTUFBTSxDQUNKLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQ3JDO2dCQUNFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtnQkFDL0Q7b0JBQ0UsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFlBQVksRUFBRSxtQkFBbUI7b0JBQ2pDLElBQUksRUFBRSxVQUFVO2lCQUNqQjthQUNGLENBQ0YsQ0FBQyxHQUFHLENBQ04sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsRUFBRTtZQUMvRSxzREFBc0Q7WUFDdEQsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUNoRDtnQkFDRSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQy9EO29CQUNFLFFBQVEsRUFBRSxRQUFRO29CQUNsQixZQUFZLEVBQUUsbUJBQW1CO29CQUNqQyxJQUFJLEVBQUUsVUFBVTtpQkFDakI7Z0JBQ0Q7b0JBQ0UsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFlBQVksRUFBRSxpQkFBaUI7b0JBQy9CLElBQUksRUFBRSxNQUFNO2lCQUNiO2FBQ0YsQ0FDRixDQUNGLENBQUMsT0FBTyxDQUNQLHdJQUF3SSxDQUN6SSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7UUFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBaUIsRUFBRSxDQUFDO1lBQ25DLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUN6RTtnQkFDRSxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxZQUFZLEVBQUUsaUNBQWlDO2dCQUMvQyxJQUFJLEVBQUUsVUFBVTthQUNqQjtZQUNEO2dCQUNFLFFBQVEsRUFBRSwwQkFBMEI7Z0JBQ3BDLFlBQVksRUFBRSxpQ0FBaUM7Z0JBQy9DLElBQUksRUFBRSxVQUFVO2FBQ2pCO1lBQ0Q7Z0JBQ0UsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFlBQVksRUFBRSx3QkFBd0I7Z0JBQ3RDLElBQUksRUFBRSxVQUFVO2FBQ2pCO1NBQ0YsQ0FBQztRQUVGLEVBQUUsQ0FBQywwREFBMEQsRUFBRSxHQUFHLEVBQUU7WUFDbEUseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDeEM7Z0JBQ0UsR0FBRyxRQUFRLEVBQUU7Z0JBQ2IsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRTthQUN0RSxDQUNGLENBQUM7WUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3Q0FBc0IsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUNoRCxzQkFBc0IsQ0FDdkIsQ0FBQztZQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXNCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FDaEQsMEJBQTBCLENBQzNCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRSxHQUFHLEVBQUU7WUFDdEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQzNDLFFBQVEsRUFBRSxDQUNYLENBQUM7WUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsc0JBQXNCO2dCQUN0QiwwQkFBMEI7Z0JBQzFCLGFBQWE7YUFDZCxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrREFBK0QsRUFBRSxHQUFHLEVBQUU7WUFDdkUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQ3ZDO2dCQUNFLEdBQUcsUUFBUSxFQUFFO2dCQUNiLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQUU7YUFDOUQsQ0FDRixDQUNGLENBQUMsT0FBTyxDQUNQLDJHQUEyRyxDQUM1RyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQ04sQ0FBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUM7WUFDdkMsQ0FBQyxxQkFBcUIsRUFBRSxrQkFBa0IsQ0FBQztZQUMzQyxDQUFDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQztZQUNqQyxDQUFDLG9CQUFvQixFQUFFLFFBQVEsQ0FBQztZQUNoQyxDQUFDLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztZQUM3QixDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUM7U0FDM0IsQ0FBQyxDQUFDLDRDQUE0QyxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ2xFLE1BQU0sQ0FBQyxJQUFBLGtDQUFnQixFQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFO1FBQ3hDLEVBQUUsQ0FBQyx5RUFBeUUsRUFBRSxHQUFHLEVBQUU7WUFDakYsMkVBQTJFO1lBQzNFLGlFQUFpRTtZQUNqRSw0REFBNEQ7WUFDNUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxhQUFhLENBQUMsNkJBQWEsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLHNDQUFvQixFQUNsQixDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsRUFDakQsT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUNGLENBQUMsT0FBTyxDQUNQLHlQQUF5UCxDQUMxUCxDQUFDO1lBQ0Ysa0NBQWtDO1lBQ2xDLE1BQU0sQ0FDSixJQUFBLHNDQUFvQixFQUNsQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsRUFDOUMsT0FBTyxFQUNQLE9BQU8sQ0FDUixDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ2hCLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOERBQThELEVBQUUsR0FBRyxFQUFFO1lBQ3RFLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQzdELGFBQWEsRUFBRTtvQkFDYjt3QkFDRSxXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxXQUFXLEVBQUUsY0FBYztxQkFDNUI7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQ3hDLE1BQU0sQ0FBQyxjQUFjLENBQUMsRUFDdEIsRUFBRSxFQUNGO2dCQUNFLE9BQU87YUFDUixDQUNGLENBQ0YsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLEVBQUU7WUFDNUUsNkRBQTZEO1lBQzdELCtEQUErRDtZQUMvRCxNQUFNLE9BQU8sR0FBRztnQkFDZCxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUMzRCxhQUFhLEVBQUU7b0JBQ2I7d0JBQ0UsV0FBVyxFQUFFLHNDQUFzQzt3QkFDbkQsV0FBVyxFQUFFLCtCQUErQjtxQkFDN0M7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQ3BDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQ2xDLEVBQUUsRUFDRixFQUFFLE9BQU8sRUFBRSxDQUNaLENBQ0YsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxHQUFHLEVBQUU7WUFDdEUsd0VBQXdFO1lBQ3hFLDhEQUE4RDtZQUM5RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUMzRCxhQUFhLEVBQUU7b0JBQ2I7d0JBQ0UsV0FBVyxFQUFFLHNDQUFzQzt3QkFDbkQsV0FBVyxFQUFFLCtCQUErQjtxQkFDN0M7b0JBQ0Q7d0JBQ0UsV0FBVyxFQUFFLGlDQUFpQzt3QkFDOUMsV0FBVyxFQUFFLCtCQUErQjtxQkFDN0M7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQ3BDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLEVBQ2xDLEVBQUUsRUFDRixFQUFFLE9BQU8sRUFBRSxDQUNaLENBQ0YsQ0FBQyxPQUFPLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxtRkFBbUYsRUFBRSxHQUFHLEVBQUU7WUFDM0YsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QscUVBQXFFO2dCQUNyRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUM1RCwyQkFBMkI7Z0JBQzNCLFdBQVcsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDbEUsQ0FBQztZQUNGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUM3QixFQUFFLEVBQ0YsRUFBRSxPQUFPLEVBQUUsQ0FDWixDQUNGLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhDQUE4QyxFQUFFLEdBQUcsRUFBRTtZQUN0RCxNQUFNLE9BQU8sR0FBRztnQkFDZCxXQUFXLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxDQUFDO2FBQ3BFLENBQUM7WUFDRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsTUFBTSxDQUNKLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFBRSxDQUFDLEVBQ3JELE1BQU0sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQ25DLEVBQUUsRUFDRixFQUFFLE9BQU8sRUFBRSxDQUNaLENBQ0YsQ0FBQyxPQUFPLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLEdBQUcsRUFBRTtRQUMvQyxFQUFFLENBQUMsbUVBQW1FLEVBQUUsR0FBRyxFQUFFO1lBQzNFLHNFQUFzRTtZQUN0RSx1RUFBdUU7WUFDdkUsdUVBQXVFO1lBQ3ZFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FDMUMsQ0FDRixDQUFDLE9BQU8sQ0FDUCxxTEFBcUwsQ0FDdEwsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEdBQUcsRUFBRTtZQUNyQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsTUFBTSxDQUNKLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDeEMsTUFBTSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxFQUN2RCxPQUFPLENBQ1IsQ0FDRixDQUFDLE9BQU8sQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHdFQUF3RSxFQUFFLEdBQUcsRUFBRTtZQUNoRix1RUFBdUU7WUFDdkUsc0VBQXNFO1lBQ3RFLGtCQUFrQjtZQUNsQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQ3JCLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQzdELENBQUM7WUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLHdDQUFzQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN0RSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsR0FBRyxFQUFFO1lBQ2xGLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FDckIsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FDdkMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0NBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZFQUE2RSxFQUFFLEdBQUcsRUFBRTtZQUNyRix3RUFBd0U7WUFDeEUsa0JBQWtCO1lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxjQUFjLENBQUMsRUFDdEMsRUFBRSxFQUNGLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUN4QixDQUNGLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseUVBQXlFLEVBQUUsR0FBRyxFQUFFO1lBQ2pGLG1FQUFtRTtZQUNuRSxpRUFBaUU7WUFDakUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSixDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQ3hDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQ2hELENBQ0YsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEIsaUVBQWlFO1lBQ2pFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUMzQyxDQUNGLENBQUMsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscUVBQXFFLEVBQUUsR0FBRyxFQUFFO1lBQzdFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUN4QyxNQUFNLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUN2QyxDQUNGLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDNUMsK0RBQStEO1lBQy9ELE1BQU0sQ0FDSixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUN2QyxNQUFNLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUNqQyxDQUFDLEtBQUssQ0FDUixDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0RBQStELEVBQUUsR0FBRyxFQUFFO1lBQ3ZFLGtFQUFrRTtZQUNsRSxnRUFBZ0U7WUFDaEUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLE1BQU0sQ0FDSjtnQkFDRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ3BDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2FBQ2pELEVBQ0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLG1CQUFtQixDQUFDLENBQzlDLENBQ0YsQ0FBQyxPQUFPLENBQ1AsMkhBQTJILENBQzVILENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFnQixFQUFFLElBQVksRUFBZ0IsRUFBRSxDQUFDO2dCQUM3RCxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQzlDO29CQUNFLFFBQVEsRUFBRSxlQUFlLFFBQVEsR0FBRyxRQUFRLE9BQU87b0JBQ25ELFlBQVksRUFBRSxJQUFJO29CQUNsQixJQUFJLEVBQUUsTUFBTTtpQkFDYjthQUNGLENBQUM7WUFDRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsTUFBTSxDQUNKLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFDeEM7Z0JBQ0UsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDO2dCQUMzQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUM7YUFDaEQsQ0FDRixDQUNGLENBQUMsT0FBTyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFO1FBQzFCLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUNyQixDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQ3JDO2dCQUNFLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2hFO29CQUNFLFFBQVEsRUFBRSxZQUFZO29CQUN0QixZQUFZLEVBQUUsYUFBYTtvQkFDM0IsSUFBSSxFQUFFLFVBQVU7aUJBQ2pCO2dCQUNEO29CQUNFLFFBQVEsRUFBRSxRQUFRO29CQUNsQixZQUFZLEVBQUUsbUJBQW1CO29CQUNqQyxJQUFJLEVBQUUsVUFBVTtpQkFDakI7YUFDRixDQUNGLENBQUM7WUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixNQUFNLENBQ0osQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUNyQyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsZUFBZSxRQUFRLGFBQWEsQ0FBQyxDQUFDLEdBQUcsQ0FDdkQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2IsUUFBUTtnQkFDUixZQUFZLEVBQUUsZ0JBQWdCO2dCQUM5QixJQUFJLEVBQUUsTUFBTTthQUNiLENBQUMsQ0FDSCxDQUNGLENBQ0YsQ0FBQyxPQUFPLENBQUMsMERBQTBELENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLEVBQUUsQ0FBQyw0RUFBNEUsRUFBRSxHQUFHLEVBQUU7UUFDcEYsTUFBTSxDQUNKLElBQUEsZ0NBQWMsRUFDWixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFDeEIsQ0FBQyxjQUFjLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQ25ELEVBQUUsQ0FDSCxDQUNGLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1FBQzdELE1BQU0sQ0FDSixJQUFBLGdDQUFjLEVBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUNqRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRSxHQUFHLEVBQUU7UUFDaEYsTUFBTSxDQUFDLElBQUEsaUNBQWUsRUFBQyxVQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNwRSxTQUFTO1NBQ1YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsaURBQWlELEVBQUUsR0FBRyxFQUFFO1FBQ3pELE1BQU0sQ0FDSixJQUFBLGlDQUFlLEVBQUMsaUJBQWlCLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDN0QsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtGQUFrRixFQUFFLEdBQUcsRUFBRTtRQUMxRiw0RUFBNEU7UUFDNUUsZ0VBQWdFO1FBQ2hFLE1BQU0sT0FBTyxHQUFHLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDM0QsTUFBTSxDQUFDLElBQUEsaUNBQWUsRUFBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbkQsUUFBUTtZQUNSLDBCQUEwQjtTQUMzQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBQSxpQ0FBZSxFQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNuRCxTQUFTO1lBQ1QsZ0NBQWdDO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtRQUN6RCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSxpQ0FBZSxFQUFDLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN4RSxvQkFBb0IsQ0FDckIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtRQUN2RCx5Q0FBeUM7UUFDekMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsaUNBQWUsRUFBQyxVQUFVLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUN4RSxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQ3pELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNEQUFzRCxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3BFLDJFQUEyRTtRQUMzRSwyRUFBMkU7UUFDM0UsNEVBQTRFO1FBQzVFLG9DQUFvQztRQUNwQyxNQUFNLENBQUMsSUFBQSxpQ0FBZSxFQUFDLFVBQVUsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3BFLFNBQVM7U0FDVixDQUFDLENBQUM7UUFDSCxNQUFNLENBQ0osSUFBQSxpQ0FBZSxFQUFDLFVBQVUsRUFBRTtZQUMxQixhQUFhLEVBQUUsS0FBSztZQUNwQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRSxHQUFHLEVBQUU7UUFDMUUsTUFBTSxDQUNKLElBQUEsaUNBQWUsRUFBQyxpQkFBaUIsRUFBRTtZQUNqQyxhQUFhLEVBQUUsS0FBSztZQUNwQixhQUFhLEVBQUUsSUFBSTtTQUNwQixDQUFDLENBQ0gsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLEVBQUUsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLEVBQUU7UUFDdEMsTUFBTSxDQUFDLElBQUEsd0NBQXNCLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM1RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBnZXROYW1lZFJvdXRlUmVnZXggfSBmcm9tIFwibmV4dC9kaXN0L3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL3JvdXRlLXJlZ2V4XCI7XG5pbXBvcnQge1xuICBnZXRTb3J0ZWRSb3V0ZU9iamVjdHMsXG4gIGdldFNvcnRlZFJvdXRlcyxcbn0gZnJvbSBcIm5leHQvZGlzdC9zaGFyZWQvbGliL3JvdXRlci91dGlscy9zb3J0ZWQtcm91dGVzXCI7XG5pbXBvcnQgYXBwUGxheWdyb3VuZCBmcm9tIFwiLi9fX2ZpeHR1cmVzX18vYXBwLXBsYXlncm91bmQuanNvblwiO1xuaW1wb3J0IHBhZ2VzSTE4biBmcm9tIFwiLi9fX2ZpeHR1cmVzX18vcGFnZXMtaTE4bi5qc29uXCI7XG5pbXBvcnQgeyBCdWlsZENvbXBsZXRlQ29udGV4dCwgYnVpbGRBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9idWlsZC1vdXRwdXRzXCI7XG5pbXBvcnQge1xuICBBc3NpZ25Sb3V0ZXNPcHRpb25zLFxuICBERUZBVUxUX0ZVTkNUSU9OX0dST1VQLFxuICBGdW5jdGlvbkdyb3VwU3BlYyxcbiAgUm91dGVFbnRyeSxcbiAgUm91dGluZ1J1bGVzLFxuICBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyxcbiAgaW50ZXJjZXB0ZWRSb3V0ZSxcbiAgcGFyc2VGdW5jdGlvbkdyb3Vwc0VudixcbiAgcGF0aFBhdHRlcm5zRm9yLFxuICByb3V0ZWRQYXR0ZXJucyxcbiAgdmFsaWRhdGVGdW5jdGlvbkdyb3Vwcyxcbn0gZnJvbSBcIi4vZnVuY3Rpb24tZ3JvdXBzXCI7XG5cbi8qKiBPbmUgZW50cnlwb2ludCBwZXIgdGVtcGxhdGUgdW5sZXNzIGEgdGVzdCBzYXlzIG90aGVyd2lzZS4gKi9cbmNvbnN0IHJvdXRlcyA9ICguLi50ZW1wbGF0ZXM6IHN0cmluZ1tdKTogUm91dGVFbnRyeVtdID0+XG4gIHRlbXBsYXRlcy5tYXAoKHRlbXBsYXRlKSA9PiAoeyB0ZW1wbGF0ZSwgZW50cnlwb2ludElkOiB0ZW1wbGF0ZSB9KSk7XG5cbmNvbnN0IEJVSUxEX0lEID0gXCJhYmMxMjNcIjtcblxuLyoqXG4gKiBgY3R4LnJvdXRpbmcuZHluYW1pY1JvdXRlc2AgYXMgYG5leHQgYnVpbGRgIGRlcml2ZXMgaXQgZnJvbSBgZW50cmllc2A6IE5leHQnc1xuICogb3duIHJvdXRlIHNvcnQgYW5kIHJlZ2V4ZXMsIGRhdGEgVVJMcyBpbmNsdWRlZC5cbiAqL1xuZnVuY3Rpb24gbmV4dFJvdXRpbmcoZW50cmllczogUm91dGVFbnRyeVtdLCBiYXNlUGF0aDogc3RyaW5nKTogUm91dGluZ1J1bGVzIHtcbiAgY29uc3QgZGF0YVByZWZpeCA9IGAke2Jhc2VQYXRofS9fbmV4dC9kYXRhLyR7QlVJTERfSUR9L2A7XG4gIGNvbnN0IGR5bmFtaWMgPSBbLi4ubmV3IFNldChlbnRyaWVzLm1hcCgoZW50cnkpID0+IGVudHJ5LnRlbXBsYXRlKSldLmZpbHRlcihcbiAgICAodGVtcGxhdGUpID0+XG4gICAgICB0ZW1wbGF0ZS5pbmNsdWRlcyhcIltcIikgJiZcbiAgICAgICF0ZW1wbGF0ZS5lbmRzV2l0aChcIi5yc2NcIikgJiZcbiAgICAgICEvXFwoXFwuezEsM31cXCkvLnRlc3QodGVtcGxhdGUpLFxuICApO1xuICBjb25zdCByb3V0ZSA9ICh0ZW1wbGF0ZTogc3RyaW5nKSA9PiAoe1xuICAgIHNvdXJjZVJlZ2V4OiBnZXROYW1lZFJvdXRlUmVnZXgodGVtcGxhdGUsIHtcbiAgICAgIHByZWZpeFJvdXRlS2V5czogdHJ1ZSxcbiAgICAgIGluY2x1ZGVTdWZmaXg6IHRydWUsXG4gICAgfSkubmFtZWRSZWdleCxcbiAgICBkZXN0aW5hdGlvbjogdGVtcGxhdGUsXG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGR5bmFtaWNSb3V0ZXM6IFtcbiAgICAgIC8vIFNvcnRlZCBieSB0aGUgcGFnZSB0aGV5IG5hbWU6IE5leHQncyBzb3J0IHJlYWRzIGBbc2x1Z10uanNvbmAgYXMgc3RhdGljLlxuICAgICAgLi4uZ2V0U29ydGVkUm91dGVPYmplY3RzKFxuICAgICAgICBkeW5hbWljLmZpbHRlcigodGVtcGxhdGUpID0+IHRlbXBsYXRlLnN0YXJ0c1dpdGgoZGF0YVByZWZpeCkpLFxuICAgICAgICAodGVtcGxhdGUpID0+IGAvJHt0ZW1wbGF0ZS5zbGljZShkYXRhUHJlZml4Lmxlbmd0aCwgLVwiLmpzb25cIi5sZW5ndGgpfWAsXG4gICAgICApLm1hcChyb3V0ZSksXG4gICAgICAuLi5nZXRTb3J0ZWRSb3V0ZXMoXG4gICAgICAgIGR5bmFtaWMuZmlsdGVyKCh0ZW1wbGF0ZSkgPT4gIXRlbXBsYXRlLnN0YXJ0c1dpdGgoZGF0YVByZWZpeCkpLFxuICAgICAgKS5tYXAocm91dGUpLFxuICAgIF0sXG4gIH07XG59XG5cbmNvbnN0IGFzc2lnbm1lbnQgPSAoXG4gIGdyb3VwczogRnVuY3Rpb25Hcm91cFNwZWNbXSxcbiAgZW50cmllczogUm91dGVFbnRyeVtdLFxuICBiYXNlUGF0aCA9IFwiXCIsXG4gIG9wdGlvbnM6IFBhcnRpYWw8QXNzaWduUm91dGVzT3B0aW9ucz4gPSB7fSxcbikgPT5cbiAgYXNzaWduUm91dGVzVG9Hcm91cHMoZ3JvdXBzLCBlbnRyaWVzLCB7XG4gICAgYmFzZVBhdGgsXG4gICAgYnVpbGRJZDogQlVJTERfSUQsXG4gICAgLi4ub3B0aW9ucyxcbiAgICByb3V0aW5nOiB7IC4uLm5leHRSb3V0aW5nKGVudHJpZXMsIGJhc2VQYXRoKSwgLi4ub3B0aW9ucy5yb3V0aW5nIH0sXG4gIH0pO1xuXG5jb25zdCBhc3NpZ24gPSAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgYXNzaWdubWVudD4pID0+XG4gIGFzc2lnbm1lbnQoLi4uYXJncykudGVtcGxhdGVzO1xuXG4vKiogVGhlIHBhdGggcGF0dGVybnMgb2YgdGhlIGJlaGF2aW9ycyB0aGUgYXNzaWdubWVudCByZXR1cm5zLCBpbiBvcmRlci4gKi9cbmNvbnN0IHBhdHRlcm5zT2YgPSAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgYXNzaWdubWVudD4pID0+XG4gIGFzc2lnbm1lbnQoLi4uYXJncykuYmVoYXZpb3JzLm1hcCgoeyBwYXR0ZXJuIH0pID0+IHBhdHRlcm4pO1xuXG4vKipcbiAqIEEgY2FwdHVyZWQgYG9uQnVpbGRDb21wbGV0ZWAgZml4dHVyZSdzIHJvdXRlcywgZXhhY3RseSBhcyBgYnVpbGRBZGFwdGVyTWFuaWZlc3RgXG4gKiBoYW5kcyB0aGVtIHRvIHRoZSBhc3NpZ25tZW50LCBwbHVzIHRoZSByZXN0IG9mIHdoYXQgaXQgcGFzc2VzLlxuICovXG5mdW5jdGlvbiBmaXh0dXJlUm91dGVzKGZpeHR1cmU6IHVua25vd24pIHtcbiAgY29uc3QgY3R4ID0gc3RydWN0dXJlZENsb25lKGZpeHR1cmUpIGFzIEJ1aWxkQ29tcGxldGVDb250ZXh0O1xuICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgY29uc3QgeyBtYW5pZmVzdCB9ID0gYnVpbGRBZGFwdGVyTWFuaWZlc3QoY3R4LCB7IGJ1aWxkQ3dkOiBjdHgucHJvamVjdERpciB9KTtcbiAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICBjb25zdCBlbnRyaWVzOiBSb3V0ZUVudHJ5W10gPSBPYmplY3QuZW50cmllcyhtYW5pZmVzdC5lbnRyeXBvaW50cykubWFwKFxuICAgIChbdGVtcGxhdGUsIGVudHJ5cG9pbnRdKSA9PiAoe1xuICAgICAgdGVtcGxhdGUsXG4gICAgICBlbnRyeXBvaW50SWQ6IGVudHJ5cG9pbnQuZmlsZVBhdGgsXG4gICAgICB0eXBlOiBlbnRyeXBvaW50LnR5cGUsXG4gICAgfSksXG4gICk7XG4gIHJldHVybiB7XG4gICAgZW50cmllcyxcbiAgICBvcHRpb25zOiB7XG4gICAgICBiYXNlUGF0aDogY3R4LmNvbmZpZy5iYXNlUGF0aCB8fCBcIlwiLFxuICAgICAgYnVpbGRJZDogY3R4LmJ1aWxkSWQsXG4gICAgICB0cmFpbGluZ1NsYXNoOiBjdHguY29uZmlnLnRyYWlsaW5nU2xhc2ggPT09IHRydWUsXG4gICAgICByb3V0aW5nOiBjdHgucm91dGluZyxcbiAgICB9IGFzIEFzc2lnblJvdXRlc09wdGlvbnMsXG4gIH07XG59XG5cbmRlc2NyaWJlKFwidmFsaWRhdGVGdW5jdGlvbkdyb3Vwc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVqZWN0cyBhbiBlbXB0eSBhcnJheSByYXRoZXIgdGhhbiB0cmVhdGluZyBpdCBhcyBubyBzcGxpdHRpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PiB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFtdKSkudG9UaHJvdygvT21pdCB0aGUgcHJvcCBlbnRpcmVseS8pO1xuICB9KTtcblxuICBpdChcInJlc2VydmVzIHRoZSBkZWZhdWx0IGdyb3VwIG5hbWVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lOiBcImRlZmF1bHRcIiwgcm91dGVzOiBbXCIvYVwiXSB9XSksXG4gICAgKS50b1Rocm93KC9yZXNlcnZlZCBncm91cCBuYW1lLyk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1tcImhhcyBzcGFjZVwiXSwgW1widW5kZXJfc2NvcmVcIl0sIFtcImRvdHMuaGVyZVwiXSwgW1wiXCJdXSkoXG4gICAgXCJyZWplY3RzIGdyb3VwIG5hbWUgJXAsIHdoaWNoIGhhcyB0byBiZSBhIGNvbnN0cnVjdCBpZFwiLFxuICAgIChuYW1lKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lLCByb3V0ZXM6IFtcIi9hXCJdIH1dKSkudG9UaHJvdyhcbiAgICAgICAgL211c3QgbWF0Y2gvLFxuICAgICAgKTtcbiAgICB9LFxuICApO1xuXG4gIGl0KFwicmVqZWN0cyB0d28gZ3JvdXBzIHdpdGggdGhlIHNhbWUgbmFtZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFtcbiAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hXCJdIH0sXG4gICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYlwiXSB9LFxuICAgICAgXSksXG4gICAgKS50b1Rocm93KC9ib3RoIG5hbWVkIFwiYXBpXCIvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgZ3JvdXAgdGhhdCBvd25zIG5vIHJvdXRlc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+IHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXSB9XSkpLnRvVGhyb3coXG4gICAgICAvb3ducyBubyByb3V0ZXMvLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmVqZWN0cyB0aGUgc2FtZSBwYXR0ZXJuIGluIHR3byBncm91cHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbXG4gICAgICAgIHsgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgICB7IG5hbWU6IFwiYlwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfSxcbiAgICAgIF0pLFxuICAgICkudG9UaHJvdygvYXBwZWFycyBpbiBib3RoIGdyb3VwIFwiYVwiIGFuZCBncm91cCBcImJcIi8pO1xuICB9KTtcblxuICBpdChcImFsbG93cyBvdmVybGFwcGluZy1idXQtZGlmZmVyZW50IHBhdHRlcm5zLCB3aGljaCByZXNvbHZlIGxvbmdlc3QtZmlyc3RcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbXG4gICAgICAgIHsgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgICB7IG5hbWU6IFwiYlwiLCByb3V0ZXM6IFtcIi9hcGkvcmVwb3J0cy8qKlwiXSB9LFxuICAgICAgXSksXG4gICAgKS5ub3QudG9UaHJvdygpO1xuICB9KTtcblxuICBpdChcInJlcXVpcmVzIGEgbGVhZGluZyBzbGFzaFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtcImFwaS8qKlwiXSB9XSksXG4gICAgKS50b1Rocm93KC9tdXN0IHN0YXJ0IHdpdGggXCJcXC9cIi8pO1xuICB9KTtcblxuICBpdC5lYWNoKFtbXCIvZGFzaGJvYXJkL1tpZF1cIl0sIFtcIi9ibG9nL1suLi5zbHVnXVwiXSwgW1wiL3Nob3AvW1suLi5zbHVnXV1cIl1dKShcbiAgICBcInJlamVjdHMgdGhlIGR5bmFtaWMgc2VnbWVudCBpbiAlcCwgd2hpY2ggQ2xvdWRGcm9udCBjYW5ub3QgZXhwcmVzc1wiLFxuICAgIChyb3V0ZSkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW3JvdXRlXSB9XSksXG4gICAgICApLnRvVGhyb3coL2NvbnRhaW5zIGEgZHluYW1pYyBzZWdtZW50Lyk7XG4gICAgfSxcbiAgKTtcblxuICBpdChcInJlamVjdHMgYSByb3V0ZSBncm91cCBzZWdtZW50LCB3aGljaCBuZXZlciBhcHBlYXJzIGluIGEgVVJMXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiLyhtYXJrZXRpbmcpL2Fib3V0XCJdIH1dKSxcbiAgICApLnRvVGhyb3coL3JvdXRlIGdyb3VwIHNlZ21lbnQvKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbW1wiL2FwaS8qXCJdLCBbXCIvYXBpLyoqL3hcIl0sIFtcIi9hcGkvcmVwbz90c1wiXSwgW1wiLypcIl1dKShcbiAgICBcInJlamVjdHMgdGhlIHdpbGRjYXJkIHBsYWNlbWVudCBpbiAlcFwiLFxuICAgIChyb3V0ZSkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW3JvdXRlXSB9XSksXG4gICAgICApLnRvVGhyb3coL3dpbGRjYXJkIHNvbWV3aGVyZSBvdGhlciB0aGFuIGEgdHJhaWxpbmcvKTtcbiAgICB9LFxuICApO1xuXG4gIGl0KFwicmVqZWN0cyBhIHBhdHRlcm4gdGhhdCB3b3VsZCBvd24gZXZlcnl0aGluZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtcIi8qKlwiXSB9XSksXG4gICAgKS50b1Rocm93KC93b3VsZCBvd24gZXZlcnkgcm91dGUvKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIHRoZSByb290LCB3aGljaCBubyBDbG91ZEZyb250IHBhdGggcGF0dGVybiBjYW4gbWF0Y2ggYWxvbmVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lOiBcImFcIiwgcm91dGVzOiBbXCIvXCJdIH1dKSxcbiAgICApLnRvVGhyb3coL2Nhbm5vdCBiZSByb3V0ZWQvKTtcbiAgfSk7XG5cbiAgaXQoXCJhY2NlcHRzIC9pbmRleCwgd2hpY2ggaXMgYSByZWFsIEFwcCBSb3V0ZXIgcm91dGVcIiwgKCkgPT4ge1xuICAgIC8vIGBhcHAvaW5kZXgvcGFnZS50c3hgIGlzIHNlcnZlZCBhdCBgL2luZGV4YCwgYXBhcnQgZnJvbSBgL2AuIE9ubHkgdGhlXG4gICAgLy8gYXNzaWdubWVudCBrbm93cyB3aGljaCByb3V0ZXIgYC9pbmRleGAgY2FtZSBmcm9tOyBpdCByZWplY3RzIHRoZSBQYWdlc1xuICAgIC8vIFJvdXRlciBob21lIHBhZ2UsIHdoaWNoIGlzIHRoZSBzYW1lIGZpbGUgYXMgYC9gLlxuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgdmFsaWRhdGVGdW5jdGlvbkdyb3VwcyhbeyBuYW1lOiBcImFcIiwgcm91dGVzOiBbXCIvaW5kZXhcIl0gfV0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQuZWFjaChbXCIvX25leHRcIiwgXCIvX25leHQvKipcIiwgXCIvX25leHQvZGF0YS8qKlwiXSkoXG4gICAgXCJyZWplY3RzICVzLCB3aGljaCBOZXh0LmpzIHJlc2VydmVzXCIsXG4gICAgKHJvdXRlKSA9PiB7XG4gICAgICAvLyBBIGRhdGEgcm91dGUgZm9sbG93cyBpdHMgcGFnZSBpbnRvIHRoZSBwYWdlJ3MgZ3JvdXA7IGEgYF9uZXh0LypgXG4gICAgICAvLyBiZWhhdmlvciB3b3VsZCBjb21wZXRlIHdpdGggdGhlIHN0YXRpYy1hc3NldCBhbmQgaW1hZ2UgYmVoYXZpb3JzLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW3sgbmFtZTogXCJhXCIsIHJvdXRlczogW3JvdXRlXSB9XSksXG4gICAgICApLnRvVGhyb3coL3VuZGVyIFwiXFwvX25leHRcIi8pO1xuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJyZWplY3RzIGFuIGVtcHR5IHBhdGggc2VnbWVudFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtcIi9hcGkvL3hcIl0gfV0pLFxuICAgICkudG9UaHJvdygvZW1wdHkgcGF0aCBzZWdtZW50Lyk7XG4gIH0pO1xuXG4gIGl0LmVhY2goW1xuICAgIFtcIi/DvGJlclwiLCAnXCLDvFwiJ10sXG4gICAgW1wiL2EgYlwiLCAnXCIgXCInXSxcbiAgICBbXCIvc2hvcC9hLGIvKipcIiwgJ1wiLFwiJ10sXG4gICAgW1wiLzEwMCUyNVwiLCAnXCIlXCInXSxcbiAgXSkoXG4gICAgXCJyZWplY3RzICVwLCB3aGljaCBob2xkcyBhIGNoYXJhY3RlciBubyBDbG91ZEZyb250IHBhdGggcGF0dGVybiBjYW5cIixcbiAgICAocm91dGUsIGNoYXIpID0+IHtcbiAgICAgIC8vIGBwYXRoUGF0dGVybnNGb3JgIGNvcGllcyB0aGUgcm91dGUgdmVyYmF0aW0gaW50byBhIGJlaGF2aW9yIHBhdGhcbiAgICAgIC8vIHBhdHRlcm4sIHNvIHdpdGhvdXQgdGhpcyBpdCBmYWlsZWQgYXQgZGVwbG95IG5hbWluZyBuZWl0aGVyIHRoZSBncm91cFxuICAgICAgLy8gbm9yIHRoZSByb3V0ZS5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uR3JvdXBzKFt7IG5hbWU6IFwiYVwiLCByb3V0ZXM6IFtyb3V0ZV0gfV0pLFxuICAgICAgKS50b1Rocm93KGBjb250YWlucyAke2NoYXJ9LCB3aGljaCBhIENsb3VkRnJvbnQgYmVoYXZpb3IgcGF0aCBwYXR0ZXJuYCk7XG4gICAgfSxcbiAgKTtcblxuICBpdChcImFjY2VwdHMgZXZlcnkgbGl0ZXJhbCBpbiBDbG91ZEZyb250J3MgcGF0aCBwYXR0ZXJuIGFscGhhYmV0XCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Hcm91cHMoW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJhXCIsXG4gICAgICAgICAgcm91dGVzOiBbYC9BWmF6MDlfLS4kflwiJ0A6KyYvKipgXSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICkubm90LnRvVGhyb3coKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJhc3NpZ25Sb3V0ZXNUb0dyb3Vwc1wiLCAoKSA9PiB7XG4gIGl0KFwicHV0cyB1bmFzc2lnbmVkIHJvdXRlcyBpbiB0aGUgZGVmYXVsdCBncm91cCwgd2hpY2ggYWx3YXlzIGV4aXN0c1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfV0sXG4gICAgICByb3V0ZXMoXCIvXCIsIFwiL3ByaWNpbmdcIiwgXCIvYXBpL2hlYWx0aFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZCkudG9FcXVhbCh7XG4gICAgICBbREVGQVVMVF9GVU5DVElPTl9HUk9VUF06IFtcIi9cIiwgXCIvcHJpY2luZ1wiXSxcbiAgICAgIGFwaTogW1wiL2FwaS9oZWFsdGhcIl0sXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwibWF0Y2hlcyBhbiBleGFjdCBwYXR0ZXJuIG9ubHkgZXhhY3RseVwiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbeyBuYW1lOiBcInBcIiwgcm91dGVzOiBbXCIvcHJpY2luZ1wiXSB9XSxcbiAgICAgIHJvdXRlcyhcIi9wcmljaW5nXCIsIFwiL3ByaWNpbmcvZW50ZXJwcmlzZVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZC5wKS50b0VxdWFsKFtcIi9wcmljaW5nXCJdKTtcbiAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL3ByaWNpbmcvZW50ZXJwcmlzZVwiXSk7XG4gIH0pO1xuXG4gIGl0KFwibWF0Y2hlcyBhIHN1YnRyZWUgYWdhaW5zdCB0aGUgZHluYW1pYyByb3V0ZXMgdW5kZXIgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICByb3V0ZXMoXCIvYmxvZy9bc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z10vY29tbWVudHNcIiwgXCIvYmxvZ3JvbGxcIiksXG4gICAgKTtcbiAgICBleHBlY3QoYXNzaWduZWQuYmxvZykudG9FcXVhbChbXCIvYmxvZy9bc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z10vY29tbWVudHNcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXCIvYmxvZ3JvbGxcIl0pO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGxldCBhIHN1YnRyZWUgY2xhaW0gaXRzIG93biByb290LCBiZWNhdXNlIHRoZSBiZWhhdmlvciB3b3VsZCBub3RcIiwgKCkgPT4ge1xuICAgIC8vIGAvYXBpL3JlcG9ydHMvKipgIGRlcGxveXMgYXMgQ2xvdWRGcm9udCBgYXBpL3JlcG9ydHMvKmAsIHdoaWNoIGRvZXMgbm90XG4gICAgLy8gbWF0Y2ggYC9hcGkvcmVwb3J0c2AuIENsYWltaW5nIGl0IGhlcmUgd291bGQgcGFja2FnZSB0aGUgcm91dGUgaW50byBhXG4gICAgLy8gZnVuY3Rpb24gdGhlIGVkZ2UgbmV2ZXIgcm91dGVzIGl0IHRvLlxuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgYXNzaWduKFxuICAgICAgICBbeyBuYW1lOiBcInJcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfV0sXG4gICAgICAgIHJvdXRlcyhcIi9hcGkvcmVwb3J0c1wiKSxcbiAgICAgICksXG4gICAgKS50b1Rocm93KC9tYXRjaGVzIG5vIHJvdXRlIGluIHRoaXMgYnVpbGQvKTtcbiAgfSk7XG5cbiAgaXQoXCJnaXZlcyB0aGUgbG9uZ2VzdCBtYXRjaGluZyBwYXR0ZXJuIHRoZSByb3V0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbXG4gICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH0sXG4gICAgICAgIHsgbmFtZTogXCJyZXBvcnRzXCIsIHJvdXRlczogW1wiL2FwaS9yZXBvcnRzLyoqXCJdIH0sXG4gICAgICBdLFxuICAgICAgcm91dGVzKFwiL2FwaS9oZWFsdGhcIiwgXCIvYXBpL3JlcG9ydHMvW2lkXVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZC5hcGkpLnRvRXF1YWwoW1wiL2FwaS9oZWFsdGhcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZC5yZXBvcnRzKS50b0VxdWFsKFtcIi9hcGkvcmVwb3J0cy9baWRdXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJyYW5rcyBieSBzZWdtZW50IGNvdW50IGJlZm9yZSBzdHJpbmcgbGVuZ3RoXCIsICgpID0+IHtcbiAgICAvLyBcIi9hL2JcIiBpcyBkZWVwZXIgdGhhbiBcIi9hbG9uZ25hbWVcIiBldmVuIHRob3VnaCBpdCBpcyBzaG9ydGVyLlxuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW1xuICAgICAgICB7IG5hbWU6IFwiZGVlcFwiLCByb3V0ZXM6IFtcIi9hL2IvKipcIl0gfSxcbiAgICAgICAgeyBuYW1lOiBcImxvbmdcIiwgcm91dGVzOiBbXCIvYS8qKlwiXSB9LFxuICAgICAgXSxcbiAgICAgIHJvdXRlcyhcIi9hL2IvY1wiLCBcIi9hL3hcIiksXG4gICAgKTtcbiAgICBleHBlY3QoYXNzaWduZWQuZGVlcCkudG9FcXVhbChbXCIvYS9iL2NcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZC5sb25nKS50b0VxdWFsKFtcIi9hL3hcIl0pO1xuICB9KTtcblxuICBpdChcInRocm93cyBvbiBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIG5vdGhpbmcsIGJlY2F1c2UgdGhlIHR5cG8gaXMgaW52aXNpYmxlXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT5cbiAgICAgIGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL2FweS8qKlwiXSB9XSxcbiAgICAgICAgcm91dGVzKFwiL2FwaS94XCIpLFxuICAgICAgKSxcbiAgICApLnRvVGhyb3coL3BhdHRlcm4gXCJcXC9hcHlcXC9cXCpcXCpcIiBtYXRjaGVzIG5vIHJvdXRlLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyBhIHBhdHRlcm4gZXZlcnkgbWF0Y2ggb2Ygd2hpY2ggYSBuYXJyb3dlciBwYXR0ZXJuIGFsc28gY2xhaW1zXCIsICgpID0+IHtcbiAgICAvLyBgL2FwaS8qKmAgbmV2ZXIgd2lucyBhIHJvdXRlIGhlcmUsIGJlY2F1c2UgZXZlcnkgQVBJIHJvdXRlIHRoaXMgYnVpbGQgaGFzXG4gICAgLy8gaXMgdW5kZXIgYC9hcGkvcmVwb3J0cy9gLiBSZWNvcmRpbmcgb25seSB0aGUgKndpbm5pbmcqIHBhdHRlcm4gbWFkZSBpdCBsb29rXG4gICAgLy8gbGlrZSBhIHR5cG8gYW5kIHRocmV3IC0gcmVqZWN0aW5nIHRoZSBleGFjdCBsYXlvdXQgdGhlIGR1cGxpY2F0ZS1wYXR0ZXJuXG4gICAgLy8gZXJyb3IgZG9jdW1lbnRzIGFzIHN1cHBvcnRlZC4gVGhlIGdyb3VwIGlzIGxlZ2l0aW1hdGVseSBlbXB0eTogaXQgaXMgdGhlXG4gICAgLy8gY29uc3VtZXIncyBjaG9pY2UgdG8ga2VlcCBpdCBmb3IgdGhlIHJvdXRlcyBpdCB3aWxsIG93biBsYXRlci5cbiAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgIFtcbiAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfSxcbiAgICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgIF0sXG4gICAgICByb3V0ZXMoXCIvYXBpL3JlcG9ydHMvW2lkXVwiLCBcIi9hcGkvcmVwb3J0cy9zdW1tYXJ5XCIpLFxuICAgICk7XG4gICAgZXhwZWN0KGFzc2lnbmVkLmFwaSkudG9FcXVhbChbXSk7XG4gICAgZXhwZWN0KGFzc2lnbmVkLnJlcG9ydHMpLnRvRXF1YWwoW1xuICAgICAgXCIvYXBpL3JlcG9ydHMvW2lkXVwiLFxuICAgICAgXCIvYXBpL3JlcG9ydHMvc3VtbWFyeVwiLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcImdpdmVzIGEgc2hhcmVkIGVudHJ5cG9pbnQgdG8gaXRzIG1vc3Qgc3BlY2lmaWMgbWF0Y2gsIG5vdCBpdHMgbGFzdCBvbmVcIiwgKCkgPT4ge1xuICAgIC8vIFR3byB0ZW1wbGF0ZXMsIG9uZSBmaWxlLCB0d28gZ3JvdXBzIHdob3NlIHBhdHRlcm5zIGJvdGggbWF0Y2ggLSBvbmVcbiAgICAvLyBuYXJyb3dseSwgb25lIGJyb2FkbHkuIE93bmVyc2hpcCB1c2VkIHRvIGJlIGxhc3Qtd3JpdGUtd2lucyBvdmVyIGBlbnRyaWVzYCxcbiAgICAvLyBzbyB0aGUgc2FtZSBidWlsZCBncm91cGVkIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiBtYW5pZmVzdCBrZXkgb3JkZXIuXG4gICAgY29uc3QgZW50cmllczogUm91dGVFbnRyeVtdID0gW1xuICAgICAgLy8gTWF0Y2hlZCBvbmx5IGJ5IHRoZSBicm9hZCBwYXR0ZXJuLlxuICAgICAgeyB0ZW1wbGF0ZTogXCIvYXBpL2hlYWx0aFwiLCBlbnRyeXBvaW50SWQ6IFwic2hhcmVkXCIgfSxcbiAgICAgIC8vIE1hdGNoZWQgYnkgYm90aDsgdGhlIG5hcnJvdyBvbmUgd2lucy5cbiAgICAgIHsgdGVtcGxhdGU6IFwiL2FwaS9yZXBvcnRzL3N1bW1hcnlcIiwgZW50cnlwb2ludElkOiBcInNoYXJlZFwiIH0sXG4gICAgXTtcbiAgICBjb25zdCBncm91cHM6IEZ1bmN0aW9uR3JvdXBTcGVjW10gPSBbXG4gICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICBdO1xuICAgIC8vIGAvYXBpL3JlcG9ydHMvKipgIGlzIHRoZSBtb3N0IHNwZWNpZmljIGNsYWltIGFueSBvZiB0aGUgZW50cnlwb2ludCdzXG4gICAgLy8gdGVtcGxhdGVzIGhhcywgc28gaXQgdGFrZXMgdGhlIHdob2xlIGVudHJ5cG9pbnQg4oCUIGFuZCB0aGVuIHRoZSBlZGdlIHN0aWxsXG4gICAgLy8gc2VuZHMgYC9hcGkvaGVhbHRoYCB0byB0aGUgYXBpIGdyb3VwLCB3aGljaCBsYWNrcyB0aGUgZmlsZS4gVGhhdCB1c2VkIHRvXG4gICAgLy8gZGVwbG95IGFuZCA1MDA7IGl0IGlzIHRoZSBjb3ZlcmFnZSBjaGVjaydzIHRvIHJlamVjdCwgaWRlbnRpY2FsbHkgaW4gYm90aFxuICAgIC8vIG9yZGVycy5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIC9cIlxcL2FwaVxcL2hlYWx0aFwiIHRvIGdyb3VwIFwiYXBpXCIgXFwoaXRzIHBhdHRlcm4gXCJcXC9hcGlcXC9cXCpcXCpcIlxcKS87XG4gICAgZXhwZWN0KCgpID0+IGFzc2lnbihncm91cHMsIGVudHJpZXMpKS50b1Rocm93KG1lc3NhZ2UpO1xuICAgIGV4cGVjdCgoKSA9PiBhc3NpZ24oZ3JvdXBzLCBbLi4uZW50cmllc10ucmV2ZXJzZSgpKSkudG9UaHJvdyhtZXNzYWdlKTtcbiAgICBleHBlY3QoKCkgPT4gYXNzaWduKGdyb3VwcywgZW50cmllcykpLnRvVGhyb3coXG4gICAgICAvQWRkIFwiXFwvYXBpXFwvaGVhbHRoXCIgdG8gZ3JvdXAgXCJyZXBvcnRzXCIncyByb3V0ZXMvLFxuICAgICk7XG4gICAgLy8gV2hpY2ggaXMgdGhlIGZpeDogdGhlIGV4YWN0IHBhdHRlcm4gYmVhdHMgdGhlIGFwaSBzdWJ0cmVlIGF0IHRoZSBlZGdlLlxuICAgIGNvbnN0IGZpeGVkID0gYXNzaWduKFxuICAgICAgW1xuICAgICAgICBncm91cHNbMF0sXG4gICAgICAgIHsgbmFtZTogXCJyZXBvcnRzXCIsIHJvdXRlczogW1wiL2FwaS9yZXBvcnRzLyoqXCIsIFwiL2FwaS9oZWFsdGhcIl0gfSxcbiAgICAgIF0sXG4gICAgICBlbnRyaWVzLFxuICAgICk7XG4gICAgZXhwZWN0KGZpeGVkLnJlcG9ydHMpLnRvRXF1YWwoW1wiL2FwaS9oZWFsdGhcIiwgXCIvYXBpL3JlcG9ydHMvc3VtbWFyeVwiXSk7XG4gICAgZXhwZWN0KGZpeGVkLmFwaSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwicHJlZml4ZXMgYmFzZVBhdGggYmVmb3JlIG1hdGNoaW5nLCBzaW5jZSBtYW5pZmVzdCB0ZW1wbGF0ZXMgY2FycnkgaXRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgcm91dGVzKFwiL3Byb2QvYXBpL2hlYWx0aFwiLCBcIi9wcm9kL3ByaWNpbmdcIiksXG4gICAgICBcIi9wcm9kXCIsXG4gICAgKTtcbiAgICBleHBlY3QoYXNzaWduZWQuYXBpKS50b0VxdWFsKFtcIi9wcm9kL2FwaS9oZWFsdGhcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXCIvcHJvZC9wcmljaW5nXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyB0d28gdGVtcGxhdGVzIHNoYXJpbmcgb25lIGVudHJ5cG9pbnQgaW4gdGhlIHNhbWUgZ3JvdXBcIiwgKCkgPT4ge1xuICAgIC8vIEEgUGFnZXMgUm91dGVyIHBhZ2UgYW5kIGl0cyBgL19uZXh0L2RhdGEvPGJ1aWxkSWQ+L+KApmpzb25gIHNpYmxpbmcgYXJlIG9uZVxuICAgIC8vIGZpbGU7IHNwbGl0dGluZyB0aGVtIHdvdWxkIHN0YWdlIGl0IHR3aWNlIGFuZCBtaXNyb3V0ZSBvbmUgb2YgdGhlbS5cbiAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgW1xuICAgICAgICB7XG4gICAgICAgICAgdGVtcGxhdGU6IFwiL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgICAgZW50cnlwb2ludElkOiBcInBhZ2VzL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZW1wbGF0ZTogXCIvX25leHQvZGF0YS9hYmMxMjMvYmxvZy9bc2x1Z10uanNvblwiLFxuICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9ibG9nL1tzbHVnXVwiLFxuICAgICAgICAgIHR5cGU6IFwicGFnZVwiLFxuICAgICAgICB9LFxuICAgICAgICB7IHRlbXBsYXRlOiBcIi9cIiwgZW50cnlwb2ludElkOiBcInBhZ2VzL2luZGV4XCIsIHR5cGU6IFwicGFnZVwiIH0sXG4gICAgICBdLFxuICAgICk7XG4gICAgZXhwZWN0KGFzc2lnbmVkLmJsb2cpLnRvRXF1YWwoW1xuICAgICAgXCIvX25leHQvZGF0YS9hYmMxMjMvYmxvZy9bc2x1Z10uanNvblwiLFxuICAgICAgXCIvYmxvZy9bc2x1Z11cIixcbiAgICBdKTtcbiAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL1wiXSk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBldmVyeSBncm91cCBldmVuIHdoZW4gYSBncm91cCBlbmRzIHVwIHdpdGggb25seSB0aGUgZGVmYXVsdCdzIGxlZnRvdmVyc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICBbeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9hcGkvKipcIl0gfV0sXG4gICAgICByb3V0ZXMoXCIvYXBpL2hlYWx0aFwiKSxcbiAgICApO1xuICAgIGV4cGVjdChPYmplY3Qua2V5cyhhc3NpZ25lZCkuc29ydCgpKS50b0VxdWFsKFtcImFwaVwiLCBcImRlZmF1bHRcIl0pO1xuICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwic29ydHMgZWFjaCBncm91cCdzIHRlbXBsYXRlcyBzbyB0aGUgbWFuaWZlc3QgaXMgYnl0ZS1zdGFibGVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgcm91dGVzKFwiL2FwaS96XCIsIFwiL2FwaS9hXCIsIFwiL3pcIiwgXCIvYVwiKSxcbiAgICApO1xuICAgIGV4cGVjdChhc3NpZ25lZC5hcGkpLnRvRXF1YWwoW1wiL2FwaS9hXCIsIFwiL2FwaS96XCJdKTtcbiAgICBleHBlY3QoYXNzaWduZWRbREVGQVVMVF9GVU5DVElPTl9HUk9VUF0pLnRvRXF1YWwoW1wiL2FcIiwgXCIvelwiXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwidGhlIGJlaGF2aW9ycyB0aGUgYXNzaWdubWVudCByZXR1cm5zXCIsICgpID0+IHtcbiAgaXQoXCJvcmRlcnMgb3ZlcmxhcHBpbmcgZ3JvdXAgcGF0dGVybnMgbW9zdCBzcGVjaWZpYyBmaXJzdFwiLCAoKSA9PiB7XG4gICAgLy8gQ2xvdWRGcm9udCBzdG9wcyBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgYmVoYXZpb3IsIHNvIGBhcGkvKmAgYWhlYWQgb2ZcbiAgICAvLyBgYXBpL3JlcG9ydHMvKmAgd291bGQgc2VuZCBldmVyeSByZXBvcnQgcmVxdWVzdCB0byB0aGUgd3JvbmcgZnVuY3Rpb24uXG4gICAgZXhwZWN0KFxuICAgICAgcGF0dGVybnNPZihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgcm91dGVzKFwiL2FwaS9beF1cIiwgXCIvYXBpL3JlcG9ydHMvW2lkXVwiKSxcbiAgICAgICksXG4gICAgKS50b0VxdWFsKFtcImFwaS9yZXBvcnRzLypcIiwgXCJhcGkvKlwiXSk7XG4gIH0pO1xuXG4gIGl0KFwicmFua3MgYnkgc2VnbWVudCBjb3VudCBiZWZvcmUgc3RyaW5nIGxlbmd0aFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcGF0dGVybnNPZihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJhXCIsIHJvdXRlczogW1wiL2EvYi8qKlwiXSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJiXCIsIHJvdXRlczogW1wiL2F2ZXJ5dmVyeWxvbmdzZWdtZW50LyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJvdXRlcyhcIi9hL2IvW3hdXCIsIFwiL2F2ZXJ5dmVyeWxvbmdzZWdtZW50L1t4XVwiKSxcbiAgICAgICksXG4gICAgKS50b0VxdWFsKFtcImEvYi8qXCIsIFwiYXZlcnl2ZXJ5bG9uZ3NlZ21lbnQvKlwiXSk7XG4gIH0pO1xuXG4gIGl0KFwicHV0cyBhbiBleGFjdCBwYXR0ZXJuIGFoZWFkIG9mIGEgd2lsZGNhcmQgb2YgdGhlIHNhbWUgZGVwdGhcIiwgKCkgPT4ge1xuICAgIC8vIGBhLypgIGFuZCBgYS9iYCBhcmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWdtZW50IGNvdW50OyBgYS8qYCBmaXJzdFxuICAgIC8vIHN3YWxsb3dzIGBhL2JgLCBzZW5kaW5nIGdyb3VwIGIncyBvbmx5IHJvdXRlIHRvIGdyb3VwIGEncyBmdW5jdGlvbi5cbiAgICBleHBlY3QoXG4gICAgICBwYXR0ZXJuc09mKFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcImFcIiwgcm91dGVzOiBbXCIvYS8qKlwiXSB9LFxuICAgICAgICAgIHsgbmFtZTogXCJiXCIsIHJvdXRlczogW1wiL2EvYlwiXSB9LFxuICAgICAgICBdLFxuICAgICAgICByb3V0ZXMoXCIvYS9iXCIsIFwiL2EvW3hdXCIpLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW1wiYS9iXCIsIFwiYS8qXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJhZGRzIGRhdGEtVVJMIGJlaGF2aW9ycyBvbmx5IGZvciB0aGUgZ3JvdXBzIHRoYXQgb3duIGEgUGFnZXMgUm91dGVyIHBhZ2VcIiwgKCkgPT4ge1xuICAgIC8vIE9uZSBsZWdhY3kgcGFnZSBtdXN0IG5vdCBkb3VibGUgZXZlcnkgZ3JvdXAncyBiZWhhdmlvcnMuXG4gICAgZXhwZWN0KFxuICAgICAgcGF0dGVybnNPZihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZW1wbGF0ZTogXCIvYmxvZy9bc2x1Z11cIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9ibG9nL1tzbHVnXS5qc1wiLFxuICAgICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IHRlbXBsYXRlOiBcIi9kb2NzL1twYWdlXVwiLCBlbnRyeXBvaW50SWQ6IFwiYXBwL2RvY3MvW3BhZ2VdL3BhZ2UuanNcIiB9LFxuICAgICAgICBdLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW1wiX25leHQvZGF0YS9hYmMxMjMvYmxvZy8qXCIsIFwiYmxvZy8qXCIsIFwiZG9jcy8qXCJdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3aGF0IHRoZSBlZGdlIHJvdXRlcywgY2hlY2tlZCBhZ2FpbnN0IHdoYXQgd2FzIHBhY2thZ2VkXCIsICgpID0+IHtcbiAgZGVzY3JpYmUoXCJQYWdlcyBSb3V0ZXIgZGF0YSBVUkxzIChBKVwiLCAoKSA9PiB7XG4gICAgaXQoXCJrZWVwcyBhIG5lc3RlZCBwYWdlJ3MgZGF0YSBVUkwgaW4gaXRzIG93biBncm91cFwiLCAoKSA9PiB7XG4gICAgICAvLyBXaXRoIGBfbmV4dC9kYXRhLyovYmxvZy8qYCwgQ2xvdWRGcm9udCBzZW50IHRoZSBkb2NzIGdyb3VwJ3NcbiAgICAgIC8vIGAvX25leHQvZGF0YS88aWQ+L2RvY3MvYmxvZy9pbnRyby5qc29uYCB0byB0aGUgYmxvZyBmdW5jdGlvbi5cbiAgICAgIGNvbnN0IHBhZ2UgPSAodGVtcGxhdGU6IHN0cmluZywgZmlsZTogc3RyaW5nKTogUm91dGVFbnRyeVtdID0+IFtcbiAgICAgICAgeyB0ZW1wbGF0ZSwgZW50cnlwb2ludElkOiBmaWxlLCB0eXBlOiBcInBhZ2VcIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGVtcGxhdGU6IGAvX25leHQvZGF0YS8ke0JVSUxEX0lEfSR7dGVtcGxhdGV9Lmpzb25gLFxuICAgICAgICAgIGVudHJ5cG9pbnRJZDogZmlsZSxcbiAgICAgICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5wYWdlKFwiL2Jsb2cvW3NsdWddXCIsIFwicGFnZXMvYmxvZy9bc2x1Z10uanNcIiksXG4gICAgICAgICAgLi4ucGFnZShcIi9kb2NzL2Jsb2cvW3NsdWddXCIsIFwicGFnZXMvZG9jcy9ibG9nL1tzbHVnXS5qc1wiKSxcbiAgICAgICAgXSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQuZG9jcykudG9FcXVhbChbXG4gICAgICAgIFwiL19uZXh0L2RhdGEvYWJjMTIzL2RvY3MvYmxvZy9bc2x1Z10uanNvblwiLFxuICAgICAgICBcIi9kb2NzL2Jsb2cvW3NsdWddXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicm91dGVzIHRoZSBwYWdlcy1pMThuIGZpeHR1cmUncyBwYWdlIGFuZCBkYXRhIFVSTHMgdG9nZXRoZXJcIiwgKCkgPT4ge1xuICAgICAgLy8gU3BsaXR0aW5nIHJlZnVzZXMgaTE4biwgc28gZHJvcCB0aGUgbG9jYWxlLXByZWZpeGVkIGNvcGllcyBhbmQga2VlcCB0aGVcbiAgICAgIC8vIHNoYXBlIHRoZSBmaXh0dXJlIGhhcyB3aXRob3V0IHRoZW06IGEgZHluYW1pYyBTU0cgcGFnZSwgYW4gU1NSIHBhZ2Ugd2l0aFxuICAgICAgLy8gaXRzIGRhdGEgb3V0cHV0LCB0d28gQVBJIHJvdXRlcy5cbiAgICAgIGNvbnN0IHsgZW50cmllcywgb3B0aW9ucyB9ID0gZml4dHVyZVJvdXRlcyhwYWdlc0kxOG4pO1xuICAgICAgY29uc3QgbG9jYWxlID0gL15cXC8oPzpfbmV4dFxcL2RhdGFcXC9bXi9dK1xcLyk/KD86ZW4tVVN8ZnJ8bmwtTkwpKD86XFwvfCQpLztcbiAgICAgIGNvbnN0IHVubG9jYWxpemVkID0gZW50cmllcy5maWx0ZXIoXG4gICAgICAgIChlbnRyeSkgPT4gIWxvY2FsZS50ZXN0KGVudHJ5LnRlbXBsYXRlKSxcbiAgICAgICk7XG4gICAgICBjb25zdCB7IHRlbXBsYXRlcywgYmVoYXZpb3JzIH0gPSBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyhcbiAgICAgICAgW1xuICAgICAgICAgIHsgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwic3NyXCIsIHJvdXRlczogW1wiL3NzclwiXSB9LFxuICAgICAgICBdLFxuICAgICAgICB1bmxvY2FsaXplZCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICk7XG4gICAgICBleHBlY3QodGVtcGxhdGVzLmJsb2cpLnRvRXF1YWwoW1wiL2Jsb2cvW3NsdWddXCJdKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZXMuc3NyKS50b0VxdWFsKFtcbiAgICAgICAgYC9fbmV4dC9kYXRhLyR7b3B0aW9ucy5idWlsZElkfS9zc3IuanNvbmAsXG4gICAgICAgIFwiL3NzclwiLFxuICAgICAgXSk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGJlaGF2aW9ycy5maWx0ZXIoKHsgcGF0dGVybiB9KSA9PiBwYXR0ZXJuLnN0YXJ0c1dpdGgoXCJfbmV4dC9kYXRhL1wiKSksXG4gICAgICApLnRvRXF1YWwoW1xuICAgICAgICB7XG4gICAgICAgICAgZ3JvdXA6IFwic3NyXCIsXG4gICAgICAgICAgcm91dGU6IFwiL3NzclwiLFxuICAgICAgICAgIHBhdHRlcm46IGBfbmV4dC9kYXRhLyR7b3B0aW9ucy5idWlsZElkfS9zc3IuanNvbmAsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogXCJibG9nXCIsXG4gICAgICAgICAgcm91dGU6IFwiL2Jsb2cvKipcIixcbiAgICAgICAgICBwYXR0ZXJuOiBgX25leHQvZGF0YS8ke29wdGlvbnMuYnVpbGRJZH0vYmxvZy8qYCxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImFuIG9wdGlvbmFsIGNhdGNoLWFsbCdzIHBhcmVudCAoQilcIiwgKCkgPT4ge1xuICAgIGl0KFwicm91dGVzIHRoZSBwYXJlbnQgVVJMIHdpdGggdGhlIHN1YnRyZWUgdGhhdCBtb3ZlZCB0aGUgZmlsZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGVudHJpZXMsIG9wdGlvbnMgfSA9IGZpeHR1cmVSb3V0ZXMoYXBwUGxheWdyb3VuZCk7XG4gICAgICBjb25zdCBncm91cHMgPSBbeyBuYW1lOiBcInBhcmFtc1wiLCByb3V0ZXM6IFtcIi9wYXJhbXMvb3B0aW9uYWwvKipcIl0gfV07XG4gICAgICBjb25zdCB7IHRlbXBsYXRlcywgYmVoYXZpb3JzIH0gPSBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyhcbiAgICAgICAgZ3JvdXBzLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdCh0ZW1wbGF0ZXMucGFyYW1zKS50b0NvbnRhaW4oXCIvcGFyYW1zL29wdGlvbmFsL1tbLi4ucmVzdF1dXCIpO1xuICAgICAgLy8gYHBhcmFtcy9vcHRpb25hbC8qYCBkb2VzIG5vdCBtYXRjaCBgL3BhcmFtcy9vcHRpb25hbGAsIHdoaWNoIHRoZSBzYW1lXG4gICAgICAvLyBmaWxlIHNlcnZlcywgc28gaXQgZ2V0cyBhbiBleGFjdCBiZWhhdmlvciBvZiBpdHMgb3duLlxuICAgICAgZXhwZWN0KGJlaGF2aW9ycykudG9FcXVhbChbXG4gICAgICAgIHtcbiAgICAgICAgICBncm91cDogXCJwYXJhbXNcIixcbiAgICAgICAgICByb3V0ZTogXCIvcGFyYW1zL29wdGlvbmFsXCIsXG4gICAgICAgICAgcGF0dGVybjogXCJwYXJhbXMvb3B0aW9uYWxcIixcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiBcInBhcmFtc1wiLFxuICAgICAgICAgIHJvdXRlOiBcIi9wYXJhbXMvb3B0aW9uYWwvKipcIixcbiAgICAgICAgICBwYXR0ZXJuOiBcInBhcmFtcy9vcHRpb25hbC8qXCIsXG4gICAgICAgIH0sXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicG9pbnRzIHRoZSBvbGQgZXhhY3QtcGF0dGVybiB3b3JrYXJvdW5kIGF0IHRoZSBzdWJ0cmVlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgZW50cmllcywgb3B0aW9ucyB9ID0gZml4dHVyZVJvdXRlcyhhcHBQbGF5Z3JvdW5kKTtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ25Sb3V0ZXNUb0dyb3VwcyhcbiAgICAgICAgICBbeyBuYW1lOiBcInBhcmFtc1wiLCByb3V0ZXM6IFtcIi9wYXJhbXMvb3B0aW9uYWxcIl0gfV0sXG4gICAgICAgICAgZW50cmllcyxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvc2VydmVkIGJ5IHRoZSBvcHRpb25hbCBjYXRjaC1hbGwgXCJcXC9wYXJhbXNcXC9vcHRpb25hbFxcL1xcW1xcW1xcLlxcLlxcLnJlc3RcXF1cXF1cIiwgd2hvc2Ugc3VidHJlZSBwYXR0ZXJuIFwiXFwvcGFyYW1zXFwvb3B0aW9uYWxcXC9cXCpcXCpcIiByb3V0ZXMgXCJcXC9wYXJhbXNcXC9vcHRpb25hbFwiIGFzIHdlbGwvLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwid29ya3MgdW5kZXIgYSBiYXNlUGF0aCB0b29cIiwgKCkgPT4ge1xuICAgICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICAgIFt7IG5hbWU6IFwic2hvcFwiLCByb3V0ZXM6IFtcIi9zaG9wLyoqXCJdIH1dLFxuICAgICAgICByb3V0ZXMoXCIvYmFzZS9zaG9wL1tbLi4uc2x1Z11dXCIsIFwiL2Jhc2VcIiksXG4gICAgICAgIFwiL2Jhc2VcIixcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQuc2hvcCkudG9FcXVhbChbXCIvYmFzZS9zaG9wL1tbLi4uc2x1Z11dXCJdKTtcbiAgICAgIGV4cGVjdChyb3V0ZWRQYXR0ZXJucyhbXCIvc2hvcC8qKlwiXSwgYXNzaWduZWQuc2hvcCwgXCJiYXNlXCIpKS50b0VxdWFsKFtcbiAgICAgICAgXCIvc2hvcC8qKlwiLFxuICAgICAgICBcIi9zaG9wXCIsXG4gICAgICBdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicm91dGVzIGEgUGFnZXMgUm91dGVyIG9wdGlvbmFsIGNhdGNoLWFsbCdzIHBhcmVudCBkYXRhIFVSTFwiLCAoKSA9PiB7XG4gICAgICAvLyBgL19uZXh0L2RhdGEvPGlkPi9zaG9wLmpzb25gIGJlbG9uZ3MgdG8gdGhlIHNhbWUgZmlsZSwgYW5kIHRoZSBleGFjdFxuICAgICAgLy8gYC9zaG9wYCBwYXR0ZXJuIGByb3V0ZWRQYXR0ZXJuc2AgYWRkcyBjYXJyaWVzIGl0LlxuICAgICAgY29uc3QgYXNzaWduZWQgPSBhc3NpZ24oXG4gICAgICAgIFt7IG5hbWU6IFwic2hvcFwiLCByb3V0ZXM6IFtcIi9zaG9wLyoqXCJdIH1dLFxuICAgICAgICBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVtcGxhdGU6IFwiL3Nob3AvW1suLi5zbHVnXV1cIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9zaG9wL1tbLi4uc2x1Z11dLmpzXCIsXG4gICAgICAgICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC5zaG9wKS50b0VxdWFsKFtcIi9zaG9wL1tbLi4uc2x1Z11dXCJdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJvbmUgZmlsZSBiZWhpbmQgc2V2ZXJhbCB0ZW1wbGF0ZXMgKEMpXCIsICgpID0+IHtcbiAgICAvLyBgYXBwL1tsb2NhbGVdL3BhZ2UudHN4YCB3aXRoIHJvb3QgcGFyYW1zOiBgL2VuYCBhbmQgYC9kZWAgYXJlIHN5bnRoZXNpemVkXG4gICAgLy8gZnJvbSBvbmUgb3V0cHV0LCBhbG9uZ3NpZGUgaXRzIG93biBgL1tsb2NhbGVdYCB0ZW1wbGF0ZS5cbiAgICBjb25zdCByb290UGFyYW1zOiBSb3V0ZUVudHJ5W10gPSBbXG4gICAgICBcIi9bbG9jYWxlXVwiLFxuICAgICAgXCIvW2xvY2FsZV0ucnNjXCIsXG4gICAgICBcIi9lblwiLFxuICAgICAgXCIvZW4ucnNjXCIsXG4gICAgICBcIi9kZVwiLFxuICAgICAgXCIvZGUucnNjXCIsXG4gICAgXS5tYXAoKHRlbXBsYXRlKSA9PiAoe1xuICAgICAgdGVtcGxhdGUsXG4gICAgICBlbnRyeXBvaW50SWQ6IFwiYXBwL1tsb2NhbGVdL3BhZ2UuanNcIixcbiAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICB9KSk7XG5cbiAgICBpdChcInJlamVjdHMgYSBwYXR0ZXJuIHRoYXQgbW92ZXMgdGhlIGZpbGUgZm9yIG9uZSBvZiBpdHMgVVJMc1wiLCAoKSA9PiB7XG4gICAgICAvLyBPbmx5IGBlbmAgZ290IGEgYmVoYXZpb3IsIHNvIGAvZGVgIHJlYWNoZWQgdGhlIGRlZmF1bHQgZnVuY3Rpb24sIHdoaWNoXG4gICAgICAvLyBubyBsb25nZXIgaGFkIHRoZSBmaWxlLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihbeyBuYW1lOiBcImludGxcIiwgcm91dGVzOiBbXCIvZW5cIl0gfV0sIHJvb3RQYXJhbXMpLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvXCJhcHBcXC9cXFtsb2NhbGVcXF1cXC9wYWdlXFwuanNcIiBpcyBwYWNrYWdlZCBpbnRvIGdyb3VwIFwiaW50bFwiLCBidXQgQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvXFxbbG9jYWxlXFxdXCIgdG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLCBcIlxcL2RlXCIgdG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLyxcbiAgICAgICk7XG4gICAgICAvLyBBbmQgc2F5cyB0aGUgZmlsZSBjYW5ub3QgYmUgZ3JvdXBlZCBhdCBhbGw6IGAvW2xvY2FsZV1gIHdvdWxkIG5lZWQgYC8qKmAuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFt7IG5hbWU6IFwiaW50bFwiLCByb3V0ZXM6IFtcIi9lblwiLCBcIi9kZVwiXSB9XSwgcm9vdFBhcmFtcyksXG4gICAgICApLnRvVGhyb3coL1wiXFwvXFxbbG9jYWxlXFxdXCIgY2Fubm90IGJlIHJvdXRlZCB0byBhbnkgZ3JvdXAvKTtcbiAgICB9KTtcblxuICAgIGl0KFwic3VnZ2VzdHMgdGhlIHBhdHRlcm4gdGhhdCBjb3ZlcnMgYSBzdGF0aWMgdGVtcGxhdGUgaXQgbGVmdCBiZWhpbmRcIiwgKCkgPT4ge1xuICAgICAgY29uc3Qgc2hhcmVkOiBSb3V0ZUVudHJ5W10gPSBbXG4gICAgICAgIHsgdGVtcGxhdGU6IFwiL2Fib3V0XCIsIGVudHJ5cG9pbnRJZDogXCJzaGFyZWQuanNcIiB9LFxuICAgICAgICB7IHRlbXBsYXRlOiBcIi90ZWFtXCIsIGVudHJ5cG9pbnRJZDogXCJzaGFyZWQuanNcIiB9LFxuICAgICAgXTtcbiAgICAgIGV4cGVjdCgoKSA9PiBhc3NpZ24oW3sgbmFtZTogXCJtXCIsIHJvdXRlczogW1wiL2Fib3V0XCJdIH1dLCBzaGFyZWQpKS50b1Rocm93KFxuICAgICAgICAvQWRkIFwiXFwvdGVhbVwiIHRvIGdyb3VwIFwibVwiJ3Mgcm91dGVzLyxcbiAgICAgICk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGFzc2lnbihbeyBuYW1lOiBcIm1cIiwgcm91dGVzOiBbXCIvYWJvdXRcIiwgXCIvdGVhbVwiXSB9XSwgc2hhcmVkKS5tLFxuICAgICAgKS50b0VxdWFsKFtcIi9hYm91dFwiLCBcIi90ZWFtXCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIHRoZSB0cmFpbGluZ1NsYXNoIGZvcm0sIHdoaWNoIGV4YWN0IHBhdHRlcm5zIHJvdXRlXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgICBbeyBuYW1lOiBcInBcIiwgcm91dGVzOiBbXCIvcHJpY2luZ1wiXSB9XSxcbiAgICAgICAgcm91dGVzKFwiL3ByaWNpbmdcIiksXG4gICAgICAgIFwiXCIsXG4gICAgICAgIHsgdHJhaWxpbmdTbGFzaDogdHJ1ZSB9LFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC5wKS50b0VxdWFsKFtcIi9wcmljaW5nXCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicHV0cyBhbiBleGFjdCB0cmFpbGluZ1NsYXNoIGZvcm0gYWhlYWQgb2YgYSBzdWJ0cmVlIGl0IHNpdHMgYXQgdGhlIGJhc2Ugb2ZcIiwgKCkgPT4ge1xuICAgICAgLy8gYGEvYi9gIGFuZCBgYS9iLypgIGhhdmUgdGhlIHNhbWUgbGl0ZXJhbCBkZXB0aDsgd2VyZSB0aGUgc3VidHJlZSBmaXJzdFxuICAgICAgLy8gaXQgd291bGQgdGFrZSBgL2EvYi9gIGZyb20gZ3JvdXAgeC5cbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgICBbXG4gICAgICAgICAgeyBuYW1lOiBcInhcIiwgcm91dGVzOiBbXCIvYS9iXCJdIH0sXG4gICAgICAgICAgeyBuYW1lOiBcInlcIiwgcm91dGVzOiBbXCIvYS9iLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJvdXRlcyhcIi9cIiwgXCIvYS9iXCIsIFwiL2EvYi9baWRdXCIpLFxuICAgICAgICBcIlwiLFxuICAgICAgICB7IHRyYWlsaW5nU2xhc2g6IHRydWUgfSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoYXNzaWduZWQueCkudG9FcXVhbChbXCIvYS9iXCJdKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC55KS50b0VxdWFsKFtcIi9hL2IvW2lkXVwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImdpdmVzIGEgZ3JvdXAgd2l0aG91dCBQYWdlcyBSb3V0ZXIgcm91dGVzIG5vIGRhdGEgVVJMIGJlaGF2aW9yc1wiLCAoKSA9PiB7XG4gICAgICAvLyBBbiBBcHAgUm91dGVyIGAvaW5kZXhgIG5leHQgdG8gYSBQYWdlcyBSb3V0ZXIgaG9tZSBwYWdlOiBhIGRhdGEgYmVoYXZpb3JcbiAgICAgIC8vIGZvciB0aGUgZ3JvdXAsIGBfbmV4dC9kYXRhLzxpZD4vaW5kZXguanNvbmAsIHdvdWxkIGJlIHRoZSBob21lIHBhZ2Unc1xuICAgICAgLy8gZGF0YSBVUkwuIFRoZSBncm91cCBvd25zIG5vIHBhZ2UsIHNvIGl0IGdldHMgbm9uZS5cbiAgICAgIGV4cGVjdChcbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiaWR4XCIsIHJvdXRlczogW1wiL2luZGV4XCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgdGVtcGxhdGU6IFwiL1wiLCBlbnRyeXBvaW50SWQ6IFwicGFnZXMvaW5kZXguanNcIiwgdHlwZTogXCJwYWdlXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IFwiL2luZGV4XCIsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvaW5kZXgvcGFnZS5qc1wiLFxuICAgICAgICAgICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICkuaWR4LFxuICAgICAgKS50b0VxdWFsKFtcIi9pbmRleFwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlamVjdHMgYSBncm91cCBwYXR0ZXJuIGNsYWltaW5nIGEgZGF0YSBVUkwgb2YgYSBmaWxlIGxlZnQgaW4gZGVmYXVsdFwiLCAoKSA9PiB7XG4gICAgICAvLyBUaGUgc2FtZSBjb2xsaXNpb24gaW4gYSBncm91cCB0aGF0IGRvZXMgb3duIGEgcGFnZS5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJpZHhcIiwgcm91dGVzOiBbXCIvaW5kZXhcIiwgXCIvbGVnYWN5XCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgdGVtcGxhdGU6IFwiL1wiLCBlbnRyeXBvaW50SWQ6IFwicGFnZXMvaW5kZXguanNcIiwgdHlwZTogXCJwYWdlXCIgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGVtcGxhdGU6IFwiL2luZGV4XCIsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvaW5kZXgvcGFnZS5qc1wiLFxuICAgICAgICAgICAgICB0eXBlOiBcImFwcC1wYWdlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZTogXCIvbGVnYWN5XCIsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9sZWdhY3kuanNcIixcbiAgICAgICAgICAgICAgdHlwZTogXCJwYWdlXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coXG4gICAgICAgIC9cInBhZ2VzXFwvaW5kZXhcXC5qc1wiIGlzIHBhY2thZ2VkIGludG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLCBidXQgQ2xvdWRGcm9udCB3b3VsZCBzZW5kIFwiXFwvX25leHRcXC9kYXRhXFwvYWJjMTIzXFwvaW5kZXhcXC5qc29uXCIgdG8gZ3JvdXAgXCJpZHhcIi8sXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImludGVyY2VwdGlvbiByb3V0ZXMgKEQpXCIsICgpID0+IHtcbiAgICBjb25zdCBwaG90b0FwcCA9ICgpOiBSb3V0ZUVudHJ5W10gPT4gW1xuICAgICAgeyB0ZW1wbGF0ZTogXCIvZmVlZFwiLCBlbnRyeXBvaW50SWQ6IFwiYXBwL2ZlZWQvcGFnZS5qc1wiLCB0eXBlOiBcImFwcC1wYWdlXCIgfSxcbiAgICAgIHtcbiAgICAgICAgdGVtcGxhdGU6IFwiL2ZlZWQvKC4uKXBob3RvL1tpZF1cIixcbiAgICAgICAgZW50cnlwb2ludElkOiBcImFwcC9mZWVkLyguLilwaG90by9baWRdL3BhZ2UuanNcIixcbiAgICAgICAgdHlwZTogXCJhcHAtcGFnZVwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgdGVtcGxhdGU6IFwiL2ZlZWQvKC4uKXBob3RvL1tpZF0ucnNjXCIsXG4gICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvZmVlZC8oLi4pcGhvdG8vW2lkXS9wYWdlLmpzXCIsXG4gICAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHRlbXBsYXRlOiBcIi9waG90by9baWRdXCIsXG4gICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvcGhvdG8vW2lkXS9wYWdlLmpzXCIsXG4gICAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIGl0KFwicGFja2FnZXMgYW4gaW50ZXJjZXB0aW5nIGZpbGUgd2l0aCB0aGUgVVJMIGl0IGludGVyY2VwdHNcIiwgKCkgPT4ge1xuICAgICAgLy8gVGhlIHNvZnQgbmF2aWdhdGlvbiByZXF1ZXN0cyBgL3Bob3RvLzFgLCB3aGljaCBDbG91ZEZyb250IHNlbmRzIHRvIHRoZVxuICAgICAgLy8gZGVmYXVsdCBmdW5jdGlvbjsgTmV4dC5qcyByZXdyaXRlcyBpdCB0aGVyZSB0byB0aGUgaW50ZXJjZXB0aW5nIGZpbGUuXG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJmZWVkXCIsIHJvdXRlczogW1wiL2ZlZWQvKipcIl0gfV0sXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5waG90b0FwcCgpLFxuICAgICAgICAgIHsgdGVtcGxhdGU6IFwiL2ZlZWQvW3Bvc3RdXCIsIGVudHJ5cG9pbnRJZDogXCJhcHAvZmVlZC9bcG9zdF0vcGFnZS5qc1wiIH0sXG4gICAgICAgIF0sXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkLmZlZWQpLnRvRXF1YWwoW1wiL2ZlZWQvW3Bvc3RdXCJdKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9Db250YWluKFxuICAgICAgICBcIi9mZWVkLyguLilwaG90by9baWRdXCIsXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkW0RFRkFVTFRfRlVOQ1RJT05fR1JPVVBdKS50b0NvbnRhaW4oXG4gICAgICAgIFwiL2ZlZWQvKC4uKXBob3RvL1tpZF0ucnNjXCIsXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJmb2xsb3dzIHRoZSBpbnRlcmNlcHRlZCByb3V0ZSBpbnRvIGl0cyBncm91cFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJwaG90b3NcIiwgcm91dGVzOiBbXCIvcGhvdG8vKipcIl0gfV0sXG4gICAgICAgIHBob3RvQXBwKCksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkLnBob3RvcykudG9FcXVhbChbXG4gICAgICAgIFwiL2ZlZWQvKC4uKXBob3RvL1tpZF1cIixcbiAgICAgICAgXCIvZmVlZC8oLi4pcGhvdG8vW2lkXS5yc2NcIixcbiAgICAgICAgXCIvcGhvdG8vW2lkXVwiLFxuICAgICAgXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInRocm93cyB3aGVuIHRoZSBpbnRlcmNlcHRlZCBVUkwgc3BhY2UgaXMgc3BsaXQgYmV0d2VlbiBncm91cHNcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcIm9uZVwiLCByb3V0ZXM6IFtcIi9waG90by8xXCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC4uLnBob3RvQXBwKCksXG4gICAgICAgICAgICB7IHRlbXBsYXRlOiBcIi9waG90by8xXCIsIGVudHJ5cG9pbnRJZDogXCJhcHAvcGhvdG8vMS9wYWdlLmpzXCIgfSxcbiAgICAgICAgICBdLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvaW50ZXJjZXB0aW9uIHJvdXRlIFwiXFwvZmVlZFxcL1xcKFxcLlxcLlxcKXBob3RvXFwvXFxbaWRcXF1cIi4qZ3JvdXAgXCJvbmVcIidzIHBhdHRlcm4gXCJcXC9waG90b1xcLzFcIiBjbGFpbXMgcGFydCBvZiBpdC9zLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0LmVhY2goW1xuICAgICAgW1wiL2ZlZWQvKC4uKXBob3RvL1tpZF1cIiwgXCIvcGhvdG8vW2lkXVwiXSxcbiAgICAgIFtcIi9mZWVkLyguKXBob3RvL1tpZF1cIiwgXCIvZmVlZC9waG90by9baWRdXCJdLFxuICAgICAgW1wiLyguKXBob3RvL1tpZF1cIiwgXCIvcGhvdG8vW2lkXVwiXSxcbiAgICAgIFtcIi9hL2IvKC4uKSguLilwaG90b1wiLCBcIi9waG90b1wiXSxcbiAgICAgIFtcIi9hL2IvKC4uLilwaG90b1wiLCBcIi9waG90b1wiXSxcbiAgICAgIFtcIi9waG90by9baWRdXCIsIHVuZGVmaW5lZF0sXG4gICAgXSkoXCJyZXNvbHZlcyAlcCB0byB0aGUgcm91dGUgaXQgaW50ZXJjZXB0cywgJXBcIiwgKHBhdGgsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBleHBlY3QoaW50ZXJjZXB0ZWRSb3V0ZShwYXRoKSkudG9CZShleHBlY3RlZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwibmV4dC5jb25maWcgcmV3cml0ZXMgKEQpXCIsICgpID0+IHtcbiAgICBpdChcInJlamVjdHMgYSByZXdyaXRlIHdob3NlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbGFuZCBpbiBkaWZmZXJlbnQgZ3JvdXBzXCIsICgpID0+IHtcbiAgICAgIC8vIGFwcC1wbGF5Z3JvdW5kIHJld3JpdGVzIGAvZTJlL3Jld3JpdGUvOnBhdGgoLiopYCB0byBgL2UyZS9yZXdyaXRlL2VjaG9gLlxuICAgICAgLy8gR3JvdXBpbmcgb25seSB0aGUgZGVzdGluYXRpb24gbGVhdmVzIHRoZSBzb3VyY2Ugb24gdGhlIGRlZmF1bHRcbiAgICAgIC8vIGZ1bmN0aW9uLCB3aGljaCB0aGVuIHJld3JpdGVzIHRvIGEgZmlsZSBpdCBkb2VzIG5vdCBoYXZlLlxuICAgICAgY29uc3QgeyBlbnRyaWVzLCBvcHRpb25zIH0gPSBmaXh0dXJlUm91dGVzKGFwcFBsYXlncm91bmQpO1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnblJvdXRlc1RvR3JvdXBzKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZWNob1wiLCByb3V0ZXM6IFtcIi9lMmUvcmV3cml0ZS9lY2hvXCJdIH1dLFxuICAgICAgICAgIGVudHJpZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdyhcbiAgICAgICAgL3Jld3JpdGUgZnJvbSBcIlxcL2UyZVxcL3Jld3JpdGVcXC86cGF0aFxcKFxcLlxcKlxcKVwiIHRvIFwiXFwvZTJlXFwvcmV3cml0ZVxcL2VjaG9cXD8uKlwiIGNyb3NzZXMgZ3JvdXBzOiBDbG91ZEZyb250IHNlbmRzIFwiXFwvZTJlXFwvcmV3cml0ZVxcL1xcW3BhdGhcXF1cIiB0byB0aGUgXCJkZWZhdWx0XCIgZ3JvdXAsIGFuZCBOZXh0XFwuanMgdGhlbiBzZXJ2ZXMgaXQgd2l0aCBcIi4qZWNob1xcL3BhZ2VcXC5qc1wiLCB3aGljaCBpcyBwYWNrYWdlZCBpbnRvIGdyb3VwIFwiZWNob1wiLyxcbiAgICAgICk7XG4gICAgICAvLyBCb3RoIGVuZHMgaW4gb25lIGdyb3VwIGlzIGZpbmUuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGFzc2lnblJvdXRlc1RvR3JvdXBzKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZTJlXCIsIHJvdXRlczogW1wiL2UyZS9yZXdyaXRlLyoqXCJdIH1dLFxuICAgICAgICAgIGVudHJpZXMsXG4gICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgKS50ZW1wbGF0ZXMuZTJlLFxuICAgICAgKS50b0NvbnRhaW4oXCIvZTJlL3Jld3JpdGUvZWNob1wiKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVzb2x2ZXMgYSBkZXN0aW5hdGlvbiB0aHJvdWdoIE5leHQuanMncyBkeW5hbWljIHJvdXRlIHJ1bGVzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHJvdXRpbmcgPSB7XG4gICAgICAgIGJlZm9yZUZpbGVzOiBbeyBzb3VyY2U6IFwiL29sZFwiLCBkZXN0aW5hdGlvbjogXCIvYmxvZy9oZWxsb1wiIH1dLFxuICAgICAgICBkeW5hbWljUm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlUmVnZXg6IFwiXi9ibG9nLyhbXi9dKz8pKD86Lyk/JFwiLFxuICAgICAgICAgICAgZGVzdGluYXRpb246IFwiL2Jsb2cvW3NsdWddXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9ibG9nL1tzbHVnXVwiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJvdXRpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdygvQ2xvdWRGcm9udCBzZW5kcyBcIlxcL29sZFwiIHRvIHRoZSBcImRlZmF1bHRcIiBncm91cC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZXNvbHZlcyBhIGRlc3RpbmF0aW9uIHRocm91Z2ggYSBydWxlIGZvciBhIHJ1biBvZiBmYWxsYmFjayBzaGVsbHNcIiwgKCkgPT4ge1xuICAgICAgLy8gbmV4dCAxNi40J3MgYGNvbGxhcHNlQWRhcHRlclJvdXRlc2AgZm9sZHMgYC9lbi9bc2x1Z11gIGFuZFxuICAgICAgLy8gYC9mci9bc2x1Z11gIGludG8gb25lIHJ1bGUsIHdpdGggdGhlIG1hdGNoZWQgcHJlZml4IGFzIGAkMWAuXG4gICAgICBjb25zdCByb3V0aW5nID0ge1xuICAgICAgICBiZWZvcmVGaWxlczogW3sgc291cmNlOiBcIi9vbGRcIiwgZGVzdGluYXRpb246IFwiL2VuL2hlbGxvXCIgfV0sXG4gICAgICAgIGR5bmFtaWNSb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VSZWdleDogXCJeLyhlbnxmcikvKD88bnh0UHNsdWc+W14vXSs/KSg/Oi8pPyRcIixcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiBcIi8kMS9bc2x1Z10/bnh0UHNsdWc9JG54dFBzbHVnXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZW5cIiwgcm91dGVzOiBbXCIvZW4vKipcIl0gfV0sXG4gICAgICAgICAgcm91dGVzKFwiL2VuL1tzbHVnXVwiLCBcIi9mci9bc2x1Z11cIiksXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgICB7IHJvdXRpbmcgfSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdygvQ2xvdWRGcm9udCBzZW5kcyBcIlxcL29sZFwiIHRvIHRoZSBcImRlZmF1bHRcIiBncm91cC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJwYXNzZXMgb3ZlciBhIHJ1bGUgd2hvc2UgZmlsbGVkLWluIGRlc3RpbmF0aW9uIG5hbWVzIG5vIGZpbGVcIiwgKCkgPT4ge1xuICAgICAgLy8gTWF0Y2hlZCBjYXNlLWluc2Vuc2l0aXZlbHksIHRoZSBjb2xsYXBzZWQgcnVsZSBmaWxscyBpbiBgL0VOL1tzbHVnXWAsXG4gICAgICAvLyB3aGljaCBubyBmaWxlIGlzOyBgcmVzb2x2ZVJvdXRlc2AgZ29lcyBvbiB0byB0aGUgbmV4dCBydWxlLlxuICAgICAgY29uc3Qgcm91dGluZyA9IHtcbiAgICAgICAgYmVmb3JlRmlsZXM6IFt7IHNvdXJjZTogXCIvb2xkXCIsIGRlc3RpbmF0aW9uOiBcIi9FTi9oZWxsb1wiIH1dLFxuICAgICAgICBkeW5hbWljUm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlUmVnZXg6IFwiXi8oZW58ZnIpLyg/PG54dFBzbHVnPlteL10rPykoPzovKT8kXCIsXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogXCIvJDEvW3NsdWddP254dFBzbHVnPSRueHRQc2x1Z1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlUmVnZXg6IFwiXi9lbi8oPzxueHRQc2x1Zz5bXi9dKz8pKD86Lyk/JFwiLFxuICAgICAgICAgICAgZGVzdGluYXRpb246IFwiL2VuL1tzbHVnXT9ueHRQc2x1Zz0kbnh0UHNsdWdcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJlblwiLCByb3V0ZXM6IFtcIi9lbi8qKlwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvZW4vW3NsdWddXCIsIFwiL2ZyL1tzbHVnXVwiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIHsgcm91dGluZyB9LFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9DbG91ZEZyb250IHNlbmRzIFwiXFwvb2xkXCIgdG8gdGhlIFwiZGVmYXVsdFwiIGdyb3VwLyk7XG4gICAgfSk7XG5cbiAgICBpdChcInNraXBzIGFuIGFmdGVyRmlsZXMgc291cmNlIGEgcm91dGUgYWxyZWFkeSBzZXJ2ZXMsIGFuZCBwYXJhbWV0ZXJpemVkIGRlc3RpbmF0aW9uc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0aW5nID0ge1xuICAgICAgICAvLyBOZXZlciBhcHBsaWVkOiBgL3ByaWNpbmdgIGlzIGEgcm91dGUsIGFuZCBhZnRlckZpbGVzIHlpZWxkcyB0byBpdC5cbiAgICAgICAgYWZ0ZXJGaWxlczogW3sgc291cmNlOiBcIi9wcmljaW5nXCIsIGRlc3RpbmF0aW9uOiBcIi9ibG9nL3hcIiB9XSxcbiAgICAgICAgLy8gTm90IHJlc29sdmFibGUgYXQgc3ludGguXG4gICAgICAgIGJlZm9yZUZpbGVzOiBbeyBzb3VyY2U6IFwiL2IvOnNsdWdcIiwgZGVzdGluYXRpb246IFwiL2Jsb2cvOnNsdWdcIiB9XSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9ibG9nL3hcIiwgXCIvcHJpY2luZ1wiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIHsgcm91dGluZyB9LFxuICAgICAgICApLFxuICAgICAgKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjaGVja3MgdGhlIHBhdGggYW4gb3B0aW9uYWwgcGFyYW1ldGVyIGxlYXZlc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCByb3V0aW5nID0ge1xuICAgICAgICBiZWZvcmVGaWxlczogW3sgc291cmNlOiBcIi9kb2NzLzpwYXRoKlwiLCBkZXN0aW5hdGlvbjogXCIvZG9jcy1hcHBcIiB9XSxcbiAgICAgIH07XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCIsIFwiL2RvY3MtYXBwXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9kb2NzLWFwcFwiLCBcIi9kb2NzL1twYWdlXVwiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIHsgcm91dGluZyB9LFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9DbG91ZEZyb250IHNlbmRzIFwiXFwvZG9jc1wiIHRvIHRoZSBcImRlZmF1bHRcIiBncm91cC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImEgZHluYW1pYyByb3V0ZSdzIFVSTCBzcGFjZSAoRSlcIiwgKCkgPT4ge1xuICAgIGl0KFwicmVqZWN0cyBhIHN1YnRyZWUgY2FwdHVyaW5nIFVSTHMgYSBkZWZhdWx0LWdyb3VwIGNhdGNoLWFsbCBzZXJ2ZXNcIiwgKCkgPT4ge1xuICAgICAgLy8gYC9ibG9nL1tzbHVnXWAgb25seSBtYXRjaGVzIG9uZSBzZWdtZW50LCBzbyBgL2Jsb2cvYS9iYCByZWFjaGVzIHRoZVxuICAgICAgLy8gYmxvZyBmdW5jdGlvbiB2aWEgYGJsb2cvKmAgYW5kIHJlc29sdmVzIHRoZXJlIHRvIGAvWy4uLnNsdWddYCwgd2hpY2hcbiAgICAgIC8vIHRoZSBibG9nIHppcCBsYWNrcy4gVGhlIHRlbXBsYXRlIHRleHQgaXRzZWxmIG5ldmVyIG1hdGNoZWQgYGJsb2cvKmAuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9cIiwgXCIvWy4uLnNsdWddXCIsIFwiL2Jsb2cvW3NsdWddXCIpLFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KFxuICAgICAgICAvXCJcXC9cXFtcXC5cXC5cXC5zbHVnXFxdXCIgaXMgcGFja2FnZWQgaW50byB0aGUgXCJkZWZhdWx0XCIgZ3JvdXAsIGJ1dCBDbG91ZEZyb250IHdvdWxkIHNlbmQgXCJcXC9ibG9nXFwvX1xcL19cIiB0byBncm91cCBcImJsb2dcIiBcXChpdHMgcGF0dGVybiBcIlxcL2Jsb2dcXC9cXCpcXCpcIlxcKS4qZHluYW1pYyByb3V0ZSBcIlxcL1xcW1xcLlxcLlxcLnNsdWdcXF1cIi9zLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIHVuZGVyIGEgYmFzZVBhdGggdG9vXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICAgICAgcm91dGVzKFwiL2Jhc2VcIiwgXCIvYmFzZS9bLi4uc2x1Z11cIiwgXCIvYmFzZS9ibG9nL1tzbHVnXVwiKSxcbiAgICAgICAgICBcIi9iYXNlXCIsXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coL0Nsb3VkRnJvbnQgd291bGQgc2VuZCBcIlxcL2Jhc2VcXC9ibG9nXFwvX1xcL19cIiB0byBncm91cCBcImJsb2dcIi8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJhY2NlcHRzIHRoZSBjYXB0dXJlIHdoZW4gdGhlIGdyb3VwJ3Mgb3duIHJvdXRlcyBzaGFkb3cgZXZlcnkgVVJMIG9mIGl0XCIsICgpID0+IHtcbiAgICAgIC8vIEEgbW9yZSBzcGVjaWZpYyByb3V0ZSBpbiB0aGUgY2FwdHVyaW5nIGdyb3VwIHdpbnMgaW5zaWRlIE5leHQuanMsIHNvXG4gICAgICAvLyB3aXRoIGAvYmxvZy9bLi4ucmVzdF1gIHRoZXJlIG5vdGhpbmcgdW5kZXIgYC9ibG9nL2AgcmVzb2x2ZXMgdG8gdGhlXG4gICAgICAvLyByb290IGNhdGNoLWFsbC5cbiAgICAgIGNvbnN0IGFzc2lnbmVkID0gYXNzaWduKFxuICAgICAgICBbeyBuYW1lOiBcImJsb2dcIiwgcm91dGVzOiBbXCIvYmxvZy8qKlwiXSB9XSxcbiAgICAgICAgcm91dGVzKFwiL1wiLCBcIi9bLi4uc2x1Z11cIiwgXCIvYmxvZy9bc2x1Z11cIiwgXCIvYmxvZy9bLi4ucmVzdF1cIiksXG4gICAgICApO1xuICAgICAgZXhwZWN0KGFzc2lnbmVkW0RFRkFVTFRfRlVOQ1RJT05fR1JPVVBdKS50b0VxdWFsKFtcIi9cIiwgXCIvWy4uLnNsdWddXCJdKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC5ibG9nKS50b0VxdWFsKFtcIi9ibG9nL1suLi5yZXN0XVwiLCBcIi9ibG9nL1tzbHVnXVwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcImFjY2VwdHMgYSBzaW5nbGUtc2VnbWVudCByb290IHBhcmFtLCB3aGljaCBuZXZlciByZWFjaGVzIHVuZGVyIGEgc3VidHJlZVwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICAgIHJvdXRlcyhcIi9cIiwgXCIvW3NsdWddXCIsIFwiL2Jsb2cvW3NsdWddXCIpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZFtERUZBVUxUX0ZVTkNUSU9OX0dST1VQXSkudG9FcXVhbChbXCIvXCIsIFwiL1tzbHVnXVwiXSk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlamVjdHMgdGhlIHRyYWlsaW5nU2xhc2ggZm9ybSBvZiBhIHN1YnRyZWUncyBiYXNlIHRoYXQgYSByb290IHBhcmFtIHNlcnZlc1wiLCAoKSA9PiB7XG4gICAgICAvLyBgL2Jsb2cvYCBtYXRjaGVzIGBibG9nLypgLCBhbmQgd2l0aCBubyBgL2Jsb2dgIHBhZ2UgTmV4dC5qcyBzZXJ2ZXMgaXRcbiAgICAgIC8vIHdpdGggYC9bc2x1Z11gLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImJsb2dcIiwgcm91dGVzOiBbXCIvYmxvZy8qKlwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvXCIsIFwiL1tzbHVnXVwiLCBcIi9ibG9nL1tzbHVnXVwiKSxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICAgIHsgdHJhaWxpbmdTbGFzaDogdHJ1ZSB9LFxuICAgICAgICApLFxuICAgICAgKS50b1Rocm93KC9DbG91ZEZyb250IHdvdWxkIHNlbmQgXCJcXC9ibG9nXFwvXCIgdG8gZ3JvdXAgXCJibG9nXCIvKTtcbiAgICB9KTtcblxuICAgIGl0KFwibGV0cyBhIHN0YXRpYyBmaXJzdCBzZWdtZW50IGluIHRoZSBncm91cCBvdXRyYW5rIGEgcGFyYW0gaW4gYSBsYXRlciBvbmVcIiwgKCkgPT4ge1xuICAgICAgLy8gYC9ibG9nL3NldHRpbmdzYCByZWFjaGVzIHRoZSBibG9nIGZ1bmN0aW9uOyBgL2Jsb2cvW3NsdWddYCBiZWF0c1xuICAgICAgLy8gYC9bdGVhbV0vc2V0dGluZ3NgIHRoZXJlLCBzdGF0aWMgZmlyc3Qgc2VnbWVudCBiZWZvcmUgZHluYW1pYy5cbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJibG9nXCIsIHJvdXRlczogW1wiL2Jsb2cvKipcIl0gfV0sXG4gICAgICAgICAgcm91dGVzKFwiL1wiLCBcIi9bdGVhbV0vc2V0dGluZ3NcIiwgXCIvYmxvZy9bc2x1Z11cIiksXG4gICAgICAgICksXG4gICAgICApLm5vdC50b1Rocm93KCk7XG4gICAgICAvLyBXaXRob3V0IGl0LCBgL1t0ZWFtXS9zZXR0aW5nc2AgaXMgd2hhdCBOZXh0LmpzIHJlc29sdmVzIGl0IHRvLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImJsb2dcIiwgcm91dGVzOiBbXCIvYmxvZy8qKlwiXSB9XSxcbiAgICAgICAgICByb3V0ZXMoXCIvXCIsIFwiL1t0ZWFtXS9zZXR0aW5nc1wiLCBcIi9ibG9nL3hcIiksXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coL1wiXFwvYmxvZ1xcL3NldHRpbmdzXCIgdG8gZ3JvdXAgXCJibG9nXCIvKTtcbiAgICB9KTtcblxuICAgIGl0KFwiY2hlY2tzIGEgcm9vdCBvcHRpb25hbCBjYXRjaC1hbGwgYWdhaW5zdCBzdWJ0cmVlIGFuZCBleGFjdCBwYXR0ZXJuc1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9bWy4uLnNsdWddXVwiLCBcIi9kb2NzL1twYWdlXVwiKSxcbiAgICAgICAgKSxcbiAgICAgICkudG9UaHJvdygvXCJcXC9kb2NzXFwvX1xcL19cIiB0byBncm91cCBcImRvY3NcIi8pO1xuICAgICAgLy8gQW4gZXhhY3QgcGF0dGVybiBvd25zIGEgc3RhdGljIHJvdXRlLCB3aGljaCBOZXh0LmpzIHByZWZlcnMuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbeyBuYW1lOiBcImFib3V0XCIsIHJvdXRlczogW1wiL2Fib3V0XCJdIH1dLFxuICAgICAgICAgIHJvdXRlcyhcIi9bWy4uLnNsdWddXVwiLCBcIi9hYm91dFwiKSxcbiAgICAgICAgKS5hYm91dCxcbiAgICAgICkudG9FcXVhbChbXCIvYWJvdXRcIl0pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjaGVja3MgYSBncm91cGVkIGNhdGNoLWFsbCBhZ2FpbnN0IGEgbmFycm93ZXIgZ3JvdXAncyBzdWJ0cmVlXCIsICgpID0+IHtcbiAgICAgIC8vIGAvYXBpL3JlcG9ydHMvMS8yYCByZWFjaGVzIHRoZSByZXBvcnRzIGZ1bmN0aW9uLCB3aGljaCBvbmx5IGhhc1xuICAgICAgLy8gYC9hcGkvcmVwb3J0cy9baWRdYDsgTmV4dC5qcyByZXNvbHZlcyBpdCB0byBgL2FwaS9bLi4ucmVzdF1gLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGFzc2lnbihcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcInJlcG9ydHNcIiwgcm91dGVzOiBbXCIvYXBpL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJvdXRlcyhcIi9hcGkvWy4uLnJlc3RdXCIsIFwiL2FwaS9yZXBvcnRzL1tpZF1cIiksXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coXG4gICAgICAgIC9cIlxcL2FwaVxcL1xcW1xcLlxcLlxcLnJlc3RcXF1cIiBpcyBwYWNrYWdlZCBpbnRvIGdyb3VwIFwiYXBpXCIsIGJ1dCBDbG91ZEZyb250IHdvdWxkIHNlbmQgXCJcXC9hcGlcXC9yZXBvcnRzXFwvX1xcL19cIiB0byBncm91cCBcInJlcG9ydHNcIi8sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJjaGVja3MgYSBQYWdlcyBSb3V0ZXIgY2F0Y2gtYWxsJ3MgZGF0YSBVUkxzXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2UgPSAodGVtcGxhdGU6IHN0cmluZywgZmlsZTogc3RyaW5nKTogUm91dGVFbnRyeVtdID0+IFtcbiAgICAgICAgeyB0ZW1wbGF0ZSwgZW50cnlwb2ludElkOiBmaWxlLCB0eXBlOiBcInBhZ2VcIiB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGVtcGxhdGU6IGAvX25leHQvZGF0YS8ke0JVSUxEX0lEfSR7dGVtcGxhdGV9Lmpzb25gLFxuICAgICAgICAgIGVudHJ5cG9pbnRJZDogZmlsZSxcbiAgICAgICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgYXNzaWduKFxuICAgICAgICAgIFt7IG5hbWU6IFwiYmxvZ1wiLCByb3V0ZXM6IFtcIi9ibG9nLyoqXCJdIH1dLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIC4uLnBhZ2UoXCIvWy4uLnNsdWddXCIsIFwicGFnZXMvWy4uLnNsdWddLmpzXCIpLFxuICAgICAgICAgICAgLi4ucGFnZShcIi9ibG9nL1tzbHVnXVwiLCBcInBhZ2VzL2Jsb2cvW3NsdWddLmpzXCIpLFxuICAgICAgICAgIF0sXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coL1wiXFwvX25leHRcXC9kYXRhXFwvYWJjMTIzXFwvYmxvZ1xcL19cXC9fXFwuanNvblwiIHRvIGdyb3VwIFwiYmxvZ1wiLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKFwiL2luZGV4IChHKVwiLCAoKSA9PiB7XG4gICAgaXQoXCJncm91cHMgYW4gQXBwIFJvdXRlciAvaW5kZXgsIGEgcm91dGUgb2YgaXRzIG93blwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBhc3NpZ25lZCA9IGFzc2lnbihcbiAgICAgICAgW3sgbmFtZTogXCJpZHhcIiwgcm91dGVzOiBbXCIvaW5kZXhcIl0gfV0sXG4gICAgICAgIFtcbiAgICAgICAgICB7IHRlbXBsYXRlOiBcIi9cIiwgZW50cnlwb2ludElkOiBcImFwcC9wYWdlLmpzXCIsIHR5cGU6IFwiYXBwLXBhZ2VcIiB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRlbXBsYXRlOiBcIi9pbmRleC5yc2NcIixcbiAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJhcHAvcGFnZS5qc1wiLFxuICAgICAgICAgICAgdHlwZTogXCJhcHAtcGFnZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGVtcGxhdGU6IFwiL2luZGV4XCIsXG4gICAgICAgICAgICBlbnRyeXBvaW50SWQ6IFwiYXBwL2luZGV4L3BhZ2UuanNcIixcbiAgICAgICAgICAgIHR5cGU6IFwiYXBwLXBhZ2VcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChhc3NpZ25lZC5pZHgpLnRvRXF1YWwoW1wiL2luZGV4XCJdKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyB0aGUgUGFnZXMgUm91dGVyIGhvbWUgcGFnZSwgd2hpY2ggaXMgYWxzbyAvXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICBhc3NpZ24oXG4gICAgICAgICAgW3sgbmFtZTogXCJpZHhcIiwgcm91dGVzOiBbXCIvaW5kZXhcIl0gfV0sXG4gICAgICAgICAgW1wiL1wiLCBcIi9pbmRleFwiLCBgL19uZXh0L2RhdGEvJHtCVUlMRF9JRH0vaW5kZXguanNvbmBdLm1hcChcbiAgICAgICAgICAgICh0ZW1wbGF0ZSkgPT4gKHtcbiAgICAgICAgICAgICAgdGVtcGxhdGUsXG4gICAgICAgICAgICAgIGVudHJ5cG9pbnRJZDogXCJwYWdlcy9pbmRleC5qc1wiLFxuICAgICAgICAgICAgICB0eXBlOiBcInBhZ2VcIixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgICApLnRvVGhyb3coL1wiXFwvXCIgY2Fubm90IGJlIHJvdXRlZCB0byBhbnkgZ3JvdXAuKlwiXFwvaW5kZXhcIjogb25lIGZpbGUvcyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicm91dGVkUGF0dGVybnNcIiwgKCkgPT4ge1xuICBpdChcImFkZHMgbm90aGluZyBmb3IgYSBncm91cCB3aXRob3V0IGFuIG9wdGlvbmFsIGNhdGNoLWFsbCBhdCBhIHN1YnRyZWUncyBiYXNlXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByb3V0ZWRQYXR0ZXJucyhcbiAgICAgICAgW1wiL2Jsb2cvKipcIiwgXCIvcHJpY2luZ1wiXSxcbiAgICAgICAgW1wiL2Jsb2cvW3NsdWddXCIsIFwiL2Jsb2cveC9bWy4uLnJlc3RdXVwiLCBcIi9wcmljaW5nXCJdLFxuICAgICAgICBcIlwiLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW1wiL2Jsb2cvKipcIiwgXCIvcHJpY2luZ1wiXSk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgcmVwZWF0IGEgcGFyZW50IHRoZSBncm91cCBhbHJlYWR5IGRlY2xhcmVzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByb3V0ZWRQYXR0ZXJucyhbXCIvc2hvcC8qKlwiLCBcIi9zaG9wXCJdLCBbXCIvc2hvcC9bWy4uLnNsdWddXVwiXSwgXCJcIiksXG4gICAgKS50b0VxdWFsKFtcIi9zaG9wLyoqXCIsIFwiL3Nob3BcIl0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInBhdGhQYXR0ZXJuc0ZvclwiLCAoKSA9PiB7XG4gIGl0KFwiZHJvcHMgdGhlIGxlYWRpbmcgc2xhc2gsIGJlY2F1c2UgdGhlIGRpc3RyaWJ1dGlvbiBhZGRzIGJhc2VQYXRoIGl0c2VsZlwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHBhdGhQYXR0ZXJuc0ZvcihcIi9wcmljaW5nXCIsIHsgaGFzRGF0YVJvdXRlczogZmFsc2UgfSkpLnRvRXF1YWwoW1xuICAgICAgXCJwcmljaW5nXCIsXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwidHVybnMgYSBzdWJ0cmVlIGludG8gYSBzaW5nbGUgdHJhaWxpbmcgd2lsZGNhcmRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIHBhdGhQYXR0ZXJuc0ZvcihcIi9hcGkvcmVwb3J0cy8qKlwiLCB7IGhhc0RhdGFSb3V0ZXM6IGZhbHNlIH0pLFxuICAgICkudG9FcXVhbChbXCJhcGkvcmVwb3J0cy8qXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJhZGRzIHRoZSBgX25leHQvZGF0YWAgVVJMIHNwYWNlIGZvciBQYWdlcyBSb3V0ZXIgZ3JvdXBzLCBvbiB0aGUgbGl0ZXJhbCBidWlsZCBJRFwiLCAoKSA9PiB7XG4gICAgLy8gQSBgKmAgZm9yIHRoZSBidWlsZCBJRCBhbHNvIG1hdGNoZXMgYC9gLCBzbyBgX25leHQvZGF0YS8qL2Jsb2cvKmAgY2xhaW1lZFxuICAgIC8vIGAvX25leHQvZGF0YS88aWQ+L2RvY3MvYmxvZy94Lmpzb25gLCBhIHBhZ2Ugb2YgYW5vdGhlciBncm91cC5cbiAgICBjb25zdCBvcHRpb25zID0geyBoYXNEYXRhUm91dGVzOiB0cnVlLCBidWlsZElkOiBCVUlMRF9JRCB9O1xuICAgIGV4cGVjdChwYXRoUGF0dGVybnNGb3IoXCIvYmxvZy8qKlwiLCBvcHRpb25zKSkudG9FcXVhbChbXG4gICAgICBcImJsb2cvKlwiLFxuICAgICAgXCJfbmV4dC9kYXRhL2FiYzEyMy9ibG9nLypcIixcbiAgICBdKTtcbiAgICBleHBlY3QocGF0aFBhdHRlcm5zRm9yKFwiL3ByaWNpbmdcIiwgb3B0aW9ucykpLnRvRXF1YWwoW1xuICAgICAgXCJwcmljaW5nXCIsXG4gICAgICBcIl9uZXh0L2RhdGEvYWJjMTIzL3ByaWNpbmcuanNvblwiLFxuICAgIF0pO1xuICB9KTtcblxuICBpdChcInJlZnVzZXMgdG8gcm91dGUgZGF0YSBVUkxzIHdpdGhvdXQgdGhlIGJ1aWxkIElEXCIsICgpID0+IHtcbiAgICBleHBlY3QoKCkgPT4gcGF0aFBhdHRlcm5zRm9yKFwiL2Jsb2cvKipcIiwgeyBoYXNEYXRhUm91dGVzOiB0cnVlIH0pKS50b1Rocm93KFxuICAgICAgL25lZWRzIGl0cyBidWlsZCBJRC8sXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWZ1c2VzIGEgYnVpbGQgSUQgYSBwYXRoIHBhdHRlcm4gY2Fubm90IGhvbGRcIiwgKCkgPT4ge1xuICAgIC8vIGBnZW5lcmF0ZUJ1aWxkSWRgIGNhbiByZXR1cm4gYW55dGhpbmcuXG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBwYXRoUGF0dGVybnNGb3IoXCIvYmxvZy8qKlwiLCB7IGhhc0RhdGFSb3V0ZXM6IHRydWUsIGJ1aWxkSWQ6IFwidjEvMiAzXCIgfSksXG4gICAgKS50b1Rocm93KC9UaGUgYnVpbGQgSUQgXCJ2MVxcLzIgM1wiIGNvbnRhaW5zIFwiXFwvXCIsIFwiIFwiLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyB0aGUgdHJhaWxpbmctc2xhc2ggZm9ybSBmb3IgYSB0cmFpbGluZ1NsYXNoIGFwcFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gV2l0aCBgdHJhaWxpbmdTbGFzaDogdHJ1ZWAgdGhlIGNhbm9uaWNhbCBVUkwgaXMgYC9wcmljaW5nL2AsIGFuZCB0aGF0IGlzXG4gICAgLy8gd2hhdCBldmVyeSBsaW5rIGluIHRoZSBhcHAgcG9pbnRzIGF0LiBBIGJlaGF2aW9yIG9uIGBwcmljaW5nYCBhbG9uZSBkb2VzXG4gICAgLy8gbm90IG1hdGNoIGl0LCBzbyB0aGUgcmVxdWVzdCBmZWxsIHRocm91Z2ggdG8gdGhlIGRlZmF1bHQgZnVuY3Rpb24gLSB3aGljaFxuICAgIC8vIGRvZXMgbm90IGhhdmUgdGhlIHJvdXRlIHBhY2thZ2VkLlxuICAgIGV4cGVjdChwYXRoUGF0dGVybnNGb3IoXCIvcHJpY2luZ1wiLCB7IGhhc0RhdGFSb3V0ZXM6IGZhbHNlIH0pKS50b0VxdWFsKFtcbiAgICAgIFwicHJpY2luZ1wiLFxuICAgIF0pO1xuICAgIGV4cGVjdChcbiAgICAgIHBhdGhQYXR0ZXJuc0ZvcihcIi9wcmljaW5nXCIsIHtcbiAgICAgICAgaGFzRGF0YVJvdXRlczogZmFsc2UsXG4gICAgICAgIHRyYWlsaW5nU2xhc2g6IHRydWUsXG4gICAgICB9KSxcbiAgICApLnRvRXF1YWwoW1wicHJpY2luZ1wiLCBcInByaWNpbmcvXCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSBzdWJ0cmVlIHBhdHRlcm4gYWxvbmUsIHdoaWNoIGFscmVhZHkgbWF0Y2hlcyBib3RoIGZvcm1zXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBwYXRoUGF0dGVybnNGb3IoXCIvYXBpL3JlcG9ydHMvKipcIiwge1xuICAgICAgICBoYXNEYXRhUm91dGVzOiBmYWxzZSxcbiAgICAgICAgdHJhaWxpbmdTbGFzaDogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICkudG9FcXVhbChbXCJhcGkvcmVwb3J0cy8qXCJdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYXJzZUZ1bmN0aW9uR3JvdXBzRW52XCIsICgpID0+IHtcbiAgaXQoXCJyZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHVuc2V0XCIsICgpID0+IHtcbiAgICBleHBlY3QocGFyc2VGdW5jdGlvbkdyb3Vwc0Vudih1bmRlZmluZWQpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -1,3 +1,4 @@
1
+ import type { CacheControl } from "next/dist/server/lib/cache-control";
1
2
  import { CacheHandlerValue } from "next/dist/server/lib/incremental-cache";
2
3
  import { IncrementalCacheValue } from "next/dist/server/response-cache";
3
4
  /**
@@ -74,8 +75,11 @@ export declare class MemoryCacheHandler {
74
75
  * `Date.now()` drifts from it for as long as the process lives: an entry
75
76
  * stamped ahead of it looked newer than a `revalidateTag` run within the
76
77
  * drift, and was served for the whole memory TTL.
78
+ *
79
+ * `cacheControl` is the lifetime the entry was rendered with, handed back
80
+ * from {@link get} as the S3 layer does; see `getCacheControl`.
77
81
  */
78
- set(cacheKey: string, data: IncrementalCacheValue | null, lastModified?: number): Promise<void>;
82
+ set(cacheKey: string, data: IncrementalCacheValue | null, lastModified?: number, cacheControl?: CacheControl): Promise<void>;
79
83
  /**
80
84
  * Remove all expired cache entries
81
85
  */