israeli-bank-scrapers 6.1.1 → 6.1.3

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 (81) hide show
  1. package/lib/assertNever.js +7 -5
  2. package/lib/constants.js +16 -13
  3. package/lib/definitions.js +113 -109
  4. package/lib/helpers/browser.js +13 -9
  5. package/lib/helpers/dates.js +19 -18
  6. package/lib/helpers/debug.js +9 -9
  7. package/lib/helpers/elements-interactions.js +82 -78
  8. package/lib/helpers/fetch.js +85 -82
  9. package/lib/helpers/navigation.js +28 -24
  10. package/lib/helpers/storage.js +11 -10
  11. package/lib/helpers/transactions.js +32 -33
  12. package/lib/helpers/waiting.js +42 -45
  13. package/lib/index.js +82 -15
  14. package/lib/scrapers/amex.js +13 -11
  15. package/lib/scrapers/amex.test.d.ts +1 -0
  16. package/lib/scrapers/amex.test.js +49 -0
  17. package/lib/scrapers/base-beinleumi-group.d.ts +32 -0
  18. package/lib/scrapers/base-beinleumi-group.js +350 -234
  19. package/lib/scrapers/base-isracard-amex.js +273 -273
  20. package/lib/scrapers/base-scraper-with-browser.js +263 -241
  21. package/lib/scrapers/base-scraper-with-browser.test.d.ts +1 -0
  22. package/lib/scrapers/base-scraper-with-browser.test.js +53 -0
  23. package/lib/scrapers/base-scraper.js +82 -82
  24. package/lib/scrapers/behatsdaa.js +103 -98
  25. package/lib/scrapers/behatsdaa.test.d.ts +1 -0
  26. package/lib/scrapers/behatsdaa.test.js +46 -0
  27. package/lib/scrapers/beinleumi.js +13 -11
  28. package/lib/scrapers/beinleumi.test.d.ts +1 -0
  29. package/lib/scrapers/beinleumi.test.js +47 -0
  30. package/lib/scrapers/beyahad-bishvilha.js +132 -132
  31. package/lib/scrapers/beyahad-bishvilha.test.d.ts +1 -0
  32. package/lib/scrapers/beyahad-bishvilha.test.js +47 -0
  33. package/lib/scrapers/discount.js +101 -97
  34. package/lib/scrapers/discount.test.d.ts +1 -0
  35. package/lib/scrapers/discount.test.js +49 -0
  36. package/lib/scrapers/errors.js +25 -22
  37. package/lib/scrapers/factory.js +67 -66
  38. package/lib/scrapers/factory.test.d.ts +1 -0
  39. package/lib/scrapers/factory.test.js +19 -0
  40. package/lib/scrapers/hapoalim.js +175 -162
  41. package/lib/scrapers/hapoalim.test.d.ts +1 -0
  42. package/lib/scrapers/hapoalim.test.js +47 -0
  43. package/lib/scrapers/interface.js +5 -2
  44. package/lib/scrapers/isracard.js +13 -11
  45. package/lib/scrapers/isracard.test.d.ts +1 -0
  46. package/lib/scrapers/isracard.test.js +49 -0
  47. package/lib/scrapers/leumi.js +170 -167
  48. package/lib/scrapers/leumi.test.d.ts +1 -0
  49. package/lib/scrapers/leumi.test.js +47 -0
  50. package/lib/scrapers/massad.js +13 -11
  51. package/lib/scrapers/max.js +261 -261
  52. package/lib/scrapers/max.test.d.ts +1 -0
  53. package/lib/scrapers/max.test.js +65 -0
  54. package/lib/scrapers/mercantile.js +16 -14
  55. package/lib/scrapers/mercantile.test.d.ts +1 -0
  56. package/lib/scrapers/mercantile.test.js +45 -0
  57. package/lib/scrapers/mizrahi.js +154 -158
  58. package/lib/scrapers/mizrahi.test.d.ts +1 -0
  59. package/lib/scrapers/mizrahi.test.js +53 -0
  60. package/lib/scrapers/one-zero-queries.js +7 -4
  61. package/lib/scrapers/one-zero.js +221 -176
  62. package/lib/scrapers/one-zero.test.d.ts +1 -0
  63. package/lib/scrapers/one-zero.test.js +51 -0
  64. package/lib/scrapers/otsar-hahayal.js +13 -11
  65. package/lib/scrapers/otsar-hahayal.test.d.ts +1 -0
  66. package/lib/scrapers/otsar-hahayal.test.js +47 -0
  67. package/lib/scrapers/pagi.js +13 -11
  68. package/lib/scrapers/pagi.test.d.ts +1 -0
  69. package/lib/scrapers/pagi.test.js +47 -0
  70. package/lib/scrapers/union-bank.js +173 -172
  71. package/lib/scrapers/union-bank.test.d.ts +1 -0
  72. package/lib/scrapers/union-bank.test.js +47 -0
  73. package/lib/scrapers/visa-cal.d.ts +2 -0
  74. package/lib/scrapers/visa-cal.js +263 -254
  75. package/lib/scrapers/visa-cal.test.d.ts +1 -0
  76. package/lib/scrapers/visa-cal.test.js +49 -0
  77. package/lib/scrapers/yahav.js +206 -190
  78. package/lib/scrapers/yahav.test.d.ts +1 -0
  79. package/lib/scrapers/yahav.test.js +49 -0
  80. package/lib/transactions.js +16 -13
  81. package/package.json +9 -4
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
3
6
  exports.GET_MOVEMENTS = exports.GET_CUSTOMER = void 0;
4
- exports.GET_CUSTOMER = `
7
+ const GET_CUSTOMER = exports.GET_CUSTOMER = `
5
8
  query GetCustomer {
6
9
  customer {
7
10
  __typename
@@ -67,7 +70,7 @@ fragment Portfolio on Portfolio {
67
70
  onboardingCompleted
68
71
  }
69
72
  `;
70
- exports.GET_MOVEMENTS = `query GetMovements(
73
+ const GET_MOVEMENTS = exports.GET_MOVEMENTS = `query GetMovements(
71
74
  $portfolioId: String!
72
75
  $accountId: String!
73
76
  $pagination: PaginationInput!
@@ -554,4 +557,4 @@ fragment MovementsFragment on Movements {
554
557
  ...PaginationFragment
555
558
  }
556
559
  }`;
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLXplcm8tcXVlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9vbmUtemVyby1xdWVyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsWUFBWSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWlFM0IsQ0FBQztBQUVXLFFBQUEsYUFBYSxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFzZTNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgR0VUX0NVU1RPTUVSID0gYFxucXVlcnkgR2V0Q3VzdG9tZXIge1xuICBjdXN0b21lciB7XG4gICAgX190eXBlbmFtZVxuICAgIGN1c3RvbWVySWRcbiAgICB1c2VySWRcbiAgICBpZFR5cGVcbiAgICBpZE51bWJlclxuICAgIGhlYnJld0ZpcnN0TmFtZVxuICAgIGhlYnJld0xhc3ROYW1lXG4gICAgbGF0aW5GaXJzdE5hbWVcbiAgICBsYXRpbkxhc3ROYW1lXG4gICAgZGF0ZU9mQmlydGhcbiAgICBsYXN0TG9naW5EYXRlXG4gICAgdXNlckVtYWlsXG4gICAgZ2VuZGVyXG4gICAgcG9ydGZvbGlvUmVsYXRpb25zIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIGN1c3RvbWVySWRcbiAgICAgIGN1c3RvbWVyUm9sZVxuICAgICAgcG9ydGZvbGlvSWRcbiAgICAgIGluaXRpYXRvclxuICAgICAgcmVsYXRpb25Ub0luaXRpYXRvclxuICAgICAgc3RhdHVzXG4gICAgfVxuICAgIHBvcnRmb2xpb3Mge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUG9ydGZvbGlvXG4gICAgfVxuICAgIHN0YXR1c1xuICB9XG59XG5mcmFnbWVudCBQb3J0Zm9saW8gb24gUG9ydGZvbGlvIHtcbiAgX190eXBlbmFtZVxuICBhY2NvdW50cyB7XG4gICAgX190eXBlbmFtZVxuICAgIGFjY291bnRJZFxuICAgIGFjY291bnRUeXBlXG4gICAgY2xvc2luZ0RhdGVcbiAgICBjdXJyZW5jeVxuICAgIG9wZW5pbmdEYXRlXG4gICAgc3RhdHVzXG4gICAgc3ViVHlwZVxuICB9XG4gIGFjdGl2YXRpb25EYXRlXG4gIGJhbmtcbiAgYmFzZUN1cnJlbmN5XG4gIGJyYW5jaFxuICBjbHViXG4gIGNsdWJEZXNjcmlwdGlvblxuICBpYmFuXG4gIGltYWdlVVJMXG4gIGlzSm9pbnRBY2NvdW50XG4gIHBhcnRuZXJOYW1lIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgcGFydG5lckZpcnN0TmFtZVxuICAgIHBhcnRuZXJMYXN0TmFtZVxuICB9XG4gIHBvcnRmb2xpb0lkXG4gIHBvcnRmb2xpb051bVxuICBwb3J0Zm9saW9UeXBlXG4gIHN0YXR1c1xuICBzdWJUeXBlXG4gIG9uYm9hcmRpbmdDb21wbGV0ZWRcbn1cbmA7XG5cbmV4cG9ydCBjb25zdCBHRVRfTU9WRU1FTlRTID0gYHF1ZXJ5IEdldE1vdmVtZW50cyhcbiAgJHBvcnRmb2xpb0lkOiBTdHJpbmchXG4gICRhY2NvdW50SWQ6IFN0cmluZyFcbiAgJHBhZ2luYXRpb246IFBhZ2luYXRpb25JbnB1dCFcbiAgJGxhbmd1YWdlOiBCZmZMYW5ndWFnZSFcbikge1xuICBtb3ZlbWVudHMoXG4gICAgcG9ydGZvbGlvSWQ6ICRwb3J0Zm9saW9JZFxuICAgIGFjY291bnRJZDogJGFjY291bnRJZFxuICAgIHBhZ2luYXRpb246ICRwYWdpbmF0aW9uXG4gICAgbGFuZ3VhZ2U6ICRsYW5ndWFnZVxuICApIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uTW92ZW1lbnRzRnJhZ21lbnRcbiAgfVxufVxuZnJhZ21lbnQgVHJhbnNhY3Rpb25JbnN0cnVtZW50QW1vdW50RnJhZ21lbnQgb24gVHJhbnNhY3Rpb25JbnN0cnVtZW50QW1vdW50IHtcbiAgX190eXBlbmFtZVxuICBpbnN0cnVtZW50QW1vdW50XG4gIGluc3RydW1lbnRTeW1ib2xcbiAgaW5zdHJ1bWVudFR5cGVcbn1cbmZyYWdtZW50IENvdW50ZXJQYXJ0eVJlZmVyZW5jZUZyYWdtZW50IG9uIENvdW50ZXJQYXJ0eVJlZmVyZW5jZSB7XG4gIF9fdHlwZW5hbWVcbiAgYmFua0lkXG4gIGJpY1xuICBicmFuY2hDb2RlXG4gIGlkXG4gIG5hbWVcbiAgdHlwZVxufVxuZnJhZ21lbnQgQmFzZVRyYW5zYWN0aW9uRnJhZ21lbnQgb24gQmFzZVRyYW5zYWN0aW9uIHtcbiAgX190eXBlbmFtZVxuICBhY2NvdW50SWRcbiAgYmV0d2Vlbk93bkFjY291bnRzXG4gIGJvb2tEYXRlXG4gIGNhbGN1bGF0ZWRTdGF0dXNcbiAgY2hhcmdlQW1vdW50IHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uVHJhbnNhY3Rpb25JbnN0cnVtZW50QW1vdW50RnJhZ21lbnRcbiAgfVxuICBjbGVhcmluZ1N5c3RlbVxuICBjb3VudGVyUGFydHkge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5Db3VudGVyUGFydHlSZWZlcmVuY2VGcmFnbWVudFxuICB9XG4gIGN1cnJlbnRQYXltZW50TnVtYmVyXG4gIGRpcmVjdGlvblxuICBkb21haW5UeXBlXG4gIGlzUmV2ZXJzYWxcbiAgbWV0aG9kXG4gIG9yaWdpbmFsQW1vdW50IHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uVHJhbnNhY3Rpb25JbnN0cnVtZW50QW1vdW50RnJhZ21lbnRcbiAgfVxuICBwb3J0Zm9saW9JZFxuICB0b3RhbFBheW1lbnRzQ291bnRcbiAgdHJhbnNhY3Rpb25JZFxuICB0cmFuc2FjdGlvblR5cGVcbiAgdmFsdWVEYXRlXG59XG5mcmFnbWVudCBDYXRlZ29yeUZyYWdtZW50IG9uIENhdGVnb3J5IHtcbiAgX190eXBlbmFtZVxuICBjYXRlZ29yeUlkXG4gIGRhdGFTb3VyY2VcbiAgc3ViQ2F0ZWdvcnlJZFxufVxuZnJhZ21lbnQgUmVjdXJyZW5jZUZyYWdtZW50IG9uIFJlY3VycmVuY2Uge1xuICBfX3R5cGVuYW1lXG4gIGRhdGFTb3VyY2VcbiAgaXNSZWN1cnJlbnRcbn1cbmZyYWdtZW50IFRyYW5zYWN0aW9uRW5yaWNobWVudEZyYWdtZW50IG9uIFRyYW5zYWN0aW9uRW5yaWNobWVudCB7XG4gIF9fdHlwZW5hbWVcbiAgY2F0ZWdvcmllcyB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLkNhdGVnb3J5RnJhZ21lbnRcbiAgfVxuICByZWN1cnJlbmNlcyB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLlJlY3VycmVuY2VGcmFnbWVudFxuICB9XG59XG5mcmFnbWVudCBUcmFuc2FjdGlvbkV2ZW50TWV0YWRhdGFGcmFnbWVudCBvbiBUcmFuc2FjdGlvbkV2ZW50TWV0YWRhdGEge1xuICBfX3R5cGVuYW1lXG4gIGNvcnJlbGF0aW9uSWRcbiAgcHJvY2Vzc2luZ09yZGVyXG59XG5mcmFnbWVudCBDb3VudGVyUGFydHlUcmFuc2ZlckRhdGEgb24gQ291bnRlclBhcnR5VHJhbnNmZXIge1xuICBfX3R5cGVuYW1lXG4gIGFjY291bnRJZFxuICBiYW5rX2lkXG4gIGJyYW5jaF9jb2RlXG4gIGNvdW50ZXJfcGFydHlfbmFtZVxufVxuZnJhZ21lbnQgQmFua1RyYW5zZmVyRGV0YWlsc0RhdGEgb24gQmFua1RyYW5zZmVyRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIENhc2hCbG9ja1RyYW5zZmVyIHtcbiAgICBjb3VudGVyUGFydHkge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ291bnRlclBhcnR5VHJhbnNmZXJEYXRhXG4gICAgfVxuICAgIHRyYW5zZmVyRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gUlRHU1JldHVyblRyYW5zZmVyIHtcbiAgICB0cmFuc2ZlckRlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFJUR1NUcmFuc2ZlciB7XG4gICAgdHJhbnNmZXJEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBTd2lmdFJldHVyblRyYW5zZmVyIHtcbiAgICB0cmFuc2ZlckNvbnZlcnNpb25SYXRlXG4gICAgdHJhbnNmZXJEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBTd2lmdFRyYW5zZmVyIHtcbiAgICB0cmFuc2ZlckNvbnZlcnNpb25SYXRlXG4gICAgdHJhbnNmZXJEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBUcmFuc2ZlciB7XG4gICAgY291bnRlclBhcnR5IHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNvdW50ZXJQYXJ0eVRyYW5zZmVyRGF0YVxuICAgIH1cbiAgICB0cmFuc2ZlckRlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IENhdGVnb3J5RGF0YSBvbiBDYXRlZ29yeSB7XG4gIF9fdHlwZW5hbWVcbiAgY2F0ZWdvcnlJZFxuICBkYXRhU291cmNlXG4gIHN1YkNhdGVnb3J5SWRcbn1cbmZyYWdtZW50IFJlY3VycmVuY2VEYXRhIG9uIFJlY3VycmVuY2Uge1xuICBfX3R5cGVuYW1lXG4gIGRhdGFTb3VyY2VcbiAgaXNSZWN1cnJlbnRcbn1cbmZyYWdtZW50IENhcmREZXRhaWxzRGF0YSBvbiBDYXJkRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIENhcmRDaGFyZ2Uge1xuICAgIGJvb2tfZGF0ZVxuICAgIGNhcmREZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBDYXJkQ2hhcmdlRkNZIHtcbiAgICBib29rX2RhdGVcbiAgICBjYXJkQ29udmVyc2lvblJhdGVcbiAgICBjYXJkRGVzY3JpcHRpb25LZXlcbiAgICBjYXJkRkNZQW1vdW50XG4gICAgY2FyZEZDWUN1cnJlbmN5XG4gIH1cbiAgLi4uIG9uIENhcmRNb250aGx5U2V0dGxlbWVudCB7XG4gICAgY2FyZERlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENhcmRSZWZ1bmQge1xuICAgIGNhcmREZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBDYXNoQmxvY2tDYXJkQ2hhcmdlIHtcbiAgICBjYXJkRGVzY3JpcHRpb25LZXlcbiAgfVxufVxuZnJhZ21lbnQgQ2FzaERldGFpbHNEYXRhIG9uIENhc2hEZXRhaWxzIHtcbiAgX190eXBlbmFtZVxuICAuLi4gb24gQ2FzaFdpdGhkcmF3YWwge1xuICAgIGNhc2hEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBDYXNoV2l0aGRyYXdhbEZDWSB7XG4gICAgRkNZQW1vdW50XG4gICAgRkNZQ3VycmVuY3lcbiAgICBjYXNoRGVzY3JpcHRpb25LZXlcbiAgICBjb252ZXJzaW9uUmF0ZVxuICB9XG59XG5mcmFnbWVudCBDaGVxdWVzRGV0YWlsc0RhdGEgb24gQ2hlcXVlc0RldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBDYXNoQmxvY2tDaGVxdWVEZXBvc2l0IHtcbiAgICBib29rRGF0ZVxuICAgIGNoZXF1ZXNEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBDaGVxdWVEZXBvc2l0IHtcbiAgICBib29rRGF0ZVxuICAgIGNoZXF1ZXNEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBDaGVxdWVSZXR1cm4ge1xuICAgIGJvb2tEYXRlXG4gICAgY2hlcXVlUmV0dXJuUmVhc29uXG4gICAgY2hlcXVlc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENoZXF1ZVdpdGhkcmF3YWwge1xuICAgIGNoZXF1ZXNEZXNjcmlwdGlvbktleVxuICB9XG59XG5mcmFnbWVudCBEZWZhdWx0RGV0YWlsc0RhdGEgb24gRGVmYXVsdERldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBEZWZhdWx0V2l0aFRyYW5zYWN0aW9uIHtcbiAgICBkZWZhdWx0RGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gRGVmYXVsdFdpdGhvdXRUcmFuc2FjdGlvbiB7XG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgZGVmYXVsdERlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IEZlZURldGFpbHNEYXRhIG9uIEZlZURldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBHZW5lcmFsRmVlIHtcbiAgICBmZWVEZXNjcmlwdGlvbktleVxuICB9XG59XG5mcmFnbWVudCBMb2FuRGV0YWlsc0RhdGEgb24gTG9hbkRldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBGdWxsUHJlUGF5bWVudCB7XG4gICAgbG9hbkRlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIEluaXRpYXRlIHtcbiAgICBsb2FuRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gTW9udGhseVBheW1lbnQge1xuICAgIGxvYW5EZXNjcmlwdGlvbktleVxuICAgIGxvYW5QYXltZW50TnVtYmVyXG4gICAgbG9hblRvdGFsUGF5bWVudHNDb3VudFxuICB9XG4gIC4uLiBvbiBQYXJ0aWFsUHJlUGF5bWVudCB7XG4gICAgbG9hbkRlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IE1hbmRhdGVEZXRhaWxzRGF0YSBvbiBNYW5kYXRlRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIE1hbmRhdGVQYXltZW50IHtcbiAgICBtYW5kYXRlRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gTWFuZGF0ZVJldHVyblBheW1lbnQge1xuICAgIG1hbmRhdGVEZXNjcmlwdGlvbktleVxuICB9XG59XG5mcmFnbWVudCBTYXZpbmdzRGV0YWlsc0RhdGEgb24gU2F2aW5nc0RldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBGdWxsU2F2aW5nc1dpdGhkcmF3YWwge1xuICAgIHNhdmluZ3NEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBNb250aGx5U2F2aW5nc0RlcG9zaXQge1xuICAgIHNhdmluZ3NEZXBvc2l0TnVtYmVyXG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gICAgc2F2aW5nc1RvdGFsRGVwb3NpdENvdW50XG4gIH1cbiAgLi4uIG9uIFBhcnRpYWxTYXZpbmdzV2l0aGRyYXdhbCB7XG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFNhdmluZ3NDbG9zaW5nIHtcbiAgICBzYXZpbmdzRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gU2F2aW5nc0RlcG9zaXQge1xuICAgIHNhdmluZ3NEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBTYXZpbmdzSW50ZXJlc3Qge1xuICAgIHNhdmluZ3NEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBTYXZpbmdzUGVuYWx0eSB7XG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFNhdmluZ3NUYXgge1xuICAgIHNhdmluZ3NEZXNjcmlwdGlvbktleVxuICB9XG59XG5mcmFnbWVudCBTdWJzY3JpcHRpb25EZXRhaWxzRGF0YSBvbiBTdWJzY3JpcHRpb25EZXRhaWxzIHtcbiAgX190eXBlbmFtZVxuICAuLi4gb24gU3Vic2NyaXB0aW9uUGF5bWVudCB7XG4gICAgc3Vic2NyaXB0aW9uRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gU3Vic2NyaXB0aW9uUmV0dXJuUGF5bWVudCB7XG4gICAgc3Vic2NyaXB0aW9uRGVzY3JpcHRpb25LZXlcbiAgfVxufVxuZnJhZ21lbnQgVHJhbnNhY3Rpb25zRGV0YWlsc0RhdGEgb24gVHJhbnNhY3Rpb25EZXRhaWxzIHtcbiAgX190eXBlbmFtZVxuICAuLi4gb24gQmFua1RyYW5zZmVyIHtcbiAgICBiYW5rX3RyYW5zZmVyX2RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQmFua1RyYW5zZmVyRGV0YWlsc0RhdGFcbiAgICB9XG4gICAgYm9va19kYXRlXG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgcmVjdXJyZW5jZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUmVjdXJyZW5jZURhdGFcbiAgICB9XG4gICAgdmFsdWVfZGF0ZVxuICB9XG4gIC4uLiBvbiBDYXJkIHtcbiAgICBjYXJkX2RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2FyZERldGFpbHNEYXRhXG4gICAgfVxuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIHJlY3VycmVuY2VzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlJlY3VycmVuY2VEYXRhXG4gICAgfVxuICAgIHZhbHVlX2RhdGVcbiAgfVxuICAuLi4gb24gQ2FzaCB7XG4gICAgY2FzaF9kZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhc2hEZXRhaWxzRGF0YVxuICAgIH1cbiAgICBjYXRlZ29yaWVzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhdGVnb3J5RGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICB2YWx1ZV9kYXRlXG4gIH1cbiAgLi4uIG9uIENoZXF1ZXMge1xuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIGNoZXF1ZXNEZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNoZXF1ZXNEZXRhaWxzRGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICB2YWx1ZURhdGVcbiAgICByZWZlcmVuY2VOdW1iZXJcbiAgICBmcm9udEltYWdlVXJsXG4gICAgYmFja0ltYWdlVXJsXG4gIH1cbiAgLi4uIG9uIERlZmF1bHQge1xuICAgIGRlZmF1bHRfZGV0YWlscyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5EZWZhdWx0RGV0YWlsc0RhdGFcbiAgICB9XG4gICAgcmVjdXJyZW5jZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUmVjdXJyZW5jZURhdGFcbiAgICB9XG4gICAgdmFsdWVfZGF0ZVxuICB9XG4gIC4uLiBvbiBGZWUge1xuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIGZlZV9kZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkZlZURldGFpbHNEYXRhXG4gICAgfVxuICAgIHZhbHVlX2RhdGVcbiAgfVxuICAuLi4gb24gTG9hbnMge1xuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIGxvYW5fZGV0YWlscyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5Mb2FuRGV0YWlsc0RhdGFcbiAgICB9XG4gICAgcmVjdXJyZW5jZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUmVjdXJyZW5jZURhdGFcbiAgICB9XG4gICAgdmFsdWVfZGF0ZVxuICB9XG4gIC4uLiBvbiBNYW5kYXRlIHtcbiAgICBjYXRlZ29yaWVzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhdGVnb3J5RGF0YVxuICAgIH1cbiAgICBtYW5kYXRlX2RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uTWFuZGF0ZURldGFpbHNEYXRhXG4gICAgfVxuICAgIHJlY3VycmVuY2VzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlJlY3VycmVuY2VEYXRhXG4gICAgfVxuICAgIHZhbHVlX2RhdGVcbiAgfVxuICAuLi4gb24gU2F2aW5ncyB7XG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgcmVjdXJyZW5jZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUmVjdXJyZW5jZURhdGFcbiAgICB9XG4gICAgc2F2aW5nc19kZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlNhdmluZ3NEZXRhaWxzRGF0YVxuICAgIH1cbiAgICB2YWx1ZV9kYXRlXG4gIH1cbiAgLi4uIG9uIFN1YnNjcmlwdGlvblRyYW5zYWN0aW9uIHtcbiAgICBjYXRlZ29yaWVzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhdGVnb3J5RGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICBzdWJzY3JpcHRpb25fZGV0YWlscyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5TdWJzY3JpcHRpb25EZXRhaWxzRGF0YVxuICAgIH1cbiAgICB2YWx1ZV9kYXRlXG4gIH1cbn1cbmZyYWdtZW50IFRyYW5zYWN0aW9uRnJhZ21lbnQgb24gVHJhbnNhY3Rpb24ge1xuICBfX3R5cGVuYW1lXG4gIGJhc2VUcmFuc2FjdGlvbiB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLkJhc2VUcmFuc2FjdGlvbkZyYWdtZW50XG4gIH1cbiAgZW5yaWNobWVudCB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLlRyYW5zYWN0aW9uRW5yaWNobWVudEZyYWdtZW50XG4gIH1cbiAgbWV0YWRhdGEge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5UcmFuc2FjdGlvbkV2ZW50TWV0YWRhdGFGcmFnbWVudFxuICB9XG4gIHJlZmVyZW5jZU51bWJlclxuICB0cmFuc2FjdGlvbkRldGFpbHMge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5UcmFuc2FjdGlvbnNEZXRhaWxzRGF0YVxuICB9XG59XG5mcmFnbWVudCBNb3ZlbWVudEZyYWdtZW50IG9uIE1vdmVtZW50IHtcbiAgX190eXBlbmFtZVxuICBhY2NvdW50SWRcbiAgYmFua0N1cnJlbmN5QW1vdW50XG4gIGJvb2tpbmdEYXRlXG4gIGNvbnZlcnNpb25SYXRlXG4gIGNyZWRpdERlYml0XG4gIGRlc2NyaXB0aW9uXG4gIGlzUmV2ZXJzZWRcbiAgbGlua1RyYW5zYWN0aW9uIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uVHJhbnNhY3Rpb25GcmFnbWVudFxuICB9XG4gIG1vdmVtZW50QW1vdW50XG4gIG1vdmVtZW50Q3VycmVuY3lcbiAgbW92ZW1lbnRJZFxuICBtb3ZlbWVudFJldmVyc2VkSWRcbiAgbW92ZW1lbnRUaW1lc3RhbXBcbiAgbW92ZW1lbnRUeXBlXG4gIHBvcnRmb2xpb0lkXG4gIHJ1bm5pbmdCYWxhbmNlXG4gIHRyYW5zYWN0aW9uIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uVHJhbnNhY3Rpb25GcmFnbWVudFxuICB9XG4gIHZhbHVlRGF0ZVxufVxuZnJhZ21lbnQgUGFnaW5hdGlvbkZyYWdtZW50IG9uIFBhZ2luYXRpb24ge1xuICBfX3R5cGVuYW1lXG4gIGN1cnNvclxuICBoYXNNb3JlXG59XG5mcmFnbWVudCBNb3ZlbWVudHNGcmFnbWVudCBvbiBNb3ZlbWVudHMge1xuICBfX3R5cGVuYW1lXG4gIGlzUnVubmluZ0JhbGFuY2VJblN5bmNcbiAgbW92ZW1lbnRzIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uTW92ZW1lbnRGcmFnbWVudFxuICB9XG4gIHBhZ2luYXRpb24ge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5QYWdpbmF0aW9uRnJhZ21lbnRcbiAgfVxufWA7XG4iXX0=
560
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJHRVRfQ1VTVE9NRVIiLCJleHBvcnRzIiwiR0VUX01PVkVNRU5UUyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9vbmUtemVyby1xdWVyaWVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBHRVRfQ1VTVE9NRVIgPSBgXG5xdWVyeSBHZXRDdXN0b21lciB7XG4gIGN1c3RvbWVyIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgY3VzdG9tZXJJZFxuICAgIHVzZXJJZFxuICAgIGlkVHlwZVxuICAgIGlkTnVtYmVyXG4gICAgaGVicmV3Rmlyc3ROYW1lXG4gICAgaGVicmV3TGFzdE5hbWVcbiAgICBsYXRpbkZpcnN0TmFtZVxuICAgIGxhdGluTGFzdE5hbWVcbiAgICBkYXRlT2ZCaXJ0aFxuICAgIGxhc3RMb2dpbkRhdGVcbiAgICB1c2VyRW1haWxcbiAgICBnZW5kZXJcbiAgICBwb3J0Zm9saW9SZWxhdGlvbnMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgY3VzdG9tZXJJZFxuICAgICAgY3VzdG9tZXJSb2xlXG4gICAgICBwb3J0Zm9saW9JZFxuICAgICAgaW5pdGlhdG9yXG4gICAgICByZWxhdGlvblRvSW5pdGlhdG9yXG4gICAgICBzdGF0dXNcbiAgICB9XG4gICAgcG9ydGZvbGlvcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5Qb3J0Zm9saW9cbiAgICB9XG4gICAgc3RhdHVzXG4gIH1cbn1cbmZyYWdtZW50IFBvcnRmb2xpbyBvbiBQb3J0Zm9saW8ge1xuICBfX3R5cGVuYW1lXG4gIGFjY291bnRzIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgYWNjb3VudElkXG4gICAgYWNjb3VudFR5cGVcbiAgICBjbG9zaW5nRGF0ZVxuICAgIGN1cnJlbmN5XG4gICAgb3BlbmluZ0RhdGVcbiAgICBzdGF0dXNcbiAgICBzdWJUeXBlXG4gIH1cbiAgYWN0aXZhdGlvbkRhdGVcbiAgYmFua1xuICBiYXNlQ3VycmVuY3lcbiAgYnJhbmNoXG4gIGNsdWJcbiAgY2x1YkRlc2NyaXB0aW9uXG4gIGliYW5cbiAgaW1hZ2VVUkxcbiAgaXNKb2ludEFjY291bnRcbiAgcGFydG5lck5hbWUge1xuICAgIF9fdHlwZW5hbWVcbiAgICBwYXJ0bmVyRmlyc3ROYW1lXG4gICAgcGFydG5lckxhc3ROYW1lXG4gIH1cbiAgcG9ydGZvbGlvSWRcbiAgcG9ydGZvbGlvTnVtXG4gIHBvcnRmb2xpb1R5cGVcbiAgc3RhdHVzXG4gIHN1YlR5cGVcbiAgb25ib2FyZGluZ0NvbXBsZXRlZFxufVxuYDtcblxuZXhwb3J0IGNvbnN0IEdFVF9NT1ZFTUVOVFMgPSBgcXVlcnkgR2V0TW92ZW1lbnRzKFxuICAkcG9ydGZvbGlvSWQ6IFN0cmluZyFcbiAgJGFjY291bnRJZDogU3RyaW5nIVxuICAkcGFnaW5hdGlvbjogUGFnaW5hdGlvbklucHV0IVxuICAkbGFuZ3VhZ2U6IEJmZkxhbmd1YWdlIVxuKSB7XG4gIG1vdmVtZW50cyhcbiAgICBwb3J0Zm9saW9JZDogJHBvcnRmb2xpb0lkXG4gICAgYWNjb3VudElkOiAkYWNjb3VudElkXG4gICAgcGFnaW5hdGlvbjogJHBhZ2luYXRpb25cbiAgICBsYW5ndWFnZTogJGxhbmd1YWdlXG4gICkge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5Nb3ZlbWVudHNGcmFnbWVudFxuICB9XG59XG5mcmFnbWVudCBUcmFuc2FjdGlvbkluc3RydW1lbnRBbW91bnRGcmFnbWVudCBvbiBUcmFuc2FjdGlvbkluc3RydW1lbnRBbW91bnQge1xuICBfX3R5cGVuYW1lXG4gIGluc3RydW1lbnRBbW91bnRcbiAgaW5zdHJ1bWVudFN5bWJvbFxuICBpbnN0cnVtZW50VHlwZVxufVxuZnJhZ21lbnQgQ291bnRlclBhcnR5UmVmZXJlbmNlRnJhZ21lbnQgb24gQ291bnRlclBhcnR5UmVmZXJlbmNlIHtcbiAgX190eXBlbmFtZVxuICBiYW5rSWRcbiAgYmljXG4gIGJyYW5jaENvZGVcbiAgaWRcbiAgbmFtZVxuICB0eXBlXG59XG5mcmFnbWVudCBCYXNlVHJhbnNhY3Rpb25GcmFnbWVudCBvbiBCYXNlVHJhbnNhY3Rpb24ge1xuICBfX3R5cGVuYW1lXG4gIGFjY291bnRJZFxuICBiZXR3ZWVuT3duQWNjb3VudHNcbiAgYm9va0RhdGVcbiAgY2FsY3VsYXRlZFN0YXR1c1xuICBjaGFyZ2VBbW91bnQge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5UcmFuc2FjdGlvbkluc3RydW1lbnRBbW91bnRGcmFnbWVudFxuICB9XG4gIGNsZWFyaW5nU3lzdGVtXG4gIGNvdW50ZXJQYXJ0eSB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLkNvdW50ZXJQYXJ0eVJlZmVyZW5jZUZyYWdtZW50XG4gIH1cbiAgY3VycmVudFBheW1lbnROdW1iZXJcbiAgZGlyZWN0aW9uXG4gIGRvbWFpblR5cGVcbiAgaXNSZXZlcnNhbFxuICBtZXRob2RcbiAgb3JpZ2luYWxBbW91bnQge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5UcmFuc2FjdGlvbkluc3RydW1lbnRBbW91bnRGcmFnbWVudFxuICB9XG4gIHBvcnRmb2xpb0lkXG4gIHRvdGFsUGF5bWVudHNDb3VudFxuICB0cmFuc2FjdGlvbklkXG4gIHRyYW5zYWN0aW9uVHlwZVxuICB2YWx1ZURhdGVcbn1cbmZyYWdtZW50IENhdGVnb3J5RnJhZ21lbnQgb24gQ2F0ZWdvcnkge1xuICBfX3R5cGVuYW1lXG4gIGNhdGVnb3J5SWRcbiAgZGF0YVNvdXJjZVxuICBzdWJDYXRlZ29yeUlkXG59XG5mcmFnbWVudCBSZWN1cnJlbmNlRnJhZ21lbnQgb24gUmVjdXJyZW5jZSB7XG4gIF9fdHlwZW5hbWVcbiAgZGF0YVNvdXJjZVxuICBpc1JlY3VycmVudFxufVxuZnJhZ21lbnQgVHJhbnNhY3Rpb25FbnJpY2htZW50RnJhZ21lbnQgb24gVHJhbnNhY3Rpb25FbnJpY2htZW50IHtcbiAgX190eXBlbmFtZVxuICBjYXRlZ29yaWVzIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uQ2F0ZWdvcnlGcmFnbWVudFxuICB9XG4gIHJlY3VycmVuY2VzIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uUmVjdXJyZW5jZUZyYWdtZW50XG4gIH1cbn1cbmZyYWdtZW50IFRyYW5zYWN0aW9uRXZlbnRNZXRhZGF0YUZyYWdtZW50IG9uIFRyYW5zYWN0aW9uRXZlbnRNZXRhZGF0YSB7XG4gIF9fdHlwZW5hbWVcbiAgY29ycmVsYXRpb25JZFxuICBwcm9jZXNzaW5nT3JkZXJcbn1cbmZyYWdtZW50IENvdW50ZXJQYXJ0eVRyYW5zZmVyRGF0YSBvbiBDb3VudGVyUGFydHlUcmFuc2ZlciB7XG4gIF9fdHlwZW5hbWVcbiAgYWNjb3VudElkXG4gIGJhbmtfaWRcbiAgYnJhbmNoX2NvZGVcbiAgY291bnRlcl9wYXJ0eV9uYW1lXG59XG5mcmFnbWVudCBCYW5rVHJhbnNmZXJEZXRhaWxzRGF0YSBvbiBCYW5rVHJhbnNmZXJEZXRhaWxzIHtcbiAgX190eXBlbmFtZVxuICAuLi4gb24gQ2FzaEJsb2NrVHJhbnNmZXIge1xuICAgIGNvdW50ZXJQYXJ0eSB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5Db3VudGVyUGFydHlUcmFuc2ZlckRhdGFcbiAgICB9XG4gICAgdHJhbnNmZXJEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBSVEdTUmV0dXJuVHJhbnNmZXIge1xuICAgIHRyYW5zZmVyRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gUlRHU1RyYW5zZmVyIHtcbiAgICB0cmFuc2ZlckRlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFN3aWZ0UmV0dXJuVHJhbnNmZXIge1xuICAgIHRyYW5zZmVyQ29udmVyc2lvblJhdGVcbiAgICB0cmFuc2ZlckRlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFN3aWZ0VHJhbnNmZXIge1xuICAgIHRyYW5zZmVyQ29udmVyc2lvblJhdGVcbiAgICB0cmFuc2ZlckRlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFRyYW5zZmVyIHtcbiAgICBjb3VudGVyUGFydHkge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ291bnRlclBhcnR5VHJhbnNmZXJEYXRhXG4gICAgfVxuICAgIHRyYW5zZmVyRGVzY3JpcHRpb25LZXlcbiAgfVxufVxuZnJhZ21lbnQgQ2F0ZWdvcnlEYXRhIG9uIENhdGVnb3J5IHtcbiAgX190eXBlbmFtZVxuICBjYXRlZ29yeUlkXG4gIGRhdGFTb3VyY2VcbiAgc3ViQ2F0ZWdvcnlJZFxufVxuZnJhZ21lbnQgUmVjdXJyZW5jZURhdGEgb24gUmVjdXJyZW5jZSB7XG4gIF9fdHlwZW5hbWVcbiAgZGF0YVNvdXJjZVxuICBpc1JlY3VycmVudFxufVxuZnJhZ21lbnQgQ2FyZERldGFpbHNEYXRhIG9uIENhcmREZXRhaWxzIHtcbiAgX190eXBlbmFtZVxuICAuLi4gb24gQ2FyZENoYXJnZSB7XG4gICAgYm9va19kYXRlXG4gICAgY2FyZERlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENhcmRDaGFyZ2VGQ1kge1xuICAgIGJvb2tfZGF0ZVxuICAgIGNhcmRDb252ZXJzaW9uUmF0ZVxuICAgIGNhcmREZXNjcmlwdGlvbktleVxuICAgIGNhcmRGQ1lBbW91bnRcbiAgICBjYXJkRkNZQ3VycmVuY3lcbiAgfVxuICAuLi4gb24gQ2FyZE1vbnRobHlTZXR0bGVtZW50IHtcbiAgICBjYXJkRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gQ2FyZFJlZnVuZCB7XG4gICAgY2FyZERlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENhc2hCbG9ja0NhcmRDaGFyZ2Uge1xuICAgIGNhcmREZXNjcmlwdGlvbktleVxuICB9XG59XG5mcmFnbWVudCBDYXNoRGV0YWlsc0RhdGEgb24gQ2FzaERldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBDYXNoV2l0aGRyYXdhbCB7XG4gICAgY2FzaERlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENhc2hXaXRoZHJhd2FsRkNZIHtcbiAgICBGQ1lBbW91bnRcbiAgICBGQ1lDdXJyZW5jeVxuICAgIGNhc2hEZXNjcmlwdGlvbktleVxuICAgIGNvbnZlcnNpb25SYXRlXG4gIH1cbn1cbmZyYWdtZW50IENoZXF1ZXNEZXRhaWxzRGF0YSBvbiBDaGVxdWVzRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIENhc2hCbG9ja0NoZXF1ZURlcG9zaXQge1xuICAgIGJvb2tEYXRlXG4gICAgY2hlcXVlc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENoZXF1ZURlcG9zaXQge1xuICAgIGJvb2tEYXRlXG4gICAgY2hlcXVlc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIENoZXF1ZVJldHVybiB7XG4gICAgYm9va0RhdGVcbiAgICBjaGVxdWVSZXR1cm5SZWFzb25cbiAgICBjaGVxdWVzRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gQ2hlcXVlV2l0aGRyYXdhbCB7XG4gICAgY2hlcXVlc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IERlZmF1bHREZXRhaWxzRGF0YSBvbiBEZWZhdWx0RGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIERlZmF1bHRXaXRoVHJhbnNhY3Rpb24ge1xuICAgIGRlZmF1bHREZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBEZWZhdWx0V2l0aG91dFRyYW5zYWN0aW9uIHtcbiAgICBjYXRlZ29yaWVzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhdGVnb3J5RGF0YVxuICAgIH1cbiAgICBkZWZhdWx0RGVzY3JpcHRpb25LZXlcbiAgfVxufVxuZnJhZ21lbnQgRmVlRGV0YWlsc0RhdGEgb24gRmVlRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIEdlbmVyYWxGZWUge1xuICAgIGZlZURlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IExvYW5EZXRhaWxzRGF0YSBvbiBMb2FuRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIEZ1bGxQcmVQYXltZW50IHtcbiAgICBsb2FuRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gSW5pdGlhdGUge1xuICAgIGxvYW5EZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBNb250aGx5UGF5bWVudCB7XG4gICAgbG9hbkRlc2NyaXB0aW9uS2V5XG4gICAgbG9hblBheW1lbnROdW1iZXJcbiAgICBsb2FuVG90YWxQYXltZW50c0NvdW50XG4gIH1cbiAgLi4uIG9uIFBhcnRpYWxQcmVQYXltZW50IHtcbiAgICBsb2FuRGVzY3JpcHRpb25LZXlcbiAgfVxufVxuZnJhZ21lbnQgTWFuZGF0ZURldGFpbHNEYXRhIG9uIE1hbmRhdGVEZXRhaWxzIHtcbiAgX190eXBlbmFtZVxuICAuLi4gb24gTWFuZGF0ZVBheW1lbnQge1xuICAgIG1hbmRhdGVEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBNYW5kYXRlUmV0dXJuUGF5bWVudCB7XG4gICAgbWFuZGF0ZURlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IFNhdmluZ3NEZXRhaWxzRGF0YSBvbiBTYXZpbmdzRGV0YWlscyB7XG4gIF9fdHlwZW5hbWVcbiAgLi4uIG9uIEZ1bGxTYXZpbmdzV2l0aGRyYXdhbCB7XG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIE1vbnRobHlTYXZpbmdzRGVwb3NpdCB7XG4gICAgc2F2aW5nc0RlcG9zaXROdW1iZXJcbiAgICBzYXZpbmdzRGVzY3JpcHRpb25LZXlcbiAgICBzYXZpbmdzVG90YWxEZXBvc2l0Q291bnRcbiAgfVxuICAuLi4gb24gUGFydGlhbFNhdmluZ3NXaXRoZHJhd2FsIHtcbiAgICBzYXZpbmdzRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gU2F2aW5nc0Nsb3Npbmcge1xuICAgIHNhdmluZ3NEZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBTYXZpbmdzRGVwb3NpdCB7XG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFNhdmluZ3NJbnRlcmVzdCB7XG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbiAgLi4uIG9uIFNhdmluZ3NQZW5hbHR5IHtcbiAgICBzYXZpbmdzRGVzY3JpcHRpb25LZXlcbiAgfVxuICAuLi4gb24gU2F2aW5nc1RheCB7XG4gICAgc2F2aW5nc0Rlc2NyaXB0aW9uS2V5XG4gIH1cbn1cbmZyYWdtZW50IFN1YnNjcmlwdGlvbkRldGFpbHNEYXRhIG9uIFN1YnNjcmlwdGlvbkRldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBTdWJzY3JpcHRpb25QYXltZW50IHtcbiAgICBzdWJzY3JpcHRpb25EZXNjcmlwdGlvbktleVxuICB9XG4gIC4uLiBvbiBTdWJzY3JpcHRpb25SZXR1cm5QYXltZW50IHtcbiAgICBzdWJzY3JpcHRpb25EZXNjcmlwdGlvbktleVxuICB9XG59XG5mcmFnbWVudCBUcmFuc2FjdGlvbnNEZXRhaWxzRGF0YSBvbiBUcmFuc2FjdGlvbkRldGFpbHMge1xuICBfX3R5cGVuYW1lXG4gIC4uLiBvbiBCYW5rVHJhbnNmZXIge1xuICAgIGJhbmtfdHJhbnNmZXJfZGV0YWlscyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5CYW5rVHJhbnNmZXJEZXRhaWxzRGF0YVxuICAgIH1cbiAgICBib29rX2RhdGVcbiAgICBjYXRlZ29yaWVzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhdGVnb3J5RGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICB2YWx1ZV9kYXRlXG4gIH1cbiAgLi4uIG9uIENhcmQge1xuICAgIGNhcmRfZGV0YWlscyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXJkRGV0YWlsc0RhdGFcbiAgICB9XG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgcmVjdXJyZW5jZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUmVjdXJyZW5jZURhdGFcbiAgICB9XG4gICAgdmFsdWVfZGF0ZVxuICB9XG4gIC4uLiBvbiBDYXNoIHtcbiAgICBjYXNoX2RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2FzaERldGFpbHNEYXRhXG4gICAgfVxuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIHJlY3VycmVuY2VzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlJlY3VycmVuY2VEYXRhXG4gICAgfVxuICAgIHZhbHVlX2RhdGVcbiAgfVxuICAuLi4gb24gQ2hlcXVlcyB7XG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgY2hlcXVlc0RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2hlcXVlc0RldGFpbHNEYXRhXG4gICAgfVxuICAgIHJlY3VycmVuY2VzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlJlY3VycmVuY2VEYXRhXG4gICAgfVxuICAgIHZhbHVlRGF0ZVxuICAgIHJlZmVyZW5jZU51bWJlclxuICAgIGZyb250SW1hZ2VVcmxcbiAgICBiYWNrSW1hZ2VVcmxcbiAgfVxuICAuLi4gb24gRGVmYXVsdCB7XG4gICAgZGVmYXVsdF9kZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkRlZmF1bHREZXRhaWxzRGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICB2YWx1ZV9kYXRlXG4gIH1cbiAgLi4uIG9uIEZlZSB7XG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgZmVlX2RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uRmVlRGV0YWlsc0RhdGFcbiAgICB9XG4gICAgdmFsdWVfZGF0ZVxuICB9XG4gIC4uLiBvbiBMb2FucyB7XG4gICAgY2F0ZWdvcmllcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5DYXRlZ29yeURhdGFcbiAgICB9XG4gICAgbG9hbl9kZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkxvYW5EZXRhaWxzRGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICB2YWx1ZV9kYXRlXG4gIH1cbiAgLi4uIG9uIE1hbmRhdGUge1xuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIG1hbmRhdGVfZGV0YWlscyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5NYW5kYXRlRGV0YWlsc0RhdGFcbiAgICB9XG4gICAgcmVjdXJyZW5jZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uUmVjdXJyZW5jZURhdGFcbiAgICB9XG4gICAgdmFsdWVfZGF0ZVxuICB9XG4gIC4uLiBvbiBTYXZpbmdzIHtcbiAgICBjYXRlZ29yaWVzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLkNhdGVnb3J5RGF0YVxuICAgIH1cbiAgICByZWN1cnJlbmNlcyB7XG4gICAgICBfX3R5cGVuYW1lXG4gICAgICAuLi5SZWN1cnJlbmNlRGF0YVxuICAgIH1cbiAgICBzYXZpbmdzX2RldGFpbHMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uU2F2aW5nc0RldGFpbHNEYXRhXG4gICAgfVxuICAgIHZhbHVlX2RhdGVcbiAgfVxuICAuLi4gb24gU3Vic2NyaXB0aW9uVHJhbnNhY3Rpb24ge1xuICAgIGNhdGVnb3JpZXMge1xuICAgICAgX190eXBlbmFtZVxuICAgICAgLi4uQ2F0ZWdvcnlEYXRhXG4gICAgfVxuICAgIHJlY3VycmVuY2VzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlJlY3VycmVuY2VEYXRhXG4gICAgfVxuICAgIHN1YnNjcmlwdGlvbl9kZXRhaWxzIHtcbiAgICAgIF9fdHlwZW5hbWVcbiAgICAgIC4uLlN1YnNjcmlwdGlvbkRldGFpbHNEYXRhXG4gICAgfVxuICAgIHZhbHVlX2RhdGVcbiAgfVxufVxuZnJhZ21lbnQgVHJhbnNhY3Rpb25GcmFnbWVudCBvbiBUcmFuc2FjdGlvbiB7XG4gIF9fdHlwZW5hbWVcbiAgYmFzZVRyYW5zYWN0aW9uIHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uQmFzZVRyYW5zYWN0aW9uRnJhZ21lbnRcbiAgfVxuICBlbnJpY2htZW50IHtcbiAgICBfX3R5cGVuYW1lXG4gICAgLi4uVHJhbnNhY3Rpb25FbnJpY2htZW50RnJhZ21lbnRcbiAgfVxuICBtZXRhZGF0YSB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLlRyYW5zYWN0aW9uRXZlbnRNZXRhZGF0YUZyYWdtZW50XG4gIH1cbiAgcmVmZXJlbmNlTnVtYmVyXG4gIHRyYW5zYWN0aW9uRGV0YWlscyB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLlRyYW5zYWN0aW9uc0RldGFpbHNEYXRhXG4gIH1cbn1cbmZyYWdtZW50IE1vdmVtZW50RnJhZ21lbnQgb24gTW92ZW1lbnQge1xuICBfX3R5cGVuYW1lXG4gIGFjY291bnRJZFxuICBiYW5rQ3VycmVuY3lBbW91bnRcbiAgYm9va2luZ0RhdGVcbiAgY29udmVyc2lvblJhdGVcbiAgY3JlZGl0RGViaXRcbiAgZGVzY3JpcHRpb25cbiAgaXNSZXZlcnNlZFxuICBsaW5rVHJhbnNhY3Rpb24ge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5UcmFuc2FjdGlvbkZyYWdtZW50XG4gIH1cbiAgbW92ZW1lbnRBbW91bnRcbiAgbW92ZW1lbnRDdXJyZW5jeVxuICBtb3ZlbWVudElkXG4gIG1vdmVtZW50UmV2ZXJzZWRJZFxuICBtb3ZlbWVudFRpbWVzdGFtcFxuICBtb3ZlbWVudFR5cGVcbiAgcG9ydGZvbGlvSWRcbiAgcnVubmluZ0JhbGFuY2VcbiAgdHJhbnNhY3Rpb24ge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5UcmFuc2FjdGlvbkZyYWdtZW50XG4gIH1cbiAgdmFsdWVEYXRlXG59XG5mcmFnbWVudCBQYWdpbmF0aW9uRnJhZ21lbnQgb24gUGFnaW5hdGlvbiB7XG4gIF9fdHlwZW5hbWVcbiAgY3Vyc29yXG4gIGhhc01vcmVcbn1cbmZyYWdtZW50IE1vdmVtZW50c0ZyYWdtZW50IG9uIE1vdmVtZW50cyB7XG4gIF9fdHlwZW5hbWVcbiAgaXNSdW5uaW5nQmFsYW5jZUluU3luY1xuICBtb3ZlbWVudHMge1xuICAgIF9fdHlwZW5hbWVcbiAgICAuLi5Nb3ZlbWVudEZyYWdtZW50XG4gIH1cbiAgcGFnaW5hdGlvbiB7XG4gICAgX190eXBlbmFtZVxuICAgIC4uLlBhZ2luYXRpb25GcmFnbWVudFxuICB9XG59YDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU8sTUFBTUEsWUFBWSxHQUFBQyxPQUFBLENBQUFELFlBQUEsR0FBRztBQUM1QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFFTSxNQUFNRSxhQUFhLEdBQUFELE9BQUEsQ0FBQUMsYUFBQSxHQUFHO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFIiwiaWdub3JlTGlzdCI6W119
@@ -1,193 +1,238 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const moment_1 = __importDefault(require("moment/moment"));
7
- const debug_1 = require("../helpers/debug");
8
- const fetch_1 = require("../helpers/fetch");
9
- const transactions_1 = require("../transactions");
10
- const base_scraper_1 = require("./base-scraper");
11
- const errors_1 = require("./errors");
12
- const one_zero_queries_1 = require("./one-zero-queries");
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _moment = _interopRequireDefault(require("moment/moment"));
8
+ var _debug = require("../helpers/debug");
9
+ var _fetch = require("../helpers/fetch");
10
+ var _transactions = require("../transactions");
11
+ var _baseScraper = require("./base-scraper");
12
+ var _errors = require("./errors");
13
+ var _oneZeroQueries = require("./one-zero-queries");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
15
  const HEBREW_WORDS_REGEX = /[\u0590-\u05FF][\u0590-\u05FF"'\-_ /\\]*[\u0590-\u05FF]/g;
14
- const debug = (0, debug_1.getDebug)('one-zero');
16
+ const debug = (0, _debug.getDebug)('one-zero');
15
17
  const IDENTITY_SERVER_URL = 'https://identity.tfd-bank.com/v1/';
16
18
  const GRAPHQL_API_URL = 'https://mobile.tfd-bank.com/mobile-graph/graphql';
17
- class OneZeroScraper extends base_scraper_1.BaseScraper {
18
- otpContext;
19
- accessToken;
20
- async triggerTwoFactorAuth(phoneNumber) {
21
- if (!phoneNumber.startsWith('+')) {
22
- return (0, errors_1.createGenericError)('A full international phone number starting with + and a three digit country code is required');
23
- }
24
- debug('Fetching device token');
25
- const deviceTokenResponse = await (0, fetch_1.fetchPost)(`${IDENTITY_SERVER_URL}/devices/token`, {
26
- extClientId: 'mobile',
27
- os: 'Android',
28
- });
29
- const { resultData: { deviceToken }, } = deviceTokenResponse;
30
- debug(`Sending OTP to phone number ${phoneNumber}`);
31
- const otpPrepareResponse = await (0, fetch_1.fetchPost)(`${IDENTITY_SERVER_URL}/otp/prepare`, {
32
- factorValue: phoneNumber,
33
- deviceToken,
34
- otpChannel: 'SMS_OTP',
35
- });
36
- const { resultData: { otpContext }, } = otpPrepareResponse;
37
- this.otpContext = otpContext;
38
- return {
39
- success: true,
40
- };
19
+ class OneZeroScraper extends _baseScraper.BaseScraper {
20
+ async triggerTwoFactorAuth(phoneNumber) {
21
+ if (!phoneNumber.startsWith('+')) {
22
+ return (0, _errors.createGenericError)('A full international phone number starting with + and a three digit country code is required');
41
23
  }
42
- async getLongTermTwoFactorToken(otpCode) {
43
- if (!this.otpContext) {
44
- return (0, errors_1.createGenericError)('triggerOtp was not called before calling getPermenantOtpToken()');
45
- }
46
- debug('Requesting OTP token');
47
- const otpVerifyResponse = await (0, fetch_1.fetchPost)(`${IDENTITY_SERVER_URL}/otp/verify`, {
48
- otpContext: this.otpContext,
49
- otpCode,
50
- });
51
- const { resultData: { otpToken }, } = otpVerifyResponse;
52
- return { success: true, longTermTwoFactorAuthToken: otpToken };
24
+ debug('Fetching device token');
25
+ const deviceTokenResponse = await (0, _fetch.fetchPost)(`${IDENTITY_SERVER_URL}/devices/token`, {
26
+ extClientId: 'mobile',
27
+ os: 'Android'
28
+ });
29
+ const {
30
+ resultData: {
31
+ deviceToken
32
+ }
33
+ } = deviceTokenResponse;
34
+ debug(`Sending OTP to phone number ${phoneNumber}`);
35
+ const otpPrepareResponse = await (0, _fetch.fetchPost)(`${IDENTITY_SERVER_URL}/otp/prepare`, {
36
+ factorValue: phoneNumber,
37
+ deviceToken,
38
+ otpChannel: 'SMS_OTP'
39
+ });
40
+ const {
41
+ resultData: {
42
+ otpContext
43
+ }
44
+ } = otpPrepareResponse;
45
+ this.otpContext = otpContext;
46
+ return {
47
+ success: true
48
+ };
49
+ }
50
+ async getLongTermTwoFactorToken(otpCode) {
51
+ if (!this.otpContext) {
52
+ return (0, _errors.createGenericError)('triggerOtp was not called before calling getPermenantOtpToken()');
53
53
  }
54
- async resolveOtpToken(credentials) {
55
- if ('otpLongTermToken' in credentials) {
56
- if (!credentials.otpLongTermToken) {
57
- return (0, errors_1.createGenericError)('Invalid otpLongTermToken');
58
- }
59
- return { success: true, longTermTwoFactorAuthToken: credentials.otpLongTermToken };
60
- }
61
- if (!credentials.otpCodeRetriever) {
62
- return {
63
- success: false,
64
- errorType: errors_1.ScraperErrorTypes.TwoFactorRetrieverMissing,
65
- errorMessage: 'otpCodeRetriever is required when otpPermanentToken is not provided',
66
- };
67
- }
68
- if (!credentials.phoneNumber) {
69
- return (0, errors_1.createGenericError)('phoneNumber is required when providing a otpCodeRetriever callback');
70
- }
71
- debug('Triggering user supplied otpCodeRetriever callback');
72
- const triggerResult = await this.triggerTwoFactorAuth(credentials.phoneNumber);
73
- if (!triggerResult.success) {
74
- return triggerResult;
75
- }
76
- const otpCode = await credentials.otpCodeRetriever();
77
- const otpTokenResult = await this.getLongTermTwoFactorToken(otpCode);
78
- if (!otpTokenResult.success) {
79
- return otpTokenResult;
80
- }
81
- return { success: true, longTermTwoFactorAuthToken: otpTokenResult.longTermTwoFactorAuthToken };
54
+ debug('Requesting OTP token');
55
+ const otpVerifyResponse = await (0, _fetch.fetchPost)(`${IDENTITY_SERVER_URL}/otp/verify`, {
56
+ otpContext: this.otpContext,
57
+ otpCode
58
+ });
59
+ const {
60
+ resultData: {
61
+ otpToken
62
+ }
63
+ } = otpVerifyResponse;
64
+ return {
65
+ success: true,
66
+ longTermTwoFactorAuthToken: otpToken
67
+ };
68
+ }
69
+ async resolveOtpToken(credentials) {
70
+ if ('otpLongTermToken' in credentials) {
71
+ if (!credentials.otpLongTermToken) {
72
+ return (0, _errors.createGenericError)('Invalid otpLongTermToken');
73
+ }
74
+ return {
75
+ success: true,
76
+ longTermTwoFactorAuthToken: credentials.otpLongTermToken
77
+ };
82
78
  }
83
- async login(credentials) {
84
- const otpTokenResult = await this.resolveOtpToken(credentials);
85
- if (!otpTokenResult.success) {
86
- return otpTokenResult;
87
- }
88
- debug('Requesting id token');
89
- const getIdTokenResponse = await (0, fetch_1.fetchPost)(`${IDENTITY_SERVER_URL}/getIdToken`, {
90
- otpSmsToken: otpTokenResult.longTermTwoFactorAuthToken,
91
- email: credentials.email,
92
- pass: credentials.password,
93
- pinCode: '',
94
- });
95
- const { resultData: { idToken }, } = getIdTokenResponse;
96
- debug('Requesting session token');
97
- const getSessionTokenResponse = await (0, fetch_1.fetchPost)(`${IDENTITY_SERVER_URL}/sessions/token`, {
98
- idToken,
99
- pass: credentials.password,
100
- });
101
- const { resultData: { accessToken }, } = getSessionTokenResponse;
102
- this.accessToken = accessToken;
103
- return {
104
- success: true,
105
- persistentOtpToken: otpTokenResult.longTermTwoFactorAuthToken,
106
- };
79
+ if (!credentials.otpCodeRetriever) {
80
+ return {
81
+ success: false,
82
+ errorType: _errors.ScraperErrorTypes.TwoFactorRetrieverMissing,
83
+ errorMessage: 'otpCodeRetriever is required when otpPermanentToken is not provided'
84
+ };
107
85
  }
108
- async fetchPortfolioMovements(portfolio, startDate) {
109
- // TODO: Find out if we need the other accounts, there seems to always be one
110
- const account = portfolio.accounts[0];
111
- let cursor = null;
112
- const movements = [];
113
- while (!movements.length || new Date(movements[0].movementTimestamp) >= startDate) {
114
- debug(`Fetching transactions for account ${portfolio.portfolioNum}...`);
115
- const { movements: { movements: newMovements, pagination }, } = await (0, fetch_1.fetchGraphql)(GRAPHQL_API_URL, one_zero_queries_1.GET_MOVEMENTS, {
116
- portfolioId: portfolio.portfolioId,
117
- accountId: account.accountId,
118
- language: 'HEBREW',
119
- pagination: {
120
- cursor,
121
- limit: 50,
122
- },
123
- }, { authorization: `Bearer ${this.accessToken}` });
124
- movements.unshift(...newMovements);
125
- cursor = pagination.cursor;
126
- if (!pagination.hasMore) {
127
- break;
128
- }
129
- }
130
- movements.sort((x, y) => new Date(x.movementTimestamp).valueOf() - new Date(y.movementTimestamp).valueOf());
131
- const matchingMovements = movements.filter(movement => new Date(movement.movementTimestamp) >= startDate);
132
- return {
133
- accountNumber: portfolio.portfolioNum,
134
- balance: !movements.length ? 0 : parseFloat(movements[movements.length - 1].runningBalance),
135
- txns: matchingMovements.map((movement) => {
136
- const hasInstallments = movement.transaction?.enrichment?.recurrences?.some(x => x.isRecurrent);
137
- const modifier = movement.creditDebit === 'DEBIT' ? -1 : 1;
138
- return {
139
- identifier: movement.movementId,
140
- date: movement.valueDate,
141
- chargedAmount: +movement.movementAmount * modifier,
142
- chargedCurrency: movement.movementCurrency,
143
- originalAmount: +movement.movementAmount * modifier,
144
- originalCurrency: movement.movementCurrency,
145
- description: this.sanitizeHebrew(movement.description),
146
- processedDate: movement.movementTimestamp,
147
- status: transactions_1.TransactionStatuses.Completed,
148
- type: hasInstallments ? transactions_1.TransactionTypes.Installments : transactions_1.TransactionTypes.Normal,
149
- };
150
- }),
151
- };
86
+ if (!credentials.phoneNumber) {
87
+ return (0, _errors.createGenericError)('phoneNumber is required when providing a otpCodeRetriever callback');
88
+ }
89
+ debug('Triggering user supplied otpCodeRetriever callback');
90
+ const triggerResult = await this.triggerTwoFactorAuth(credentials.phoneNumber);
91
+ if (!triggerResult.success) {
92
+ return triggerResult;
152
93
  }
153
- /**
154
- * one zero hebrew strings are reversed with a unicode control character that forces display in LTR order
155
- * We need to remove the unicode control character, and then reverse hebrew substrings inside the string
156
- */
157
- sanitizeHebrew(text) {
158
- if (!text.includes('\u202d')) {
159
- return text.trim();
94
+ const otpCode = await credentials.otpCodeRetriever();
95
+ const otpTokenResult = await this.getLongTermTwoFactorToken(otpCode);
96
+ if (!otpTokenResult.success) {
97
+ return otpTokenResult;
98
+ }
99
+ return {
100
+ success: true,
101
+ longTermTwoFactorAuthToken: otpTokenResult.longTermTwoFactorAuthToken
102
+ };
103
+ }
104
+ async login(credentials) {
105
+ const otpTokenResult = await this.resolveOtpToken(credentials);
106
+ if (!otpTokenResult.success) {
107
+ return otpTokenResult;
108
+ }
109
+ debug('Requesting id token');
110
+ const getIdTokenResponse = await (0, _fetch.fetchPost)(`${IDENTITY_SERVER_URL}/getIdToken`, {
111
+ otpSmsToken: otpTokenResult.longTermTwoFactorAuthToken,
112
+ email: credentials.email,
113
+ pass: credentials.password,
114
+ pinCode: ''
115
+ });
116
+ const {
117
+ resultData: {
118
+ idToken
119
+ }
120
+ } = getIdTokenResponse;
121
+ debug('Requesting session token');
122
+ const getSessionTokenResponse = await (0, _fetch.fetchPost)(`${IDENTITY_SERVER_URL}/sessions/token`, {
123
+ idToken,
124
+ pass: credentials.password
125
+ });
126
+ const {
127
+ resultData: {
128
+ accessToken
129
+ }
130
+ } = getSessionTokenResponse;
131
+ this.accessToken = accessToken;
132
+ return {
133
+ success: true,
134
+ persistentOtpToken: otpTokenResult.longTermTwoFactorAuthToken
135
+ };
136
+ }
137
+ async fetchPortfolioMovements(portfolio, startDate) {
138
+ // TODO: Find out if we need the other accounts, there seems to always be one
139
+ const account = portfolio.accounts[0];
140
+ let cursor = null;
141
+ const movements = [];
142
+ while (!movements.length || new Date(movements[0].movementTimestamp) >= startDate) {
143
+ debug(`Fetching transactions for account ${portfolio.portfolioNum}...`);
144
+ const {
145
+ movements: {
146
+ movements: newMovements,
147
+ pagination
160
148
  }
161
- const plainString = text.replace(/\u202d/gi, '').trim();
162
- const hebrewSubStringsRanges = [...plainString.matchAll(HEBREW_WORDS_REGEX)];
163
- const rangesToReverse = hebrewSubStringsRanges.map(str => ({ start: str.index, end: str.index + str[0].length }));
164
- const out = [];
165
- let index = 0;
166
- for (const { start, end } of rangesToReverse) {
167
- out.push(...plainString.substring(index, start));
168
- index += start - index;
169
- const reversed = [...plainString.substring(start, end)].reverse();
170
- out.push(...reversed);
171
- index += end - start;
149
+ } = await (0, _fetch.fetchGraphql)(GRAPHQL_API_URL, _oneZeroQueries.GET_MOVEMENTS, {
150
+ portfolioId: portfolio.portfolioId,
151
+ accountId: account.accountId,
152
+ language: 'HEBREW',
153
+ pagination: {
154
+ cursor,
155
+ limit: 50
172
156
  }
173
- out.push(...plainString.substring(index, plainString.length));
174
- return out.join('');
157
+ }, {
158
+ authorization: `Bearer ${this.accessToken}`
159
+ });
160
+ movements.unshift(...newMovements);
161
+ cursor = pagination.cursor;
162
+ if (!pagination.hasMore) {
163
+ break;
164
+ }
175
165
  }
176
- async fetchData() {
177
- if (!this.accessToken) {
178
- return (0, errors_1.createGenericError)('login() was not called');
179
- }
180
- const defaultStartMoment = (0, moment_1.default)().subtract(1, 'years').add(1, 'day');
181
- const startDate = this.options.startDate || defaultStartMoment.toDate();
182
- const startMoment = moment_1.default.max(defaultStartMoment, (0, moment_1.default)(startDate));
183
- debug('Fetching account list');
184
- const result = await (0, fetch_1.fetchGraphql)(GRAPHQL_API_URL, one_zero_queries_1.GET_CUSTOMER, {}, { authorization: `Bearer ${this.accessToken}` });
185
- const portfolios = result.customer.flatMap(customer => customer.portfolios || []);
166
+ movements.sort((x, y) => new Date(x.movementTimestamp).valueOf() - new Date(y.movementTimestamp).valueOf());
167
+ const matchingMovements = movements.filter(movement => new Date(movement.movementTimestamp) >= startDate);
168
+ return {
169
+ accountNumber: portfolio.portfolioNum,
170
+ balance: !movements.length ? 0 : parseFloat(movements[movements.length - 1].runningBalance),
171
+ txns: matchingMovements.map(movement => {
172
+ const hasInstallments = movement.transaction?.enrichment?.recurrences?.some(x => x.isRecurrent);
173
+ const modifier = movement.creditDebit === 'DEBIT' ? -1 : 1;
186
174
  return {
187
- success: true,
188
- accounts: await Promise.all(portfolios.map(portfolio => this.fetchPortfolioMovements(portfolio, startMoment.toDate()))),
175
+ identifier: movement.movementId,
176
+ date: movement.valueDate,
177
+ chargedAmount: +movement.movementAmount * modifier,
178
+ chargedCurrency: movement.movementCurrency,
179
+ originalAmount: +movement.movementAmount * modifier,
180
+ originalCurrency: movement.movementCurrency,
181
+ description: this.sanitizeHebrew(movement.description),
182
+ processedDate: movement.movementTimestamp,
183
+ status: _transactions.TransactionStatuses.Completed,
184
+ type: hasInstallments ? _transactions.TransactionTypes.Installments : _transactions.TransactionTypes.Normal
189
185
  };
186
+ })
187
+ };
188
+ }
189
+
190
+ /**
191
+ * one zero hebrew strings are reversed with a unicode control character that forces display in LTR order
192
+ * We need to remove the unicode control character, and then reverse hebrew substrings inside the string
193
+ */
194
+ sanitizeHebrew(text) {
195
+ if (!text.includes('\u202d')) {
196
+ return text.trim();
197
+ }
198
+ const plainString = text.replace(/\u202d/gi, '').trim();
199
+ const hebrewSubStringsRanges = [...plainString.matchAll(HEBREW_WORDS_REGEX)];
200
+ const rangesToReverse = hebrewSubStringsRanges.map(str => ({
201
+ start: str.index,
202
+ end: str.index + str[0].length
203
+ }));
204
+ const out = [];
205
+ let index = 0;
206
+ for (const {
207
+ start,
208
+ end
209
+ } of rangesToReverse) {
210
+ out.push(...plainString.substring(index, start));
211
+ index += start - index;
212
+ const reversed = [...plainString.substring(start, end)].reverse();
213
+ out.push(...reversed);
214
+ index += end - start;
215
+ }
216
+ out.push(...plainString.substring(index, plainString.length));
217
+ return out.join('');
218
+ }
219
+ async fetchData() {
220
+ if (!this.accessToken) {
221
+ return (0, _errors.createGenericError)('login() was not called');
190
222
  }
223
+ const defaultStartMoment = (0, _moment.default)().subtract(1, 'years').add(1, 'day');
224
+ const startDate = this.options.startDate || defaultStartMoment.toDate();
225
+ const startMoment = _moment.default.max(defaultStartMoment, (0, _moment.default)(startDate));
226
+ debug('Fetching account list');
227
+ const result = await (0, _fetch.fetchGraphql)(GRAPHQL_API_URL, _oneZeroQueries.GET_CUSTOMER, {}, {
228
+ authorization: `Bearer ${this.accessToken}`
229
+ });
230
+ const portfolios = result.customer.flatMap(customer => customer.portfolios || []);
231
+ return {
232
+ success: true,
233
+ accounts: await Promise.all(portfolios.map(portfolio => this.fetchPortfolioMovements(portfolio, startMoment.toDate())))
234
+ };
235
+ }
191
236
  }
192
237
  exports.default = OneZeroScraper;
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLXplcm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyYXBlcnMvb25lLXplcm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyREFBbUM7QUFDbkMsNENBQTRDO0FBQzVDLDRDQUEyRDtBQUMzRCxrREFLeUI7QUFDekIsaURBQTZDO0FBQzdDLHFDQUFpRTtBQU9qRSx5REFBaUU7QUFFakUsTUFBTSxrQkFBa0IsR0FBRywwREFBMEQsQ0FBQztBQUV0RixNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7QUE2RG5DLE1BQU0sbUJBQW1CLEdBQUcsbUNBQW1DLENBQUM7QUFFaEUsTUFBTSxlQUFlLEdBQUcsa0RBQWtELENBQUM7QUFZM0UsTUFBcUIsY0FBZSxTQUFRLDBCQUF1QztJQUN6RSxVQUFVLENBQVU7SUFFcEIsV0FBVyxDQUFVO0lBRTdCLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxXQUFtQjtRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQyxPQUFPLElBQUEsMkJBQWtCLEVBQ3ZCLDhGQUE4RixDQUMvRixDQUFDO1NBQ0g7UUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMvQixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSxpQkFBUyxFQUFDLEdBQUcsbUJBQW1CLGdCQUFnQixFQUFFO1lBQ2xGLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLEVBQUUsRUFBRSxTQUFTO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxFQUNKLFVBQVUsRUFBRSxFQUFFLFdBQVcsRUFBRSxHQUM1QixHQUFHLG1CQUFtQixDQUFDO1FBRXhCLEtBQUssQ0FBQywrQkFBK0IsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVwRCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBQSxpQkFBUyxFQUFDLEdBQUcsbUJBQW1CLGNBQWMsRUFBRTtZQUMv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dCc7XG5pbXBvcnQgeyBnZXREZWJ1ZyB9IGZyb20gJy4uL2hlbHBlcnMvZGVidWcnO1xuaW1wb3J0IHsgZmV0Y2hHcmFwaHFsLCBmZXRjaFBvc3QgfSBmcm9tICcuLi9oZWxwZXJzL2ZldGNoJztcbmltcG9ydCB7XG4gIHR5cGUgVHJhbnNhY3Rpb24gYXMgU2NyYXBpbmdUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25TdGF0dXNlcyxcbiAgVHJhbnNhY3Rpb25UeXBlcyxcbiAgdHlwZSBUcmFuc2FjdGlvbnNBY2NvdW50LFxufSBmcm9tICcuLi90cmFuc2FjdGlvbnMnO1xuaW1wb3J0IHsgQmFzZVNjcmFwZXIgfSBmcm9tICcuL2Jhc2Utc2NyYXBlcic7XG5pbXBvcnQgeyBTY3JhcGVyRXJyb3JUeXBlcywgY3JlYXRlR2VuZXJpY0Vycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBTY3JhcGVyR2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlblJlc3VsdCxcbiAgdHlwZSBTY3JhcGVyTG9naW5SZXN1bHQsXG4gIHR5cGUgU2NyYXBlclNjcmFwaW5nUmVzdWx0LFxuICB0eXBlIFNjcmFwZXJUd29GYWN0b3JBdXRoVHJpZ2dlclJlc3VsdCxcbn0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR0VUX0NVU1RPTUVSLCBHRVRfTU9WRU1FTlRTIH0gZnJvbSAnLi9vbmUtemVyby1xdWVyaWVzJztcblxuY29uc3QgSEVCUkVXX1dPUkRTX1JFR0VYID0gL1tcXHUwNTkwLVxcdTA1RkZdW1xcdTA1OTAtXFx1MDVGRlwiJ1xcLV8gL1xcXFxdKltcXHUwNTkwLVxcdTA1RkZdL2c7XG5cbmNvbnN0IGRlYnVnID0gZ2V0RGVidWcoJ29uZS16ZXJvJyk7XG5cbnR5cGUgQWNjb3VudCA9IHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG59O1xuXG50eXBlIFBvcnRmb2xpbyA9IHtcbiAgYWNjb3VudHM6IEFycmF5PEFjY291bnQ+O1xuICBwb3J0Zm9saW9JZDogc3RyaW5nO1xuICBwb3J0Zm9saW9OdW06IHN0cmluZztcbn07XG5cbnR5cGUgQ3VzdG9tZXIgPSB7XG4gIGN1c3RvbWVySWQ6IHN0cmluZztcbiAgcG9ydGZvbGlvcz86IEFycmF5PFBvcnRmb2xpbz4gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgQ2F0ZWdvcnkgPSB7XG4gIGNhdGVnb3J5SWQ6IG51bWJlcjtcbiAgZGF0YVNvdXJjZTogc3RyaW5nO1xuICBzdWJDYXRlZ29yeUlkPzogbnVtYmVyIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFJlY3VycmVuY2UgPSB7XG4gIGRhdGFTb3VyY2U6IHN0cmluZztcbiAgaXNSZWN1cnJlbnQ6IGJvb2xlYW47XG59O1xuXG50eXBlIFRyYW5zYWN0aW9uRW5yaWNobWVudCA9IHtcbiAgY2F0ZWdvcmllcz86IENhdGVnb3J5W10gfCBudWxsO1xuICByZWN1cnJlbmNlcz86IFJlY3VycmVuY2VbXSB8IG51bGw7XG59O1xuXG50eXBlIFRyYW5zYWN0aW9uID0ge1xuICBlbnJpY2htZW50PzogVHJhbnNhY3Rpb25FbnJpY2htZW50IHwgbnVsbDtcbiAgLy8gVE9ETzogR2V0IGluc3RhbGxtZW50cyBpbmZvcm1hdGlvbiBoZXJlXG4gIC8vIHRyYW5zYWN0aW9uRGV0YWlsczogVHJhbnNhY3Rpb25EZXRhaWxzO1xufTtcblxudHlwZSBNb3ZlbWVudCA9IHtcbiAgYWNjb3VudElkOiBzdHJpbmc7XG4gIGJhbmtDdXJyZW5jeUFtb3VudDogc3RyaW5nO1xuICBib29raW5nRGF0ZTogc3RyaW5nO1xuICBjb252ZXJzaW9uUmF0ZTogc3RyaW5nO1xuICBjcmVkaXREZWJpdDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBpc1JldmVyc2VkOiBib29sZWFuO1xuICBtb3ZlbWVudEFtb3VudDogc3RyaW5nO1xuICBtb3ZlbWVudEN1cnJlbmN5OiBzdHJpbmc7XG4gIG1vdmVtZW50SWQ6IHN0cmluZztcbiAgbW92ZW1lbnRSZXZlcnNlZElkPzogc3RyaW5nIHwgbnVsbDtcbiAgbW92ZW1lbnRUaW1lc3RhbXA6IHN0cmluZztcbiAgbW92ZW1lbnRUeXBlOiBzdHJpbmc7XG4gIHBvcnRmb2xpb0lkOiBzdHJpbmc7XG4gIHJ1bm5pbmdCYWxhbmNlOiBzdHJpbmc7XG4gIHRyYW5zYWN0aW9uPzogVHJhbnNhY3Rpb24gfCBudWxsO1xuICB2YWx1ZURhdGU6IHN0cmluZztcbn07XG5cbnR5cGUgUXVlcnlQYWdpbmF0aW9uID0geyBoYXNNb3JlOiBib29sZWFuOyBjdXJzb3I6IHN0cmluZyB9O1xuXG5jb25zdCBJREVOVElUWV9TRVJWRVJfVVJMID0gJ2h0dHBzOi8vaWRlbnRpdHkudGZkLWJhbmsuY29tL3YxLyc7XG5cbmNvbnN0IEdSQVBIUUxfQVBJX1VSTCA9ICdodHRwczovL21vYmlsZS50ZmQtYmFuay5jb20vbW9iaWxlLWdyYXBoL2dyYXBocWwnO1xuXG50eXBlIFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzID0geyBlbWFpbDogc3RyaW5nOyBwYXNzd29yZDogc3RyaW5nIH0gJiAoXG4gIHwge1xuICAgICAgb3RwQ29kZVJldHJpZXZlcjogKCkgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgcGhvbmVOdW1iZXI6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgb3RwTG9uZ1Rlcm1Ub2tlbjogc3RyaW5nO1xuICAgIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9uZVplcm9TY3JhcGVyIGV4dGVuZHMgQmFzZVNjcmFwZXI8U2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHM+IHtcbiAgcHJpdmF0ZSBvdHBDb250ZXh0Pzogc3RyaW5nO1xuXG4gIHByaXZhdGUgYWNjZXNzVG9rZW4/OiBzdHJpbmc7XG5cbiAgYXN5bmMgdHJpZ2dlclR3b0ZhY3RvckF1dGgocGhvbmVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8U2NyYXBlclR3b0ZhY3RvckF1dGhUcmlnZ2VyUmVzdWx0PiB7XG4gICAgaWYgKCFwaG9uZU51bWJlci5zdGFydHNXaXRoKCcrJykpIHtcbiAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljRXJyb3IoXG4gICAgICAgICdBIGZ1bGwgaW50ZXJuYXRpb25hbCBwaG9uZSBudW1iZXIgc3RhcnRpbmcgd2l0aCArIGFuZCBhIHRocmVlIGRpZ2l0IGNvdW50cnkgY29kZSBpcyByZXF1aXJlZCcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGRlYnVnKCdGZXRjaGluZyBkZXZpY2UgdG9rZW4nKTtcbiAgICBjb25zdCBkZXZpY2VUb2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2hQb3N0KGAke0lERU5USVRZX1NFUlZFUl9VUkx9L2RldmljZXMvdG9rZW5gLCB7XG4gICAgICBleHRDbGllbnRJZDogJ21vYmlsZScsXG4gICAgICBvczogJ0FuZHJvaWQnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgcmVzdWx0RGF0YTogeyBkZXZpY2VUb2tlbiB9LFxuICAgIH0gPSBkZXZpY2VUb2tlblJlc3BvbnNlO1xuXG4gICAgZGVidWcoYFNlbmRpbmcgT1RQIHRvIHBob25lIG51bWJlciAke3Bob25lTnVtYmVyfWApO1xuXG4gICAgY29uc3Qgb3RwUHJlcGFyZVJlc3BvbnNlID0gYXdhaXQgZmV0Y2hQb3N0KGAke0lERU5USVRZX1NFUlZFUl9VUkx9L290cC9wcmVwYXJlYCwge1xuICAgICAgZmFjdG9yVmFsdWU6IHBob25lTnVtYmVyLFxuICAgICAgZGV2aWNlVG9rZW4sXG4gICAgICBvdHBDaGFubmVsOiAnU01TX09UUCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7XG4gICAgICByZXN1bHREYXRhOiB7IG90cENvbnRleHQgfSxcbiAgICB9ID0gb3RwUHJlcGFyZVJlc3BvbnNlO1xuXG4gICAgdGhpcy5vdHBDb250ZXh0ID0gb3RwQ29udGV4dDtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlbihvdHBDb2RlOiBzdHJpbmcpOiBQcm9taXNlPFNjcmFwZXJHZXRMb25nVGVybVR3b0ZhY3RvclRva2VuUmVzdWx0PiB7XG4gICAgaWYgKCF0aGlzLm90cENvbnRleHQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljRXJyb3IoJ3RyaWdnZXJPdHAgd2FzIG5vdCBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgZ2V0UGVybWVuYW50T3RwVG9rZW4oKScpO1xuICAgIH1cblxuICAgIGRlYnVnKCdSZXF1ZXN0aW5nIE9UUCB0b2tlbicpO1xuICAgIGNvbnN0IG90cFZlcmlmeVJlc3BvbnNlID0gYXdhaXQgZmV0Y2hQb3N0KGAke0lERU5USVRZX1NFUlZFUl9VUkx9L290cC92ZXJpZnlgLCB7XG4gICAgICBvdHBDb250ZXh0OiB0aGlzLm90cENvbnRleHQsXG4gICAgICBvdHBDb2RlLFxuICAgIH0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgcmVzdWx0RGF0YTogeyBvdHBUb2tlbiB9LFxuICAgIH0gPSBvdHBWZXJpZnlSZXNwb25zZTtcbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBsb25nVGVybVR3b0ZhY3RvckF1dGhUb2tlbjogb3RwVG9rZW4gfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZU90cFRva2VuKFxuICAgIGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyxcbiAgKTogUHJvbWlzZTxTY3JhcGVyR2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlblJlc3VsdD4ge1xuICAgIGlmICgnb3RwTG9uZ1Rlcm1Ub2tlbicgaW4gY3JlZGVudGlhbHMpIHtcbiAgICAgIGlmICghY3JlZGVudGlhbHMub3RwTG9uZ1Rlcm1Ub2tlbikge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2VuZXJpY0Vycm9yKCdJbnZhbGlkIG90cExvbmdUZXJtVG9rZW4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIGxvbmdUZXJtVHdvRmFjdG9yQXV0aFRva2VuOiBjcmVkZW50aWFscy5vdHBMb25nVGVybVRva2VuIH07XG4gICAgfVxuXG4gICAgaWYgKCFjcmVkZW50aWFscy5vdHBDb2RlUmV0cmlldmVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgZXJyb3JUeXBlOiBTY3JhcGVyRXJyb3JUeXBlcy5Ud29GYWN0b3JSZXRyaWV2ZXJNaXNzaW5nLFxuICAgICAgICBlcnJvck1lc3NhZ2U6ICdvdHBDb2RlUmV0cmlldmVyIGlzIHJlcXVpcmVkIHdoZW4gb3RwUGVybWFuZW50VG9rZW4gaXMgbm90IHByb3ZpZGVkJyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKCFjcmVkZW50aWFscy5waG9uZU51bWJlcikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUdlbmVyaWNFcnJvcigncGhvbmVOdW1iZXIgaXMgcmVxdWlyZWQgd2hlbiBwcm92aWRpbmcgYSBvdHBDb2RlUmV0cmlldmVyIGNhbGxiYWNrJyk7XG4gICAgfVxuXG4gICAgZGVidWcoJ1RyaWdnZXJpbmcgdXNlciBzdXBwbGllZCBvdHBDb2RlUmV0cmlldmVyIGNhbGxiYWNrJyk7XG4gICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRoaXMudHJpZ2dlclR3b0ZhY3RvckF1dGgoY3JlZGVudGlhbHMucGhvbmVOdW1iZXIpO1xuXG4gICAgaWYgKCF0cmlnZ2VyUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiB0cmlnZ2VyUmVzdWx0O1xuICAgIH1cblxuICAgIGNvbnN0IG90cENvZGUgPSBhd2FpdCBjcmVkZW50aWFscy5vdHBDb2RlUmV0cmlldmVyKCk7XG5cbiAgICBjb25zdCBvdHBUb2tlblJlc3VsdCA9IGF3YWl0IHRoaXMuZ2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlbihvdHBDb2RlKTtcbiAgICBpZiAoIW90cFRva2VuUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBvdHBUb2tlblJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBsb25nVGVybVR3b0ZhY3RvckF1dGhUb2tlbjogb3RwVG9rZW5SZXN1bHQubG9uZ1Rlcm1Ud29GYWN0b3JBdXRoVG9rZW4gfTtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKGNyZWRlbnRpYWxzOiBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyk6IFByb21pc2U8U2NyYXBlckxvZ2luUmVzdWx0PiB7XG4gICAgY29uc3Qgb3RwVG9rZW5SZXN1bHQgPSBhd2FpdCB0aGlzLnJlc29sdmVPdHBUb2tlbihjcmVkZW50aWFscyk7XG4gICAgaWYgKCFvdHBUb2tlblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gb3RwVG9rZW5SZXN1bHQ7XG4gICAgfVxuXG4gICAgZGVidWcoJ1JlcXVlc3RpbmcgaWQgdG9rZW4nKTtcbiAgICBjb25zdCBnZXRJZFRva2VuUmVzcG9uc2UgPSBhd2FpdCBmZXRjaFBvc3QoYCR7SURFTlRJVFlfU0VSVkVSX1VSTH0vZ2V0SWRUb2tlbmAsIHtcbiAgICAgIG90cFNtc1Rva2VuOiBvdHBUb2tlblJlc3VsdC5sb25nVGVybVR3b0ZhY3RvckF1dGhUb2tlbixcbiAgICAgIGVtYWlsOiBjcmVkZW50aWFscy5lbWFpbCxcbiAgICAgIHBhc3M6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgcGluQ29kZTogJycsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7XG4gICAgICByZXN1bHREYXRhOiB7IGlkVG9rZW4gfSxcbiAgICB9ID0gZ2V0SWRUb2tlblJlc3BvbnNlO1xuXG4gICAgZGVidWcoJ1JlcXVlc3Rpbmcgc2Vzc2lvbiB0b2tlbicpO1xuXG4gICAgY29uc3QgZ2V0U2Vzc2lvblRva2VuUmVzcG9uc2UgPSBhd2FpdCBmZXRjaFBvc3QoYCR7SURFTlRJVFlfU0VSVkVSX1VSTH0vc2Vzc2lvbnMvdG9rZW5gLCB7XG4gICAgICBpZFRva2VuLFxuICAgICAgcGFzczogY3JlZGVudGlhbHMucGFzc3dvcmQsXG4gICAgfSk7XG5cbiAgICBjb25zdCB7XG4gICAgICByZXN1bHREYXRhOiB7IGFjY2Vzc1Rva2VuIH0sXG4gICAgfSA9IGdldFNlc3Npb25Ub2tlblJlc3BvbnNlO1xuXG4gICAgdGhpcy5hY2Nlc3NUb2tlbiA9IGFjY2Vzc1Rva2VuO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBwZXJzaXN0ZW50T3RwVG9rZW46IG90cFRva2VuUmVzdWx0LmxvbmdUZXJtVHdvRmFjdG9yQXV0aFRva2VuLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoUG9ydGZvbGlvTW92ZW1lbnRzKHBvcnRmb2xpbzogUG9ydGZvbGlvLCBzdGFydERhdGU6IERhdGUpOiBQcm9taXNlPFRyYW5zYWN0aW9uc0FjY291bnQ+IHtcbiAgICAvLyBUT0RPOiBGaW5kIG91dCBpZiB3ZSBuZWVkIHRoZSBvdGhlciBhY2NvdW50cywgdGhlcmUgc2VlbXMgdG8gYWx3YXlzIGJlIG9uZVxuICAgIGNvbnN0IGFjY291bnQgPSBwb3J0Zm9saW8uYWNjb3VudHNbMF07XG4gICAgbGV0IGN1cnNvciA9IG51bGw7XG4gICAgY29uc3QgbW92ZW1lbnRzID0gW107XG5cbiAgICB3aGlsZSAoIW1vdmVtZW50cy5sZW5ndGggfHwgbmV3IERhdGUobW92ZW1lbnRzWzBdLm1vdmVtZW50VGltZXN0YW1wKSA+PSBzdGFydERhdGUpIHtcbiAgICAgIGRlYnVnKGBGZXRjaGluZyB0cmFuc2FjdGlvbnMgZm9yIGFjY291bnQgJHtwb3J0Zm9saW8ucG9ydGZvbGlvTnVtfS4uLmApO1xuICAgICAgY29uc3Qge1xuICAgICAgICBtb3ZlbWVudHM6IHsgbW92ZW1lbnRzOiBuZXdNb3ZlbWVudHMsIHBhZ2luYXRpb24gfSxcbiAgICAgIH06IHsgbW92ZW1lbnRzOiB7IG1vdmVtZW50czogTW92ZW1lbnRbXTsgcGFnaW5hdGlvbjogUXVlcnlQYWdpbmF0aW9uIH0gfSA9IGF3YWl0IGZldGNoR3JhcGhxbChcbiAgICAgICAgR1JBUEhRTF9BUElfVVJMLFxuICAgICAgICBHRVRfTU9WRU1FTlRTLFxuICAgICAgICB7XG4gICAgICAgICAgcG9ydGZvbGlvSWQ6IHBvcnRmb2xpby5wb3J0Zm9saW9JZCxcbiAgICAgICAgICBhY2NvdW50SWQ6IGFjY291bnQuYWNjb3VudElkLFxuICAgICAgICAgIGxhbmd1YWdlOiAnSEVCUkVXJyxcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBjdXJzb3IsXG4gICAgICAgICAgICBsaW1pdDogNTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlbn1gIH0sXG4gICAgICApO1xuXG4gICAgICBtb3ZlbWVudHMudW5zaGlmdCguLi5uZXdNb3ZlbWVudHMpO1xuICAgICAgY3Vyc29yID0gcGFnaW5hdGlvbi5jdXJzb3I7XG4gICAgICBpZiAoIXBhZ2luYXRpb24uaGFzTW9yZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlbWVudHMuc29ydCgoeCwgeSkgPT4gbmV3IERhdGUoeC5tb3ZlbWVudFRpbWVzdGFtcCkudmFsdWVPZigpIC0gbmV3IERhdGUoeS5tb3ZlbWVudFRpbWVzdGFtcCkudmFsdWVPZigpKTtcblxuICAgIGNvbnN0IG1hdGNoaW5nTW92ZW1lbnRzID0gbW92ZW1lbnRzLmZpbHRlcihtb3ZlbWVudCA9PiBuZXcgRGF0ZShtb3ZlbWVudC5tb3ZlbWVudFRpbWVzdGFtcCkgPj0gc3RhcnREYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgYWNjb3VudE51bWJlcjogcG9ydGZvbGlvLnBvcnRmb2xpb051bSxcbiAgICAgIGJhbGFuY2U6ICFtb3ZlbWVudHMubGVuZ3RoID8gMCA6IHBhcnNlRmxvYXQobW92ZW1lbnRzW21vdmVtZW50cy5sZW5ndGggLSAxXS5ydW5uaW5nQmFsYW5jZSksXG4gICAgICB0eG5zOiBtYXRjaGluZ01vdmVtZW50cy5tYXAoKG1vdmVtZW50KTogU2NyYXBpbmdUcmFuc2FjdGlvbiA9PiB7XG4gICAgICAgIGNvbnN0IGhhc0luc3RhbGxtZW50cyA9IG1vdmVtZW50LnRyYW5zYWN0aW9uPy5lbnJpY2htZW50Py5yZWN1cnJlbmNlcz8uc29tZSh4ID0+IHguaXNSZWN1cnJlbnQpO1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1vdmVtZW50LmNyZWRpdERlYml0ID09PSAnREVCSVQnID8gLTEgOiAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlkZW50aWZpZXI6IG1vdmVtZW50Lm1vdmVtZW50SWQsXG4gICAgICAgICAgZGF0ZTogbW92ZW1lbnQudmFsdWVEYXRlLFxuICAgICAgICAgIGNoYXJnZWRBbW91bnQ6ICttb3ZlbWVudC5tb3ZlbWVudEFtb3VudCAqIG1vZGlmaWVyLFxuICAgICAgICAgIGNoYXJnZWRDdXJyZW5jeTogbW92ZW1lbnQubW92ZW1lbnRDdXJyZW5jeSxcbiAgICAgICAgICBvcmlnaW5hbEFtb3VudDogK21vdmVtZW50Lm1vdmVtZW50QW1vdW50ICogbW9kaWZpZXIsXG4gICAgICAgICAgb3JpZ2luYWxDdXJyZW5jeTogbW92ZW1lbnQubW92ZW1lbnRDdXJyZW5jeSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5zYW5pdGl6ZUhlYnJldyhtb3ZlbWVudC5kZXNjcmlwdGlvbiksXG4gICAgICAgICAgcHJvY2Vzc2VkRGF0ZTogbW92ZW1lbnQubW92ZW1lbnRUaW1lc3RhbXAsXG4gICAgICAgICAgc3RhdHVzOiBUcmFuc2FjdGlvblN0YXR1c2VzLkNvbXBsZXRlZCxcbiAgICAgICAgICB0eXBlOiBoYXNJbnN0YWxsbWVudHMgPyBUcmFuc2FjdGlvblR5cGVzLkluc3RhbGxtZW50cyA6IFRyYW5zYWN0aW9uVHlwZXMuTm9ybWFsLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBvbmUgemVybyBoZWJyZXcgc3RyaW5ncyBhcmUgcmV2ZXJzZWQgd2l0aCBhIHVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXIgdGhhdCBmb3JjZXMgZGlzcGxheSBpbiBMVFIgb3JkZXJcbiAgICogV2UgbmVlZCB0byByZW1vdmUgdGhlIHVuaWNvZGUgY29udHJvbCBjaGFyYWN0ZXIsIGFuZCB0aGVuIHJldmVyc2UgaGVicmV3IHN1YnN0cmluZ3MgaW5zaWRlIHRoZSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgc2FuaXRpemVIZWJyZXcodGV4dDogc3RyaW5nKSB7XG4gICAgaWYgKCF0ZXh0LmluY2x1ZGVzKCdcXHUyMDJkJykpIHtcbiAgICAgIHJldHVybiB0ZXh0LnRyaW0oKTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGFpblN0cmluZyA9IHRleHQucmVwbGFjZSgvXFx1MjAyZC9naSwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBoZWJyZXdTdWJTdHJpbmdzUmFuZ2VzID0gWy4uLnBsYWluU3RyaW5nLm1hdGNoQWxsKEhFQlJFV19XT1JEU19SRUdFWCldO1xuICAgIGNvbnN0IHJhbmdlc1RvUmV2ZXJzZSA9IGhlYnJld1N1YlN0cmluZ3NSYW5nZXMubWFwKHN0ciA9PiAoeyBzdGFydDogc3RyLmluZGV4ISwgZW5kOiBzdHIuaW5kZXghICsgc3RyWzBdLmxlbmd0aCB9KSk7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgbGV0IGluZGV4ID0gMDtcblxuICAgIGZvciAoY29uc3QgeyBzdGFydCwgZW5kIH0gb2YgcmFuZ2VzVG9SZXZlcnNlKSB7XG4gICAgICBvdXQucHVzaCguLi5wbGFpblN0cmluZy5zdWJzdHJpbmcoaW5kZXgsIHN0YXJ0KSk7XG4gICAgICBpbmRleCArPSBzdGFydCAtIGluZGV4O1xuICAgICAgY29uc3QgcmV2ZXJzZWQgPSBbLi4ucGxhaW5TdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpXS5yZXZlcnNlKCk7XG4gICAgICBvdXQucHVzaCguLi5yZXZlcnNlZCk7XG4gICAgICBpbmRleCArPSBlbmQgLSBzdGFydDtcbiAgICB9XG5cbiAgICBvdXQucHVzaCguLi5wbGFpblN0cmluZy5zdWJzdHJpbmcoaW5kZXgsIHBsYWluU3RyaW5nLmxlbmd0aCkpO1xuXG4gICAgcmV0dXJuIG91dC5qb2luKCcnKTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRGF0YSgpOiBQcm9taXNlPFNjcmFwZXJTY3JhcGluZ1Jlc3VsdD4ge1xuICAgIGlmICghdGhpcy5hY2Nlc3NUb2tlbikge1xuICAgICAgcmV0dXJuIGNyZWF0ZUdlbmVyaWNFcnJvcignbG9naW4oKSB3YXMgbm90IGNhbGxlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmF1bHRTdGFydE1vbWVudCA9IG1vbWVudCgpLnN1YnRyYWN0KDEsICd5ZWFycycpLmFkZCgxLCAnZGF5Jyk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5vcHRpb25zLnN0YXJ0RGF0ZSB8fCBkZWZhdWx0U3RhcnRNb21lbnQudG9EYXRlKCk7XG4gICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQubWF4KGRlZmF1bHRTdGFydE1vbWVudCwgbW9tZW50KHN0YXJ0RGF0ZSkpO1xuXG4gICAgZGVidWcoJ0ZldGNoaW5nIGFjY291bnQgbGlzdCcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoR3JhcGhxbDx7IGN1c3RvbWVyOiBDdXN0b21lcltdIH0+KFxuICAgICAgR1JBUEhRTF9BUElfVVJMLFxuICAgICAgR0VUX0NVU1RPTUVSLFxuICAgICAge30sXG4gICAgICB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0aGlzLmFjY2Vzc1Rva2VufWAgfSxcbiAgICApO1xuICAgIGNvbnN0IHBvcnRmb2xpb3MgPSByZXN1bHQuY3VzdG9tZXIuZmxhdE1hcChjdXN0b21lciA9PiBjdXN0b21lci5wb3J0Zm9saW9zIHx8IFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgYWNjb3VudHM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBwb3J0Zm9saW9zLm1hcChwb3J0Zm9saW8gPT4gdGhpcy5mZXRjaFBvcnRmb2xpb01vdmVtZW50cyhwb3J0Zm9saW8sIHN0YXJ0TW9tZW50LnRvRGF0ZSgpKSksXG4gICAgICApLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
238
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbW9tZW50IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfZGVidWciLCJfZmV0Y2giLCJfdHJhbnNhY3Rpb25zIiwiX2Jhc2VTY3JhcGVyIiwiX2Vycm9ycyIsIl9vbmVaZXJvUXVlcmllcyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkhFQlJFV19XT1JEU19SRUdFWCIsImRlYnVnIiwiZ2V0RGVidWciLCJJREVOVElUWV9TRVJWRVJfVVJMIiwiR1JBUEhRTF9BUElfVVJMIiwiT25lWmVyb1NjcmFwZXIiLCJCYXNlU2NyYXBlciIsInRyaWdnZXJUd29GYWN0b3JBdXRoIiwicGhvbmVOdW1iZXIiLCJzdGFydHNXaXRoIiwiY3JlYXRlR2VuZXJpY0Vycm9yIiwiZGV2aWNlVG9rZW5SZXNwb25zZSIsImZldGNoUG9zdCIsImV4dENsaWVudElkIiwib3MiLCJyZXN1bHREYXRhIiwiZGV2aWNlVG9rZW4iLCJvdHBQcmVwYXJlUmVzcG9uc2UiLCJmYWN0b3JWYWx1ZSIsIm90cENoYW5uZWwiLCJvdHBDb250ZXh0Iiwic3VjY2VzcyIsImdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW4iLCJvdHBDb2RlIiwib3RwVmVyaWZ5UmVzcG9uc2UiLCJvdHBUb2tlbiIsImxvbmdUZXJtVHdvRmFjdG9yQXV0aFRva2VuIiwicmVzb2x2ZU90cFRva2VuIiwiY3JlZGVudGlhbHMiLCJvdHBMb25nVGVybVRva2VuIiwib3RwQ29kZVJldHJpZXZlciIsImVycm9yVHlwZSIsIlNjcmFwZXJFcnJvclR5cGVzIiwiVHdvRmFjdG9yUmV0cmlldmVyTWlzc2luZyIsImVycm9yTWVzc2FnZSIsInRyaWdnZXJSZXN1bHQiLCJvdHBUb2tlblJlc3VsdCIsImxvZ2luIiwiZ2V0SWRUb2tlblJlc3BvbnNlIiwib3RwU21zVG9rZW4iLCJlbWFpbCIsInBhc3MiLCJwYXNzd29yZCIsInBpbkNvZGUiLCJpZFRva2VuIiwiZ2V0U2Vzc2lvblRva2VuUmVzcG9uc2UiLCJhY2Nlc3NUb2tlbiIsInBlcnNpc3RlbnRPdHBUb2tlbiIsImZldGNoUG9ydGZvbGlvTW92ZW1lbnRzIiwicG9ydGZvbGlvIiwic3RhcnREYXRlIiwiYWNjb3VudCIsImFjY291bnRzIiwiY3Vyc29yIiwibW92ZW1lbnRzIiwibGVuZ3RoIiwiRGF0ZSIsIm1vdmVtZW50VGltZXN0YW1wIiwicG9ydGZvbGlvTnVtIiwibmV3TW92ZW1lbnRzIiwicGFnaW5hdGlvbiIsImZldGNoR3JhcGhxbCIsIkdFVF9NT1ZFTUVOVFMiLCJwb3J0Zm9saW9JZCIsImFjY291bnRJZCIsImxhbmd1YWdlIiwibGltaXQiLCJhdXRob3JpemF0aW9uIiwidW5zaGlmdCIsImhhc01vcmUiLCJzb3J0IiwieCIsInkiLCJ2YWx1ZU9mIiwibWF0Y2hpbmdNb3ZlbWVudHMiLCJmaWx0ZXIiLCJtb3ZlbWVudCIsImFjY291bnROdW1iZXIiLCJiYWxhbmNlIiwicGFyc2VGbG9hdCIsInJ1bm5pbmdCYWxhbmNlIiwidHhucyIsIm1hcCIsImhhc0luc3RhbGxtZW50cyIsInRyYW5zYWN0aW9uIiwiZW5yaWNobWVudCIsInJlY3VycmVuY2VzIiwic29tZSIsImlzUmVjdXJyZW50IiwibW9kaWZpZXIiLCJjcmVkaXREZWJpdCIsImlkZW50aWZpZXIiLCJtb3ZlbWVudElkIiwiZGF0ZSIsInZhbHVlRGF0ZSIsImNoYXJnZWRBbW91bnQiLCJtb3ZlbWVudEFtb3VudCIsImNoYXJnZWRDdXJyZW5jeSIsIm1vdmVtZW50Q3VycmVuY3kiLCJvcmlnaW5hbEFtb3VudCIsIm9yaWdpbmFsQ3VycmVuY3kiLCJkZXNjcmlwdGlvbiIsInNhbml0aXplSGVicmV3IiwicHJvY2Vzc2VkRGF0ZSIsInN0YXR1cyIsIlRyYW5zYWN0aW9uU3RhdHVzZXMiLCJDb21wbGV0ZWQiLCJ0eXBlIiwiVHJhbnNhY3Rpb25UeXBlcyIsIkluc3RhbGxtZW50cyIsIk5vcm1hbCIsInRleHQiLCJpbmNsdWRlcyIsInRyaW0iLCJwbGFpblN0cmluZyIsInJlcGxhY2UiLCJoZWJyZXdTdWJTdHJpbmdzUmFuZ2VzIiwibWF0Y2hBbGwiLCJyYW5nZXNUb1JldmVyc2UiLCJzdHIiLCJzdGFydCIsImluZGV4IiwiZW5kIiwib3V0IiwicHVzaCIsInN1YnN0cmluZyIsInJldmVyc2VkIiwicmV2ZXJzZSIsImpvaW4iLCJmZXRjaERhdGEiLCJkZWZhdWx0U3RhcnRNb21lbnQiLCJtb21lbnQiLCJzdWJ0cmFjdCIsImFkZCIsIm9wdGlvbnMiLCJ0b0RhdGUiLCJzdGFydE1vbWVudCIsIm1heCIsInJlc3VsdCIsIkdFVF9DVVNUT01FUiIsInBvcnRmb2xpb3MiLCJjdXN0b21lciIsImZsYXRNYXAiLCJQcm9taXNlIiwiYWxsIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JhcGVycy9vbmUtemVyby50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC9tb21lbnQnO1xuaW1wb3J0IHsgZ2V0RGVidWcgfSBmcm9tICcuLi9oZWxwZXJzL2RlYnVnJztcbmltcG9ydCB7IGZldGNoR3JhcGhxbCwgZmV0Y2hQb3N0IH0gZnJvbSAnLi4vaGVscGVycy9mZXRjaCc7XG5pbXBvcnQge1xuICB0eXBlIFRyYW5zYWN0aW9uIGFzIFNjcmFwaW5nVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uU3RhdHVzZXMsXG4gIFRyYW5zYWN0aW9uVHlwZXMsXG4gIHR5cGUgVHJhbnNhY3Rpb25zQWNjb3VudCxcbn0gZnJvbSAnLi4vdHJhbnNhY3Rpb25zJztcbmltcG9ydCB7IEJhc2VTY3JhcGVyIH0gZnJvbSAnLi9iYXNlLXNjcmFwZXInO1xuaW1wb3J0IHsgU2NyYXBlckVycm9yVHlwZXMsIGNyZWF0ZUdlbmVyaWNFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7XG4gIHR5cGUgU2NyYXBlckdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW5SZXN1bHQsXG4gIHR5cGUgU2NyYXBlckxvZ2luUmVzdWx0LFxuICB0eXBlIFNjcmFwZXJTY3JhcGluZ1Jlc3VsdCxcbiAgdHlwZSBTY3JhcGVyVHdvRmFjdG9yQXV0aFRyaWdnZXJSZXN1bHQsXG59IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IEdFVF9DVVNUT01FUiwgR0VUX01PVkVNRU5UUyB9IGZyb20gJy4vb25lLXplcm8tcXVlcmllcyc7XG5cbmNvbnN0IEhFQlJFV19XT1JEU19SRUdFWCA9IC9bXFx1MDU5MC1cXHUwNUZGXVtcXHUwNTkwLVxcdTA1RkZcIidcXC1fIC9cXFxcXSpbXFx1MDU5MC1cXHUwNUZGXS9nO1xuXG5jb25zdCBkZWJ1ZyA9IGdldERlYnVnKCdvbmUtemVybycpO1xuXG50eXBlIEFjY291bnQgPSB7XG4gIGFjY291bnRJZDogc3RyaW5nO1xufTtcblxudHlwZSBQb3J0Zm9saW8gPSB7XG4gIGFjY291bnRzOiBBcnJheTxBY2NvdW50PjtcbiAgcG9ydGZvbGlvSWQ6IHN0cmluZztcbiAgcG9ydGZvbGlvTnVtOiBzdHJpbmc7XG59O1xuXG50eXBlIEN1c3RvbWVyID0ge1xuICBjdXN0b21lcklkOiBzdHJpbmc7XG4gIHBvcnRmb2xpb3M/OiBBcnJheTxQb3J0Zm9saW8+IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIENhdGVnb3J5ID0ge1xuICBjYXRlZ29yeUlkOiBudW1iZXI7XG4gIGRhdGFTb3VyY2U6IHN0cmluZztcbiAgc3ViQ2F0ZWdvcnlJZD86IG51bWJlciB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBSZWN1cnJlbmNlID0ge1xuICBkYXRhU291cmNlOiBzdHJpbmc7XG4gIGlzUmVjdXJyZW50OiBib29sZWFuO1xufTtcblxudHlwZSBUcmFuc2FjdGlvbkVucmljaG1lbnQgPSB7XG4gIGNhdGVnb3JpZXM/OiBDYXRlZ29yeVtdIHwgbnVsbDtcbiAgcmVjdXJyZW5jZXM/OiBSZWN1cnJlbmNlW10gfCBudWxsO1xufTtcblxudHlwZSBUcmFuc2FjdGlvbiA9IHtcbiAgZW5yaWNobWVudD86IFRyYW5zYWN0aW9uRW5yaWNobWVudCB8IG51bGw7XG4gIC8vIFRPRE86IEdldCBpbnN0YWxsbWVudHMgaW5mb3JtYXRpb24gaGVyZVxuICAvLyB0cmFuc2FjdGlvbkRldGFpbHM6IFRyYW5zYWN0aW9uRGV0YWlscztcbn07XG5cbnR5cGUgTW92ZW1lbnQgPSB7XG4gIGFjY291bnRJZDogc3RyaW5nO1xuICBiYW5rQ3VycmVuY3lBbW91bnQ6IHN0cmluZztcbiAgYm9va2luZ0RhdGU6IHN0cmluZztcbiAgY29udmVyc2lvblJhdGU6IHN0cmluZztcbiAgY3JlZGl0RGViaXQ6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgaXNSZXZlcnNlZDogYm9vbGVhbjtcbiAgbW92ZW1lbnRBbW91bnQ6IHN0cmluZztcbiAgbW92ZW1lbnRDdXJyZW5jeTogc3RyaW5nO1xuICBtb3ZlbWVudElkOiBzdHJpbmc7XG4gIG1vdmVtZW50UmV2ZXJzZWRJZD86IHN0cmluZyB8IG51bGw7XG4gIG1vdmVtZW50VGltZXN0YW1wOiBzdHJpbmc7XG4gIG1vdmVtZW50VHlwZTogc3RyaW5nO1xuICBwb3J0Zm9saW9JZDogc3RyaW5nO1xuICBydW5uaW5nQmFsYW5jZTogc3RyaW5nO1xuICB0cmFuc2FjdGlvbj86IFRyYW5zYWN0aW9uIHwgbnVsbDtcbiAgdmFsdWVEYXRlOiBzdHJpbmc7XG59O1xuXG50eXBlIFF1ZXJ5UGFnaW5hdGlvbiA9IHsgaGFzTW9yZTogYm9vbGVhbjsgY3Vyc29yOiBzdHJpbmcgfTtcblxuY29uc3QgSURFTlRJVFlfU0VSVkVSX1VSTCA9ICdodHRwczovL2lkZW50aXR5LnRmZC1iYW5rLmNvbS92MS8nO1xuXG5jb25zdCBHUkFQSFFMX0FQSV9VUkwgPSAnaHR0cHM6Ly9tb2JpbGUudGZkLWJhbmsuY29tL21vYmlsZS1ncmFwaC9ncmFwaHFsJztcblxudHlwZSBTY3JhcGVyU3BlY2lmaWNDcmVkZW50aWFscyA9IHsgZW1haWw6IHN0cmluZzsgcGFzc3dvcmQ6IHN0cmluZyB9ICYgKFxuICB8IHtcbiAgICAgIG90cENvZGVSZXRyaWV2ZXI6ICgpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIHBob25lTnVtYmVyOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIG90cExvbmdUZXJtVG9rZW46IHN0cmluZztcbiAgICB9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPbmVaZXJvU2NyYXBlciBleHRlbmRzIEJhc2VTY3JhcGVyPFNjcmFwZXJTcGVjaWZpY0NyZWRlbnRpYWxzPiB7XG4gIHByaXZhdGUgb3RwQ29udGV4dD86IHN0cmluZztcblxuICBwcml2YXRlIGFjY2Vzc1Rva2VuPzogc3RyaW5nO1xuXG4gIGFzeW5jIHRyaWdnZXJUd29GYWN0b3JBdXRoKHBob25lTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPFNjcmFwZXJUd29GYWN0b3JBdXRoVHJpZ2dlclJlc3VsdD4ge1xuICAgIGlmICghcGhvbmVOdW1iZXIuc3RhcnRzV2l0aCgnKycpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlR2VuZXJpY0Vycm9yKFxuICAgICAgICAnQSBmdWxsIGludGVybmF0aW9uYWwgcGhvbmUgbnVtYmVyIHN0YXJ0aW5nIHdpdGggKyBhbmQgYSB0aHJlZSBkaWdpdCBjb3VudHJ5IGNvZGUgaXMgcmVxdWlyZWQnLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnRmV0Y2hpbmcgZGV2aWNlIHRva2VuJyk7XG4gICAgY29uc3QgZGV2aWNlVG9rZW5SZXNwb25zZSA9IGF3YWl0IGZldGNoUG9zdChgJHtJREVOVElUWV9TRVJWRVJfVVJMfS9kZXZpY2VzL3Rva2VuYCwge1xuICAgICAgZXh0Q2xpZW50SWQ6ICdtb2JpbGUnLFxuICAgICAgb3M6ICdBbmRyb2lkJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHJlc3VsdERhdGE6IHsgZGV2aWNlVG9rZW4gfSxcbiAgICB9ID0gZGV2aWNlVG9rZW5SZXNwb25zZTtcblxuICAgIGRlYnVnKGBTZW5kaW5nIE9UUCB0byBwaG9uZSBudW1iZXIgJHtwaG9uZU51bWJlcn1gKTtcblxuICAgIGNvbnN0IG90cFByZXBhcmVSZXNwb25zZSA9IGF3YWl0IGZldGNoUG9zdChgJHtJREVOVElUWV9TRVJWRVJfVVJMfS9vdHAvcHJlcGFyZWAsIHtcbiAgICAgIGZhY3RvclZhbHVlOiBwaG9uZU51bWJlcixcbiAgICAgIGRldmljZVRva2VuLFxuICAgICAgb3RwQ2hhbm5lbDogJ1NNU19PVFAnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgcmVzdWx0RGF0YTogeyBvdHBDb250ZXh0IH0sXG4gICAgfSA9IG90cFByZXBhcmVSZXNwb25zZTtcblxuICAgIHRoaXMub3RwQ29udGV4dCA9IG90cENvbnRleHQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW4ob3RwQ29kZTogc3RyaW5nKTogUHJvbWlzZTxTY3JhcGVyR2V0TG9uZ1Rlcm1Ud29GYWN0b3JUb2tlblJlc3VsdD4ge1xuICAgIGlmICghdGhpcy5vdHBDb250ZXh0KSB7XG4gICAgICByZXR1cm4gY3JlYXRlR2VuZXJpY0Vycm9yKCd0cmlnZ2VyT3RwIHdhcyBub3QgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIGdldFBlcm1lbmFudE90cFRva2VuKCknKTtcbiAgICB9XG5cbiAgICBkZWJ1ZygnUmVxdWVzdGluZyBPVFAgdG9rZW4nKTtcbiAgICBjb25zdCBvdHBWZXJpZnlSZXNwb25zZSA9IGF3YWl0IGZldGNoUG9zdChgJHtJREVOVElUWV9TRVJWRVJfVVJMfS9vdHAvdmVyaWZ5YCwge1xuICAgICAgb3RwQ29udGV4dDogdGhpcy5vdHBDb250ZXh0LFxuICAgICAgb3RwQ29kZSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHJlc3VsdERhdGE6IHsgb3RwVG9rZW4gfSxcbiAgICB9ID0gb3RwVmVyaWZ5UmVzcG9uc2U7XG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbG9uZ1Rlcm1Ud29GYWN0b3JBdXRoVG9rZW46IG90cFRva2VuIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlc29sdmVPdHBUb2tlbihcbiAgICBjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMsXG4gICk6IFByb21pc2U8U2NyYXBlckdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW5SZXN1bHQ+IHtcbiAgICBpZiAoJ290cExvbmdUZXJtVG9rZW4nIGluIGNyZWRlbnRpYWxzKSB7XG4gICAgICBpZiAoIWNyZWRlbnRpYWxzLm90cExvbmdUZXJtVG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUdlbmVyaWNFcnJvcignSW52YWxpZCBvdHBMb25nVGVybVRva2VuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBsb25nVGVybVR3b0ZhY3RvckF1dGhUb2tlbjogY3JlZGVudGlhbHMub3RwTG9uZ1Rlcm1Ub2tlbiB9O1xuICAgIH1cblxuICAgIGlmICghY3JlZGVudGlhbHMub3RwQ29kZVJldHJpZXZlcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGVycm9yVHlwZTogU2NyYXBlckVycm9yVHlwZXMuVHdvRmFjdG9yUmV0cmlldmVyTWlzc2luZyxcbiAgICAgICAgZXJyb3JNZXNzYWdlOiAnb3RwQ29kZVJldHJpZXZlciBpcyByZXF1aXJlZCB3aGVuIG90cFBlcm1hbmVudFRva2VuIGlzIG5vdCBwcm92aWRlZCcsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghY3JlZGVudGlhbHMucGhvbmVOdW1iZXIpIHtcbiAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljRXJyb3IoJ3Bob25lTnVtYmVyIGlzIHJlcXVpcmVkIHdoZW4gcHJvdmlkaW5nIGEgb3RwQ29kZVJldHJpZXZlciBjYWxsYmFjaycpO1xuICAgIH1cblxuICAgIGRlYnVnKCdUcmlnZ2VyaW5nIHVzZXIgc3VwcGxpZWQgb3RwQ29kZVJldHJpZXZlciBjYWxsYmFjaycpO1xuICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0aGlzLnRyaWdnZXJUd29GYWN0b3JBdXRoKGNyZWRlbnRpYWxzLnBob25lTnVtYmVyKTtcblxuICAgIGlmICghdHJpZ2dlclJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gdHJpZ2dlclJlc3VsdDtcbiAgICB9XG5cbiAgICBjb25zdCBvdHBDb2RlID0gYXdhaXQgY3JlZGVudGlhbHMub3RwQ29kZVJldHJpZXZlcigpO1xuXG4gICAgY29uc3Qgb3RwVG9rZW5SZXN1bHQgPSBhd2FpdCB0aGlzLmdldExvbmdUZXJtVHdvRmFjdG9yVG9rZW4ob3RwQ29kZSk7XG4gICAgaWYgKCFvdHBUb2tlblJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gb3RwVG9rZW5SZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgbG9uZ1Rlcm1Ud29GYWN0b3JBdXRoVG9rZW46IG90cFRva2VuUmVzdWx0LmxvbmdUZXJtVHdvRmFjdG9yQXV0aFRva2VuIH07XG4gIH1cblxuICBhc3luYyBsb2dpbihjcmVkZW50aWFsczogU2NyYXBlclNwZWNpZmljQ3JlZGVudGlhbHMpOiBQcm9taXNlPFNjcmFwZXJMb2dpblJlc3VsdD4ge1xuICAgIGNvbnN0IG90cFRva2VuUmVzdWx0ID0gYXdhaXQgdGhpcy5yZXNvbHZlT3RwVG9rZW4oY3JlZGVudGlhbHMpO1xuICAgIGlmICghb3RwVG9rZW5SZXN1bHQuc3VjY2Vzcykge1xuICAgICAgcmV0dXJuIG90cFRva2VuUmVzdWx0O1xuICAgIH1cblxuICAgIGRlYnVnKCdSZXF1ZXN0aW5nIGlkIHRva2VuJyk7XG4gICAgY29uc3QgZ2V0SWRUb2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2hQb3N0KGAke0lERU5USVRZX1NFUlZFUl9VUkx9L2dldElkVG9rZW5gLCB7XG4gICAgICBvdHBTbXNUb2tlbjogb3RwVG9rZW5SZXN1bHQubG9uZ1Rlcm1Ud29GYWN0b3JBdXRoVG9rZW4sXG4gICAgICBlbWFpbDogY3JlZGVudGlhbHMuZW1haWwsXG4gICAgICBwYXNzOiBjcmVkZW50aWFscy5wYXNzd29yZCxcbiAgICAgIHBpbkNvZGU6ICcnLFxuICAgIH0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgcmVzdWx0RGF0YTogeyBpZFRva2VuIH0sXG4gICAgfSA9IGdldElkVG9rZW5SZXNwb25zZTtcblxuICAgIGRlYnVnKCdSZXF1ZXN0aW5nIHNlc3Npb24gdG9rZW4nKTtcblxuICAgIGNvbnN0IGdldFNlc3Npb25Ub2tlblJlc3BvbnNlID0gYXdhaXQgZmV0Y2hQb3N0KGAke0lERU5USVRZX1NFUlZFUl9VUkx9L3Nlc3Npb25zL3Rva2VuYCwge1xuICAgICAgaWRUb2tlbixcbiAgICAgIHBhc3M6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgIH0pO1xuXG4gICAgY29uc3Qge1xuICAgICAgcmVzdWx0RGF0YTogeyBhY2Nlc3NUb2tlbiB9LFxuICAgIH0gPSBnZXRTZXNzaW9uVG9rZW5SZXNwb25zZTtcblxuICAgIHRoaXMuYWNjZXNzVG9rZW4gPSBhY2Nlc3NUb2tlbjtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgcGVyc2lzdGVudE90cFRva2VuOiBvdHBUb2tlblJlc3VsdC5sb25nVGVybVR3b0ZhY3RvckF1dGhUb2tlbixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFBvcnRmb2xpb01vdmVtZW50cyhwb3J0Zm9saW86IFBvcnRmb2xpbywgc3RhcnREYXRlOiBEYXRlKTogUHJvbWlzZTxUcmFuc2FjdGlvbnNBY2NvdW50PiB7XG4gICAgLy8gVE9ETzogRmluZCBvdXQgaWYgd2UgbmVlZCB0aGUgb3RoZXIgYWNjb3VudHMsIHRoZXJlIHNlZW1zIHRvIGFsd2F5cyBiZSBvbmVcbiAgICBjb25zdCBhY2NvdW50ID0gcG9ydGZvbGlvLmFjY291bnRzWzBdO1xuICAgIGxldCBjdXJzb3IgPSBudWxsO1xuICAgIGNvbnN0IG1vdmVtZW50cyA9IFtdO1xuXG4gICAgd2hpbGUgKCFtb3ZlbWVudHMubGVuZ3RoIHx8IG5ldyBEYXRlKG1vdmVtZW50c1swXS5tb3ZlbWVudFRpbWVzdGFtcCkgPj0gc3RhcnREYXRlKSB7XG4gICAgICBkZWJ1ZyhgRmV0Y2hpbmcgdHJhbnNhY3Rpb25zIGZvciBhY2NvdW50ICR7cG9ydGZvbGlvLnBvcnRmb2xpb051bX0uLi5gKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbW92ZW1lbnRzOiB7IG1vdmVtZW50czogbmV3TW92ZW1lbnRzLCBwYWdpbmF0aW9uIH0sXG4gICAgICB9OiB7IG1vdmVtZW50czogeyBtb3ZlbWVudHM6IE1vdmVtZW50W107IHBhZ2luYXRpb246IFF1ZXJ5UGFnaW5hdGlvbiB9IH0gPSBhd2FpdCBmZXRjaEdyYXBocWwoXG4gICAgICAgIEdSQVBIUUxfQVBJX1VSTCxcbiAgICAgICAgR0VUX01PVkVNRU5UUyxcbiAgICAgICAge1xuICAgICAgICAgIHBvcnRmb2xpb0lkOiBwb3J0Zm9saW8ucG9ydGZvbGlvSWQsXG4gICAgICAgICAgYWNjb3VudElkOiBhY2NvdW50LmFjY291bnRJZCxcbiAgICAgICAgICBsYW5ndWFnZTogJ0hFQlJFVycsXG4gICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgY3Vyc29yLFxuICAgICAgICAgICAgbGltaXQ6IDUwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke3RoaXMuYWNjZXNzVG9rZW59YCB9LFxuICAgICAgKTtcblxuICAgICAgbW92ZW1lbnRzLnVuc2hpZnQoLi4ubmV3TW92ZW1lbnRzKTtcbiAgICAgIGN1cnNvciA9IHBhZ2luYXRpb24uY3Vyc29yO1xuICAgICAgaWYgKCFwYWdpbmF0aW9uLmhhc01vcmUpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbW92ZW1lbnRzLnNvcnQoKHgsIHkpID0+IG5ldyBEYXRlKHgubW92ZW1lbnRUaW1lc3RhbXApLnZhbHVlT2YoKSAtIG5ldyBEYXRlKHkubW92ZW1lbnRUaW1lc3RhbXApLnZhbHVlT2YoKSk7XG5cbiAgICBjb25zdCBtYXRjaGluZ01vdmVtZW50cyA9IG1vdmVtZW50cy5maWx0ZXIobW92ZW1lbnQgPT4gbmV3IERhdGUobW92ZW1lbnQubW92ZW1lbnRUaW1lc3RhbXApID49IHN0YXJ0RGF0ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjY291bnROdW1iZXI6IHBvcnRmb2xpby5wb3J0Zm9saW9OdW0sXG4gICAgICBiYWxhbmNlOiAhbW92ZW1lbnRzLmxlbmd0aCA/IDAgOiBwYXJzZUZsb2F0KG1vdmVtZW50c1ttb3ZlbWVudHMubGVuZ3RoIC0gMV0ucnVubmluZ0JhbGFuY2UpLFxuICAgICAgdHhuczogbWF0Y2hpbmdNb3ZlbWVudHMubWFwKChtb3ZlbWVudCk6IFNjcmFwaW5nVHJhbnNhY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBoYXNJbnN0YWxsbWVudHMgPSBtb3ZlbWVudC50cmFuc2FjdGlvbj8uZW5yaWNobWVudD8ucmVjdXJyZW5jZXM/LnNvbWUoeCA9PiB4LmlzUmVjdXJyZW50KTtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtb3ZlbWVudC5jcmVkaXREZWJpdCA9PT0gJ0RFQklUJyA/IC0xIDogMTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZGVudGlmaWVyOiBtb3ZlbWVudC5tb3ZlbWVudElkLFxuICAgICAgICAgIGRhdGU6IG1vdmVtZW50LnZhbHVlRGF0ZSxcbiAgICAgICAgICBjaGFyZ2VkQW1vdW50OiArbW92ZW1lbnQubW92ZW1lbnRBbW91bnQgKiBtb2RpZmllcixcbiAgICAgICAgICBjaGFyZ2VkQ3VycmVuY3k6IG1vdmVtZW50Lm1vdmVtZW50Q3VycmVuY3ksXG4gICAgICAgICAgb3JpZ2luYWxBbW91bnQ6ICttb3ZlbWVudC5tb3ZlbWVudEFtb3VudCAqIG1vZGlmaWVyLFxuICAgICAgICAgIG9yaWdpbmFsQ3VycmVuY3k6IG1vdmVtZW50Lm1vdmVtZW50Q3VycmVuY3ksXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuc2FuaXRpemVIZWJyZXcobW92ZW1lbnQuZGVzY3JpcHRpb24pLFxuICAgICAgICAgIHByb2Nlc3NlZERhdGU6IG1vdmVtZW50Lm1vdmVtZW50VGltZXN0YW1wLFxuICAgICAgICAgIHN0YXR1czogVHJhbnNhY3Rpb25TdGF0dXNlcy5Db21wbGV0ZWQsXG4gICAgICAgICAgdHlwZTogaGFzSW5zdGFsbG1lbnRzID8gVHJhbnNhY3Rpb25UeXBlcy5JbnN0YWxsbWVudHMgOiBUcmFuc2FjdGlvblR5cGVzLk5vcm1hbCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogb25lIHplcm8gaGVicmV3IHN0cmluZ3MgYXJlIHJldmVyc2VkIHdpdGggYSB1bmljb2RlIGNvbnRyb2wgY2hhcmFjdGVyIHRoYXQgZm9yY2VzIGRpc3BsYXkgaW4gTFRSIG9yZGVyXG4gICAqIFdlIG5lZWQgdG8gcmVtb3ZlIHRoZSB1bmljb2RlIGNvbnRyb2wgY2hhcmFjdGVyLCBhbmQgdGhlbiByZXZlcnNlIGhlYnJldyBzdWJzdHJpbmdzIGluc2lkZSB0aGUgc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIHNhbml0aXplSGVicmV3KHRleHQ6IHN0cmluZykge1xuICAgIGlmICghdGV4dC5pbmNsdWRlcygnXFx1MjAyZCcpKSB7XG4gICAgICByZXR1cm4gdGV4dC50cmltKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGxhaW5TdHJpbmcgPSB0ZXh0LnJlcGxhY2UoL1xcdTIwMmQvZ2ksICcnKS50cmltKCk7XG4gICAgY29uc3QgaGVicmV3U3ViU3RyaW5nc1JhbmdlcyA9IFsuLi5wbGFpblN0cmluZy5tYXRjaEFsbChIRUJSRVdfV09SRFNfUkVHRVgpXTtcbiAgICBjb25zdCByYW5nZXNUb1JldmVyc2UgPSBoZWJyZXdTdWJTdHJpbmdzUmFuZ2VzLm1hcChzdHIgPT4gKHsgc3RhcnQ6IHN0ci5pbmRleCEsIGVuZDogc3RyLmluZGV4ISArIHN0clswXS5sZW5ndGggfSkpO1xuICAgIGNvbnN0IG91dCA9IFtdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHsgc3RhcnQsIGVuZCB9IG9mIHJhbmdlc1RvUmV2ZXJzZSkge1xuICAgICAgb3V0LnB1c2goLi4ucGxhaW5TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBzdGFydCkpO1xuICAgICAgaW5kZXggKz0gc3RhcnQgLSBpbmRleDtcbiAgICAgIGNvbnN0IHJldmVyc2VkID0gWy4uLnBsYWluU3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kKV0ucmV2ZXJzZSgpO1xuICAgICAgb3V0LnB1c2goLi4ucmV2ZXJzZWQpO1xuICAgICAgaW5kZXggKz0gZW5kIC0gc3RhcnQ7XG4gICAgfVxuXG4gICAgb3V0LnB1c2goLi4ucGxhaW5TdHJpbmcuc3Vic3RyaW5nKGluZGV4LCBwbGFpblN0cmluZy5sZW5ndGgpKTtcblxuICAgIHJldHVybiBvdXQuam9pbignJyk7XG4gIH1cblxuICBhc3luYyBmZXRjaERhdGEoKTogUHJvbWlzZTxTY3JhcGVyU2NyYXBpbmdSZXN1bHQ+IHtcbiAgICBpZiAoIXRoaXMuYWNjZXNzVG9rZW4pIHtcbiAgICAgIHJldHVybiBjcmVhdGVHZW5lcmljRXJyb3IoJ2xvZ2luKCkgd2FzIG5vdCBjYWxsZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0U3RhcnRNb21lbnQgPSBtb21lbnQoKS5zdWJ0cmFjdCgxLCAneWVhcnMnKS5hZGQoMSwgJ2RheScpO1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMub3B0aW9ucy5zdGFydERhdGUgfHwgZGVmYXVsdFN0YXJ0TW9tZW50LnRvRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50Lm1heChkZWZhdWx0U3RhcnRNb21lbnQsIG1vbWVudChzdGFydERhdGUpKTtcblxuICAgIGRlYnVnKCdGZXRjaGluZyBhY2NvdW50IGxpc3QnKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEdyYXBocWw8eyBjdXN0b21lcjogQ3VzdG9tZXJbXSB9PihcbiAgICAgIEdSQVBIUUxfQVBJX1VSTCxcbiAgICAgIEdFVF9DVVNUT01FUixcbiAgICAgIHt9LFxuICAgICAgeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5hY2Nlc3NUb2tlbn1gIH0sXG4gICAgKTtcbiAgICBjb25zdCBwb3J0Zm9saW9zID0gcmVzdWx0LmN1c3RvbWVyLmZsYXRNYXAoY3VzdG9tZXIgPT4gY3VzdG9tZXIucG9ydGZvbGlvcyB8fCBbXSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgIGFjY291bnRzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgcG9ydGZvbGlvcy5tYXAocG9ydGZvbGlvID0+IHRoaXMuZmV0Y2hQb3J0Zm9saW9Nb3ZlbWVudHMocG9ydGZvbGlvLCBzdGFydE1vbWVudC50b0RhdGUoKSkpLFxuICAgICAgKSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQU1BLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLGVBQUEsR0FBQU4sT0FBQTtBQUFpRSxTQUFBRCx1QkFBQVEsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVqRSxNQUFNRyxrQkFBa0IsR0FBRywwREFBMEQ7QUFFckYsTUFBTUMsS0FBSyxHQUFHLElBQUFDLGVBQVEsRUFBQyxVQUFVLENBQUM7QUE2RGxDLE1BQU1DLG1CQUFtQixHQUFHLG1DQUFtQztBQUUvRCxNQUFNQyxlQUFlLEdBQUcsa0RBQWtEO0FBWTNELE1BQU1DLGNBQWMsU0FBU0Msd0JBQVcsQ0FBNkI7RUFLbEYsTUFBTUMsb0JBQW9CQSxDQUFDQyxXQUFtQixFQUE4QztJQUMxRixJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ2hDLE9BQU8sSUFBQUMsMEJBQWtCLEVBQ3ZCLDhGQUNGLENBQUM7SUFDSDtJQUVBVCxLQUFLLENBQUMsdUJBQXVCLENBQUM7SUFDOUIsTUFBTVUsbUJBQW1CLEdBQUcsTUFBTSxJQUFBQyxnQkFBUyxFQUFDLEdBQUdULG1CQUFtQixnQkFBZ0IsRUFBRTtNQUNsRlUsV0FBVyxFQUFFLFFBQVE7TUFDckJDLEVBQUUsRUFBRTtJQUNOLENBQUMsQ0FBQztJQUVGLE1BQU07TUFDSkMsVUFBVSxFQUFFO1FBQUVDO01BQVk7SUFDNUIsQ0FBQyxHQUFHTCxtQkFBbUI7SUFFdkJWLEtBQUssQ0FBQywrQkFBK0JPLFdBQVcsRUFBRSxDQUFDO0lBRW5ELE1BQU1TLGtCQUFrQixHQUFHLE1BQU0sSUFBQUwsZ0JBQVMsRUFBQyxHQUFHVCxtQkFBbUIsY0FBYyxFQUFFO01BQy9FZSxXQUFXLEVBQUVWLFdBQVc7TUFDeEJRLFdBQVc7TUFDWEcsVUFBVSxFQUFFO0lBQ2QsQ0FBQyxDQUFDO0lBRUYsTUFBTTtNQUNKSixVQUFVLEVBQUU7UUFBRUs7TUFBVztJQUMzQixDQUFDLEdBQUdILGtCQUFrQjtJQUV0QixJQUFJLENBQUNHLFVBQVUsR0FBR0EsVUFBVTtJQUU1QixPQUFPO01BQ0xDLE9BQU8sRUFBRTtJQUNYLENBQUM7RUFDSDtFQUVBLE1BQWFDLHlCQUF5QkEsQ0FBQ0MsT0FBZSxFQUFtRDtJQUN2RyxJQUFJLENBQUMsSUFBSSxDQUFDSCxVQUFVLEVBQUU7TUFDcEIsT0FBTyxJQUFBViwwQkFBa0IsRUFBQyxpRUFBaUUsQ0FBQztJQUM5RjtJQUVBVCxLQUFLLENBQUMsc0JBQXNCLENBQUM7SUFDN0IsTUFBTXVCLGlCQUFpQixHQUFHLE1BQU0sSUFBQVosZ0JBQVMsRUFBQyxHQUFHVCxtQkFBbUIsYUFBYSxFQUFFO01BQzdFaUIsVUFBVSxFQUFFLElBQUksQ0FBQ0EsVUFBVTtNQUMzQkc7SUFDRixDQUFDLENBQUM7SUFFRixNQUFNO01BQ0pSLFVBQVUsRUFBRTtRQUFFVTtNQUFTO0lBQ3pCLENBQUMsR0FBR0QsaUJBQWlCO0lBQ3JCLE9BQU87TUFBRUgsT0FBTyxFQUFFLElBQUk7TUFBRUssMEJBQTBCLEVBQUVEO0lBQVMsQ0FBQztFQUNoRTtFQUVBLE1BQWNFLGVBQWVBLENBQzNCQyxXQUF1QyxFQUNVO0lBQ2pELElBQUksa0JBQWtCLElBQUlBLFdBQVcsRUFBRTtNQUNyQyxJQUFJLENBQUNBLFdBQVcsQ0FBQ0MsZ0JBQWdCLEVBQUU7UUFDakMsT0FBTyxJQUFBbkIsMEJBQWtCLEVBQUMsMEJBQTBCLENBQUM7TUFDdkQ7TUFDQSxPQUFPO1FBQUVXLE9BQU8sRUFBRSxJQUFJO1FBQUVLLDBCQUEwQixFQUFFRSxXQUFXLENBQUNDO01BQWlCLENBQUM7SUFDcEY7SUFFQSxJQUFJLENBQUNELFdBQVcsQ0FBQ0UsZ0JBQWdCLEVBQUU7TUFDakMsT0FBTztRQUNMVCxPQUFPLEVBQUUsS0FBSztRQUNkVSxTQUFTLEVBQUVDLHlCQUFpQixDQUFDQyx5QkFBeUI7UUFDdERDLFlBQVksRUFBRTtNQUNoQixDQUFDO0lBQ0g7SUFFQSxJQUFJLENBQUNOLFdBQVcsQ0FBQ3BCLFdBQVcsRUFBRTtNQUM1QixPQUFPLElBQUFFLDBCQUFrQixFQUFDLG9FQUFvRSxDQUFDO0lBQ2pHO0lBRUFULEtBQUssQ0FBQyxvREFBb0QsQ0FBQztJQUMzRCxNQUFNa0MsYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDNUIsb0JBQW9CLENBQUNxQixXQUFXLENBQUNwQixXQUFXLENBQUM7SUFFOUUsSUFBSSxDQUFDMkIsYUFBYSxDQUFDZCxPQUFPLEVBQUU7TUFDMUIsT0FBT2MsYUFBYTtJQUN0QjtJQUVBLE1BQU1aLE9BQU8sR0FBRyxNQUFNSyxXQUFXLENBQUNFLGdCQUFnQixDQUFDLENBQUM7SUFFcEQsTUFBTU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDZCx5QkFBeUIsQ0FBQ0MsT0FBTyxDQUFDO0lBQ3BFLElBQUksQ0FBQ2EsY0FBYyxDQUFDZixPQUFPLEVBQUU7TUFDM0IsT0FBT2UsY0FBYztJQUN2QjtJQUVBLE9BQU87TUFBRWYsT0FBTyxFQUFFLElBQUk7TUFBRUssMEJBQTBCLEVBQUVVLGNBQWMsQ0FBQ1Y7SUFBMkIsQ0FBQztFQUNqRztFQUVBLE1BQU1XLEtBQUtBLENBQUNULFdBQXVDLEVBQStCO0lBQ2hGLE1BQU1RLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQ1QsZUFBZSxDQUFDQyxXQUFXLENBQUM7SUFDOUQsSUFBSSxDQUFDUSxjQUFjLENBQUNmLE9BQU8sRUFBRTtNQUMzQixPQUFPZSxjQUFjO0lBQ3ZCO0lBRUFuQyxLQUFLLENBQUMscUJBQXFCLENBQUM7SUFDNUIsTUFBTXFDLGtCQUFrQixHQUFHLE1BQU0sSUFBQTFCLGdCQUFTLEVBQUMsR0FBR1QsbUJBQW1CLGFBQWEsRUFBRTtNQUM5RW9DLFdBQVcsRUFBRUgsY0FBYyxDQUFDViwwQkFBMEI7TUFDdERjLEtBQUssRUFBRVosV0FBVyxDQUFDWSxLQUFLO01BQ3hCQyxJQUFJLEVBQUViLFdBQVcsQ0FBQ2MsUUFBUTtNQUMxQkMsT0FBTyxFQUFFO0lBQ1gsQ0FBQyxDQUFDO0lBRUYsTUFBTTtNQUNKNUIsVUFBVSxFQUFFO1FBQUU2QjtNQUFRO0lBQ3hCLENBQUMsR0FBR04sa0JBQWtCO0lBRXRCckMsS0FBSyxDQUFDLDBCQUEwQixDQUFDO0lBRWpDLE1BQU00Qyx1QkFBdUIsR0FBRyxNQUFNLElBQUFqQyxnQkFBUyxFQUFDLEdBQUdULG1CQUFtQixpQkFBaUIsRUFBRTtNQUN2RnlDLE9BQU87TUFDUEgsSUFBSSxFQUFFYixXQUFXLENBQUNjO0lBQ3BCLENBQUMsQ0FBQztJQUVGLE1BQU07TUFDSjNCLFVBQVUsRUFBRTtRQUFFK0I7TUFBWTtJQUM1QixDQUFDLEdBQUdELHVCQUF1QjtJQUUzQixJQUFJLENBQUNDLFdBQVcsR0FBR0EsV0FBVztJQUU5QixPQUFPO01BQ0x6QixPQUFPLEVBQUUsSUFBSTtNQUNiMEIsa0JBQWtCLEVBQUVYLGNBQWMsQ0FBQ1Y7SUFDckMsQ0FBQztFQUNIO0VBRUEsTUFBY3NCLHVCQUF1QkEsQ0FBQ0MsU0FBb0IsRUFBRUMsU0FBZSxFQUFnQztJQUN6RztJQUNBLE1BQU1DLE9BQU8sR0FBR0YsU0FBUyxDQUFDRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUlDLE1BQU0sR0FBRyxJQUFJO0lBQ2pCLE1BQU1DLFNBQVMsR0FBRyxFQUFFO0lBRXBCLE9BQU8sQ0FBQ0EsU0FBUyxDQUFDQyxNQUFNLElBQUksSUFBSUMsSUFBSSxDQUFDRixTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUNHLGlCQUFpQixDQUFDLElBQUlQLFNBQVMsRUFBRTtNQUNqRmpELEtBQUssQ0FBQyxxQ0FBcUNnRCxTQUFTLENBQUNTLFlBQVksS0FBSyxDQUFDO01BQ3ZFLE1BQU07UUFDSkosU0FBUyxFQUFFO1VBQUVBLFNBQVMsRUFBRUssWUFBWTtVQUFFQztRQUFXO01BQ29CLENBQUMsR0FBRyxNQUFNLElBQUFDLG1CQUFZLEVBQzNGekQsZUFBZSxFQUNmMEQsNkJBQWEsRUFDYjtRQUNFQyxXQUFXLEVBQUVkLFNBQVMsQ0FBQ2MsV0FBVztRQUNsQ0MsU0FBUyxFQUFFYixPQUFPLENBQUNhLFNBQVM7UUFDNUJDLFFBQVEsRUFBRSxRQUFRO1FBQ2xCTCxVQUFVLEVBQUU7VUFDVlAsTUFBTTtVQUNOYSxLQUFLLEVBQUU7UUFDVDtNQUNGLENBQUMsRUFDRDtRQUFFQyxhQUFhLEVBQUUsVUFBVSxJQUFJLENBQUNyQixXQUFXO01BQUcsQ0FDaEQsQ0FBQztNQUVEUSxTQUFTLENBQUNjLE9BQU8sQ0FBQyxHQUFHVCxZQUFZLENBQUM7TUFDbENOLE1BQU0sR0FBR08sVUFBVSxDQUFDUCxNQUFNO01BQzFCLElBQUksQ0FBQ08sVUFBVSxDQUFDUyxPQUFPLEVBQUU7UUFDdkI7TUFDRjtJQUNGO0lBRUFmLFNBQVMsQ0FBQ2dCLElBQUksQ0FBQyxDQUFDQyxDQUFDLEVBQUVDLENBQUMsS0FBSyxJQUFJaEIsSUFBSSxDQUFDZSxDQUFDLENBQUNkLGlCQUFpQixDQUFDLENBQUNnQixPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUlqQixJQUFJLENBQUNnQixDQUFDLENBQUNmLGlCQUFpQixDQUFDLENBQUNnQixPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRTNHLE1BQU1DLGlCQUFpQixHQUFHcEIsU0FBUyxDQUFDcUIsTUFBTSxDQUFDQyxRQUFRLElBQUksSUFBSXBCLElBQUksQ0FBQ29CLFFBQVEsQ0FBQ25CLGlCQUFpQixDQUFDLElBQUlQLFNBQVMsQ0FBQztJQUN6RyxPQUFPO01BQ0wyQixhQUFhLEVBQUU1QixTQUFTLENBQUNTLFlBQVk7TUFDckNvQixPQUFPLEVBQUUsQ0FBQ3hCLFNBQVMsQ0FBQ0MsTUFBTSxHQUFHLENBQUMsR0FBR3dCLFVBQVUsQ0FBQ3pCLFNBQVMsQ0FBQ0EsU0FBUyxDQUFDQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUN5QixjQUFjLENBQUM7TUFDM0ZDLElBQUksRUFBRVAsaUJBQWlCLENBQUNRLEdBQUcsQ0FBRU4sUUFBUSxJQUEwQjtRQUM3RCxNQUFNTyxlQUFlLEdBQUdQLFFBQVEsQ0FBQ1EsV0FBVyxFQUFFQyxVQUFVLEVBQUVDLFdBQVcsRUFBRUMsSUFBSSxDQUFDaEIsQ0FBQyxJQUFJQSxDQUFDLENBQUNpQixXQUFXLENBQUM7UUFDL0YsTUFBTUMsUUFBUSxHQUFHYixRQUFRLENBQUNjLFdBQVcsS0FBSyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUMxRCxPQUFPO1VBQ0xDLFVBQVUsRUFBRWYsUUFBUSxDQUFDZ0IsVUFBVTtVQUMvQkMsSUFBSSxFQUFFakIsUUFBUSxDQUFDa0IsU0FBUztVQUN4QkMsYUFBYSxFQUFFLENBQUNuQixRQUFRLENBQUNvQixjQUFjLEdBQUdQLFFBQVE7VUFDbERRLGVBQWUsRUFBRXJCLFFBQVEsQ0FBQ3NCLGdCQUFnQjtVQUMxQ0MsY0FBYyxFQUFFLENBQUN2QixRQUFRLENBQUNvQixjQUFjLEdBQUdQLFFBQVE7VUFDbkRXLGdCQUFnQixFQUFFeEIsUUFBUSxDQUFDc0IsZ0JBQWdCO1VBQzNDRyxXQUFXLEVBQUUsSUFBSSxDQUFDQyxjQUFjLENBQUMxQixRQUFRLENBQUN5QixXQUFXLENBQUM7VUFDdERFLGFBQWEsRUFBRTNCLFFBQVEsQ0FBQ25CLGlCQUFpQjtVQUN6QytDLE1BQU0sRUFBRUMsaUNBQW1CLENBQUNDLFNBQVM7VUFDckNDLElBQUksRUFBRXhCLGVBQWUsR0FBR3lCLDhCQUFnQixDQUFDQyxZQUFZLEdBQUdELDhCQUFnQixDQUFDRTtRQUMzRSxDQUFDO01BQ0gsQ0FBQztJQUNILENBQUM7RUFDSDs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNVUixjQUFjQSxDQUFDUyxJQUFZLEVBQUU7SUFDbkMsSUFBSSxDQUFDQSxJQUFJLENBQUNDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtNQUM1QixPQUFPRCxJQUFJLENBQUNFLElBQUksQ0FBQyxDQUFDO0lBQ3BCO0lBRUEsTUFBTUMsV0FBVyxHQUFHSCxJQUFJLENBQUNJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUNGLElBQUksQ0FBQyxDQUFDO0lBQ3ZELE1BQU1HLHNCQUFzQixHQUFHLENBQUMsR0FBR0YsV0FBVyxDQUFDRyxRQUFRLENBQUNySCxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVFLE1BQU1zSCxlQUFlLEdBQUdGLHNCQUFzQixDQUFDbEMsR0FBRyxDQUFDcUMsR0FBRyxLQUFLO01BQUVDLEtBQUssRUFBRUQsR0FBRyxDQUFDRSxLQUFNO01BQUVDLEdBQUcsRUFBRUgsR0FBRyxDQUFDRSxLQUFLLEdBQUlGLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQ2hFO0lBQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkgsTUFBTW9FLEdBQUcsR0FBRyxFQUFFO0lBQ2QsSUFBSUYsS0FBSyxHQUFHLENBQUM7SUFFYixLQUFLLE1BQU07TUFBRUQsS0FBSztNQUFFRTtJQUFJLENBQUMsSUFBSUosZUFBZSxFQUFFO01BQzVDSyxHQUFHLENBQUNDLElBQUksQ0FBQyxHQUFHVixXQUFXLENBQUNXLFNBQVMsQ0FBQ0osS0FBSyxFQUFFRCxLQUFLLENBQUMsQ0FBQztNQUNoREMsS0FBSyxJQUFJRCxLQUFLLEdBQUdDLEtBQUs7TUFDdEIsTUFBTUssUUFBUSxHQUFHLENBQUMsR0FBR1osV0FBVyxDQUFDVyxTQUFTLENBQUNMLEtBQUssRUFBRUUsR0FBRyxDQUFDLENBQUMsQ0FBQ0ssT0FBTyxDQUFDLENBQUM7TUFDakVKLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLEdBQUdFLFFBQVEsQ0FBQztNQUNyQkwsS0FBSyxJQUFJQyxHQUFHLEdBQUdGLEtBQUs7SUFDdEI7SUFFQUcsR0FBRyxDQUFDQyxJQUFJLENBQUMsR0FBR1YsV0FBVyxDQUFDVyxTQUFTLENBQUNKLEtBQUssRUFBRVAsV0FBVyxDQUFDM0QsTUFBTSxDQUFDLENBQUM7SUFFN0QsT0FBT29FLEdBQUcsQ0FBQ0ssSUFBSSxDQUFDLEVBQUUsQ0FBQztFQUNyQjtFQUVBLE1BQU1DLFNBQVNBLENBQUEsRUFBbUM7SUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ25GLFdBQVcsRUFBRTtNQUNyQixPQUFPLElBQUFwQywwQkFBa0IsRUFBQyx3QkFBd0IsQ0FBQztJQUNyRDtJQUVBLE1BQU13SCxrQkFBa0IsR0FBRyxJQUFBQyxlQUFNLEVBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQztJQUN0RSxNQUFNbkYsU0FBUyxHQUFHLElBQUksQ0FBQ29GLE9BQU8sQ0FBQ3BGLFNBQVMsSUFBSWdGLGtCQUFrQixDQUFDSyxNQUFNLENBQUMsQ0FBQztJQUN2RSxNQUFNQyxXQUFXLEdBQUdMLGVBQU0sQ0FBQ00sR0FBRyxDQUFDUCxrQkFBa0IsRUFBRSxJQUFBQyxlQUFNLEVBQUNqRixTQUFTLENBQUMsQ0FBQztJQUVyRWpELEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztJQUM5QixNQUFNeUksTUFBTSxHQUFHLE1BQU0sSUFBQTdFLG1CQUFZLEVBQy9CekQsZUFBZSxFQUNmdUksNEJBQVksRUFDWixDQUFDLENBQUMsRUFDRjtNQUFFeEUsYUFBYSxFQUFFLFVBQVUsSUFBSSxDQUFDckIsV0FBVztJQUFHLENBQ2hELENBQUM7SUFDRCxNQUFNOEYsVUFBVSxHQUFHRixNQUFNLENBQUNHLFFBQVEsQ0FBQ0MsT0FBTyxDQUFDRCxRQUFRLElBQUlBLFFBQVEsQ0FBQ0QsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUVqRixPQUFPO01BQ0x2SCxPQUFPLEVBQUUsSUFBSTtNQUNiK0IsUUFBUSxFQUFFLE1BQU0yRixPQUFPLENBQUNDLEdBQUcsQ0FDekJKLFVBQVUsQ0FBQzFELEdBQUcsQ0FBQ2pDLFNBQVMsSUFBSSxJQUFJLENBQUNELHVCQUF1QixDQUFDQyxTQUFTLEVBQUV1RixXQUFXLENBQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDM0Y7SUFDRixDQUFDO0VBQ0g7QUFDRjtBQUFDVSxPQUFBLENBQUFsSixPQUFBLEdBQUFNLGNBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1 @@
1
+ export {};