bx-rest 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/README.en.md +113 -2
  3. package/README.md +114 -2
  4. package/esm2022/functions/errors.mjs +17 -5
  5. package/esm2022/functions/uniqueElementCode.mjs +24 -0
  6. package/esm2022/public-api.mjs +2 -2
  7. package/esm2022/request-navvy/bizproc.mjs +18 -9
  8. package/esm2022/request-navvy/calendar/event.mjs +1 -9
  9. package/esm2022/request-navvy/disk/operation.mjs +3 -10
  10. package/esm2022/request-navvy/socialnetwork/api/livefeed.mjs +1 -5
  11. package/esm2022/request-navvy/task/operation/elapseditem.mjs +8 -8
  12. package/esm2022/request-navvy/tasks/task.mjs +1 -119
  13. package/esm2022/rest/navvy.mjs +66 -64
  14. package/esm2022/services/base.mjs +1 -4
  15. package/esm2022/services/context.mjs +59 -0
  16. package/esm2022/services/http/HttpBX.mjs +49 -19
  17. package/esm2022/services/http/authRefresh.mjs +25 -23
  18. package/esm2022/services/http/http.mjs +14 -69
  19. package/esm2022/services/http/middleware.mjs +149 -0
  20. package/esm2022/services/http/sessionKey.mjs +16 -5
  21. package/esm2022/services/http/transport.mjs +5 -0
  22. package/esm2022/services/navvy/navvy-support.mjs +2 -15
  23. package/esm2022/services/navvy.mjs +18 -31
  24. package/esm2022/typification/rest/calendar/event/get.mjs +1 -1
  25. package/esm2022/typification/rest/tasks/task/get.mjs +1 -1
  26. package/esm2022/typification/settings.mjs +1 -1
  27. package/fesm2022/bx-rest.mjs +450 -463
  28. package/fesm2022/bx-rest.mjs.map +1 -1
  29. package/functions/errors.d.ts +9 -0
  30. package/functions/uniqueElementCode.d.ts +12 -0
  31. package/package.json +1 -1
  32. package/public-api.d.ts +2 -1
  33. package/rest/navvy.d.ts +9 -0
  34. package/services/context.d.ts +43 -0
  35. package/services/http/HttpBX.d.ts +10 -0
  36. package/services/http/authRefresh.d.ts +5 -1
  37. package/services/http/http.d.ts +12 -9
  38. package/services/http/middleware.d.ts +31 -0
  39. package/services/http/sessionKey.d.ts +10 -0
  40. package/services/http/transport.d.ts +28 -0
  41. package/services/navvy/navvy-support.d.ts +0 -10
  42. package/services/navvy.d.ts +1 -0
  43. package/typification/rest/calendar/event/get.d.ts +1 -1
  44. package/typification/settings.d.ts +34 -0
  45. package/esm2022/functions/errorHandler.mjs +0 -34
  46. package/esm2022/request/app.mjs +0 -13
  47. package/esm2022/request/bizproc/activity.mjs +0 -3
  48. package/esm2022/request/bizproc/event.mjs +0 -3
  49. package/esm2022/request/bizproc/robot.mjs +0 -3
  50. package/esm2022/request/bizproc/task.mjs +0 -3
  51. package/esm2022/request/bizproc/workflow/instance.mjs +0 -3
  52. package/esm2022/request/bizproc/workflow/template.mjs +0 -3
  53. package/esm2022/request/bizproc/workflow.mjs +0 -18
  54. package/esm2022/request/bizproc.mjs +0 -15
  55. package/esm2022/request/department.mjs +0 -26
  56. package/esm2022/request/disk/attachedObject.mjs +0 -14
  57. package/esm2022/request/disk/file.mjs +0 -18
  58. package/esm2022/request/disk/folder.mjs +0 -117
  59. package/esm2022/request/disk.mjs +0 -11
  60. package/esm2022/request/lists/element.mjs +0 -18
  61. package/esm2022/request/lists/field.mjs +0 -35
  62. package/esm2022/request/lists.mjs +0 -86
  63. package/esm2022/request/log/blogcomment.mjs +0 -3
  64. package/esm2022/request/log/blogpost.mjs +0 -18
  65. package/esm2022/request/log.mjs +0 -9
  66. package/esm2022/request/pull/application/config.mjs +0 -11
  67. package/esm2022/request/pull/channel/public.mjs +0 -18
  68. package/esm2022/request/pull/config.mjs +0 -13
  69. package/esm2022/request/pull.mjs +0 -11
  70. package/esm2022/request/server.mjs +0 -14
  71. package/esm2022/request/socialnetwork/api/contentview.mjs +0 -14
  72. package/esm2022/request/socialnetwork/api/livefeed/blogpost/important.mjs +0 -14
  73. package/esm2022/request/socialnetwork/api/livefeed/blogpost.mjs +0 -7
  74. package/esm2022/request/socialnetwork/api/livefeed.mjs +0 -7
  75. package/esm2022/request/socialnetwork/api.mjs +0 -9
  76. package/esm2022/request/socialnetwork.mjs +0 -8
  77. package/esm2022/request/sonet_group.mjs +0 -24
  78. package/esm2022/request/task/commentitem.mjs +0 -32
  79. package/esm2022/request/task/elapseditem.mjs +0 -40
  80. package/esm2022/request/task/item/userfield.mjs +0 -14
  81. package/esm2022/request/task/item.mjs +0 -7
  82. package/esm2022/request/task/planner.mjs +0 -11
  83. package/esm2022/request/task.mjs +0 -13
  84. package/esm2022/request/tasks/task/result.mjs +0 -22
  85. package/esm2022/request/tasks/task.mjs +0 -110
  86. package/esm2022/request/tasks.mjs +0 -7
  87. package/esm2022/request/user/userfield.mjs +0 -14
  88. package/esm2022/request/user.mjs +0 -40
  89. package/esm2022/rest/base.mjs +0 -39
  90. package/esm2022/services/http/HttpData.mjs +0 -77
  91. package/esm2022/services/http/base/base.mjs +0 -4
  92. package/esm2022/services/http/httpNavvy.mjs +0 -14
  93. package/esm2022/typification/base/answers.mjs +0 -438
  94. package/esm2022/typification/base/params.mjs +0 -525
  95. package/esm2022/typification/base/workpiece/methods-list.mjs +0 -2
  96. package/esm2022/typification/base/workpiece/methods.mjs +0 -2
  97. package/functions/errorHandler.d.ts +0 -10
  98. package/request/app.d.ts +0 -8
  99. package/request/bizproc/activity.d.ts +0 -2
  100. package/request/bizproc/event.d.ts +0 -2
  101. package/request/bizproc/robot.d.ts +0 -2
  102. package/request/bizproc/task.d.ts +0 -2
  103. package/request/bizproc/workflow/instance.d.ts +0 -2
  104. package/request/bizproc/workflow/template.d.ts +0 -2
  105. package/request/bizproc/workflow.d.ts +0 -13
  106. package/request/bizproc.d.ts +0 -12
  107. package/request/department.d.ts +0 -18
  108. package/request/disk/attachedObject.d.ts +0 -8
  109. package/request/disk/file.d.ts +0 -10
  110. package/request/disk/folder.d.ts +0 -96
  111. package/request/disk.d.ts +0 -8
  112. package/request/lists/element.d.ts +0 -11
  113. package/request/lists/field.d.ts +0 -11
  114. package/request/lists.d.ts +0 -31
  115. package/request/log/blogcomment.d.ts +0 -2
  116. package/request/log/blogpost.d.ts +0 -11
  117. package/request/log.d.ts +0 -6
  118. package/request/pull/application/config.d.ts +0 -5
  119. package/request/pull/channel/public.d.ts +0 -5
  120. package/request/pull/config.d.ts +0 -7
  121. package/request/pull.d.ts +0 -8
  122. package/request/server.d.ts +0 -7
  123. package/request/socialnetwork/api/contentview.d.ts +0 -6
  124. package/request/socialnetwork/api/livefeed/blogpost/important.d.ts +0 -6
  125. package/request/socialnetwork/api/livefeed/blogpost.d.ts +0 -4
  126. package/request/socialnetwork/api/livefeed.d.ts +0 -4
  127. package/request/socialnetwork/api.d.ts +0 -6
  128. package/request/socialnetwork.d.ts +0 -4
  129. package/request/sonet_group.d.ts +0 -8
  130. package/request/task/commentitem.d.ts +0 -23
  131. package/request/task/elapseditem.d.ts +0 -26
  132. package/request/task/item/userfield.d.ts +0 -6
  133. package/request/task/item.d.ts +0 -4
  134. package/request/task/planner.d.ts +0 -4
  135. package/request/task.d.ts +0 -10
  136. package/request/tasks/task/result.d.ts +0 -13
  137. package/request/tasks/task.d.ts +0 -37
  138. package/request/tasks.d.ts +0 -4
  139. package/request/user/userfield.d.ts +0 -8
  140. package/request/user.d.ts +0 -24
  141. package/rest/base.d.ts +0 -33
  142. package/services/http/HttpData.d.ts +0 -7
  143. package/services/http/base/base.d.ts +0 -7
  144. package/services/http/httpNavvy.d.ts +0 -10
  145. package/typification/base/answers.d.ts +0 -12
  146. package/typification/base/params.d.ts +0 -16
  147. package/typification/base/workpiece/methods-list.d.ts +0 -247
  148. package/typification/base/workpiece/methods.d.ts +0 -20
@@ -343,9 +343,6 @@ export async function getBase64FileLikeStr(file) {
343
343
  return undefined;
344
344
  }
345
345
  export function prepareBaseAddress(url, add = '') {
346
- // if (url.search('https://') !== 0 && url.search('http://')) {
347
- // url = 'https://' + url
348
- // }
349
346
  if (add && add.length > 0) {
350
347
  if (url.lastIndexOf('/') !== (url.length - 1)) {
351
348
  url = url + '/';
@@ -357,4 +354,4 @@ export function prepareBaseAddress(url, add = '') {
357
354
  }
358
355
  return url;
359
356
  }
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRXREOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFRLEVBQUUsVUFBVSxHQUFHLEtBQUs7SUFDaEQsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEdBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpDLElBQUksVUFBVTtZQUFFLE1BQU0sS0FBSyxDQUFBO1FBRTNCLGtEQUFrRDtRQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9CLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsS0FBSztJQUNuQyxZQUE0QixLQUFVO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sS0FBSyxDQUFBO1FBQzlCLE1BQU0sY0FBYyxHQUNsQixTQUFTLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDaEUsTUFBTSxPQUFPLEdBQUcsb0NBQW9DLGNBQWMsV0FBVyxTQUFTLEdBQUcsQ0FBQTtRQUN6RixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFMWSxVQUFLLEdBQUwsS0FBSyxDQUFLO1FBTXBDLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFBO1FBRXhCLHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ3pDLDBFQUEwRTtZQUMxRSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVRLFFBQVE7UUFDZixPQUFPO1lBQ0wsTUFBTSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQW9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUNuRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNkLENBQUM7Q0FDRjtBQVlELHlIQUF5SDtBQUN6SCxNQUFNLGtCQUFrQixHQUF1QjtJQUM3QyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQztJQUMzQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUM7SUFDdkIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDO0lBQ3ZCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDO0lBQ3ZCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQztJQUN2QixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQztJQUN2QixDQUFDLElBQUksRUFBRSxlQUFlLENBQUM7SUFDdkIsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7SUFDdkIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDO0lBQ3ZCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDO0lBQ3ZCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQztJQUN2QixDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQztDQUN4QixDQUFBO0FBRUQsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFFckcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUVuRTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsY0FBc0I7SUFDekQsdUJBQXVCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQTtJQUNyQyxJQUFJLEtBQTZCLENBQUE7SUFFakMsT0FBTyxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUN2RSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ25DLHlGQUF5RjtZQUN6Rix5RkFBeUY7WUFDekYsb0RBQW9EO1lBQ3BELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQzdFLE9BQU8sUUFBUSxJQUFJLGNBQWMsQ0FBQTtRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sY0FBYyxDQUFBO0FBQ3ZCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFXO0lBQy9CLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUNuRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0scUJBQXFCLEdBQUc7SUFDNUIscUJBQXFCO0lBQ3JCLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osWUFBWTtDQUNiLENBQUE7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsbUJBQW1CLENBQUMsR0FBVyxFQUFFLE1BQWM7SUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUM1QyxJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUE7SUFDaEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFBO0lBQ2pCLElBQUksS0FBNkIsQ0FBQTtJQUVqQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO0lBQ3JDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0QsT0FBTyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUM3RCxPQUFPLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNqQyxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFBO0lBQzNDLENBQUM7SUFDRCxPQUFPLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtJQUVoRCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25ELElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUN2QixNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3hHLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzVDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBRTdDLHdGQUF3RjtJQUN4Rix3RkFBd0Y7SUFDeEYscUZBQXFGO0lBQ3JGLHFCQUFxQjtJQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsSUFBSSxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUM5RixPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0FBQzFELENBQUM7QUFFRCx5R0FBeUc7QUFDekcsU0FBUyxTQUFTLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsSUFBWSxFQUFFLE1BQWMsRUFBRSxNQUFjO0lBQ3ZHLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ2pFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUN6RyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxTQUFTLHNCQUFzQixDQUFDLEdBQVc7SUFDekMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUMvQixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5QixNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUN4RCx1RkFBdUY7SUFDdkYsb0RBQW9EO0lBQ3BELElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwRCxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQTtJQUNiLENBQUM7SUFFRCxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUE7SUFDOUIsTUFBTSxJQUFJLEdBQUcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDOUMsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEQsTUFBTSxNQUFNLEdBQUcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEQsSUFBSSxJQUFJLEdBQUcsRUFBRSxJQUFJLE1BQU0sR0FBRyxFQUFFLElBQUksTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQTJCLEVBQUUsTUFBZSxFQUFFLEdBQW1CLEVBQUUsVUFBVSxHQUFHLElBQUk7SUFDekcsSUFBSSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDeEIsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDO1NBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1lBQy9DLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsT0FBTyxNQUFNLENBQUE7WUFDZixDQUFDO1lBRUQsS0FBSyxNQUFNLGNBQWMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLGNBQWMsS0FBSyxNQUFNO29CQUFFLFNBQVE7Z0JBQ3ZDLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQTtnQkFDL0QsSUFBSSxjQUFjLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxjQUFjLENBQUE7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1lBRUQsTUFBTSxlQUFlLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDbkQsSUFBSSxlQUFlLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxlQUFlLENBQUE7WUFDeEIsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN0QixDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDbkMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0lBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQy9DLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUN0QyxDQUFDO0lBRUQsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFBO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsSUFBVSxFQUFFLFVBQVUsR0FBRyxJQUFJO0lBQ25FLElBQUksQ0FBQyxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzVCLElBQUksVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtRQUN6RSxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFFRCxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUMxQixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLEdBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSTtJQUNoRCxRQUFRLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxRQUFRO1lBQ1gsR0FBRyxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUN2QixJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsNkJBQTZCO2dCQUM3RCxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUE7WUFDcEIsQ0FBQztpQkFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsNkJBQTZCO2dCQUMzRSxPQUFPLEdBQUcsS0FBSyxNQUFNLENBQUE7WUFDdkIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksVUFBVTtvQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUE7Z0JBQ2hGLE9BQU8sS0FBSyxDQUFBO1lBQ2QsQ0FBQztRQUNIO1lBQ0UsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkIsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxHQUFZO0lBQ25DLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQTtBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxHQUFXLEVBQUUsU0FBUyxHQUFHLEtBQUs7SUFDNUQsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNkLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQTtJQUN0QyxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sU0FBUyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFDbkQsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFXO0lBQ2pDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDNUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUMzQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQzFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDekMsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBVTtJQUN0QyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUE7UUFDL0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBZ0IsQ0FBQyxDQUFBO1FBQ3RELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDekMsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQUMsSUFBVTtJQUluRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUN4QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxNQUEwQixFQUFFO0lBQzFFLCtEQUErRDtJQUMvRCwyQkFBMkI7SUFDM0IsSUFBSTtJQUVKLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0xvY2FsQXRvbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy90b0xvY2FsQXRvbSdcclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YHRgtGA0L7QutGDXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIHRocm93RXJyb3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0b1N0cih2YWw6IGFueSwgdGhyb3dFcnJvciA9IGZhbHNlKTogc3RyaW5nIHtcclxuICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhyb3dFcnJvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWU6ICR7dmFsfSBjYW5ub3QgYmUgY29udmVydGVkIHRvIHN0cmluZ2ApXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcbiAgcmV0dXJuIFN0cmluZyh2YWwpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YfQuNGB0LvQvlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtKHZhbDogYW55LCB0aHJvd0Vycm9yID0gdHJ1ZSwgZGVmVmFsdWUgPSAwKTogbnVtYmVyIHtcclxuICBjb25zdCByZXN1bHQgPSBOdW1iZXIodmFsKVxyXG5cclxuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVG9OdW1FcnJvcih2YWwpXHJcblxyXG4gICAgaWYgKHRocm93RXJyb3IpIHRocm93IGVycm9yXHJcblxyXG4gICAgLy8g0JXRgdC70Lgg0L7RiNC40LHQutCwINC90LUg0L/RgNC+0LHRgNCw0YHRi9Cy0LDQtdGC0YHRjyDigJQg0L/RgNC+0YHRgtC+INC70L7Qs9C40YDRg9C10LxcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IudG9TdHJpbmcoKSlcclxuICAgIHJldHVybiBkZWZWYWx1ZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG4vKipcclxuICog0JrQsNGB0YLQvtC80L3Ri9C5INGC0LjQvyDQvtGI0LjQsdC60Lgg0LTQu9GPINGH0LjRgdC70L7QstGL0YUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRvTnVtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHR5cGVvZiB2YWx1ZVxyXG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPVxyXG4gICAgICB2YWx1ZVR5cGUgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKVxyXG4gICAgY29uc3QgbWVzc2FnZSA9IGBJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byB0b051bSgpOiAke2Zvcm1hdHRlZFZhbHVlfSAodHlwZTogJHt2YWx1ZVR5cGV9KWBcclxuICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICB0aGlzLm5hbWUgPSAnVG9OdW1FcnJvcidcclxuXHJcbiAgICAvLyDRgdC+0YXRgNCw0L3Rj9C10Lwg0YHRgtC10Log0LLRi9C30L7QstCwICjQvtGC0YTQuNC70YzRgtGA0L7QstCw0LIg0YHQsNC8INC60L7QvdGB0YLRgNGD0LrRgtC+0YApXHJcbiAgICBpZiAodGhpcy5zdGFjaykge1xyXG4gICAgICBjb25zdCBzdGFja0xpbmVzID0gdGhpcy5zdGFjay5zcGxpdCgnXFxuJylcclxuICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRgtGA0L7QutGDINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQsCAo0YfRgtC+0LHRiyDRgdGC0LXQuiDQvdCw0YfQuNC90LDQu9GB0Y8g0YEg0LzQtdGB0YLQsCDQstGL0LfQvtCy0LAgdG9OdW0pXHJcbiAgICAgIHRoaXMuc3RhY2sgPSBbc3RhY2tMaW5lc1swXSwgLi4uc3RhY2tMaW5lcy5zbGljZSgyKV0uam9pbignXFxuJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBg4p2MIFske3RoaXMubmFtZX1dICR7dGhpcy5tZXNzYWdlfWAsXHJcbiAgICAgIHRoaXMuc3RhY2sgPyBgICAgU3RhY2sgdHJhY2U6XFxuJHt0aGlzLnN0YWNrfWAgOiAnJyxcclxuICAgIF0uam9pbignXFxuJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntC/0YbQuNC4INC00LvRjyB0b0RhdGUoKS4g0J7RgdGC0LDQstC70LXQvdGLINC00LvRjyDQvtCx0YDQsNGC0L3QvtC5INGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGB0LjQs9C90LDRgtGD0YDRiyDigJQg0YDQsNC90LXQtSDQv9GA0L7QsdGA0LDRgdGL0LLQsNC70LjRgdGMXHJcbiAqINCyIGx1eG9uICjQt9C+0L3QsC/Qu9C+0LrQsNC70YwpLiDQoNCw0LfQsdC+0YAg0LTQsNGC0Ysg0YLQtdC/0LXRgNGMINC90LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQstC90LXRiNC90LjRhSDQsdC40LHQu9C40L7RgtC10Log0Lgg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCXHJcbiAqINGC0L7Qu9GM0LrQviDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQtSDRh9C40YHQu9C+0LLRi9C1INGC0L7QutC10L3RiyAo0YHQvC4gcGFyc2VEYXRlV2l0aEZvcm1hdCksINC/0L7RjdGC0L7QvNGDINC+0L/RhtC40Lgg0YHQtdC50YfQsNGBINC90LUg0LjRgdC/0L7Qu9GM0LfRg9GO0YLRgdGPLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUb0RhdGVPcHRpb25zIHtcclxuICB6b25lPzogc3RyaW5nXHJcbiAgbG9jYWxlPzogc3RyaW5nXHJcbn1cclxuXHJcbi8qKiDQodC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YLQvtC60LXQvdC+0LIg0YTQvtGA0LzQsNGC0LAg0YDQtdCz0YPQu9GP0YDQvdGL0Lwg0LPRgNGD0L/Qv9Cw0Lwg0LfQsNGF0LLQsNGC0LAuINCf0L7RgNGP0LTQvtC6INCy0LDQttC10L06INC00LvQuNC90L3Ri9C1INGC0L7QutC10L3RiyDQv9GA0L7QstC10YDRj9GO0YLRgdGPINGA0LDQvdGM0YjQtSDQutC+0YDQvtGC0LrQuNGFICovXHJcbmNvbnN0IERBVEVfRk9STUFUX1RPS0VOUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gIFsneXl5eScsICcoPzx5eXl5PlxcXFxkezR9KSddLFxyXG4gIFsneXknLCAnKD88eXk+XFxcXGR7Mn0pJ10sXHJcbiAgWydNTScsICcoPzxNTT5cXFxcZHsyfSknXSxcclxuICBbJ00nLCAnKD88TT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnZGQnLCAnKD88ZGQ+XFxcXGR7Mn0pJ10sXHJcbiAgWydkJywgJyg/PGQ+XFxcXGR7MSwyfSknXSxcclxuICBbJ0hIJywgJyg/PEhIPlxcXFxkezJ9KSddLFxyXG4gIFsnSCcsICcoPzxIPlxcXFxkezEsMn0pJ10sXHJcbiAgWydtbScsICcoPzxtbT5cXFxcZHsyfSknXSxcclxuICBbJ20nLCAnKD88bT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnc3MnLCAnKD88c3M+XFxcXGR7Mn0pJ10sXHJcbiAgWydzJywgJyg/PHM+XFxcXGR7MSwyfSknXSxcclxuXVxyXG5cclxuY29uc3QgREFURV9GT1JNQVRfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKERBVEVfRk9STUFUX1RPS0VOUy5tYXAoKFt0b2tlbl0pID0+IHRva2VuKS5qb2luKCd8JyksICdnJylcclxuXHJcbmNvbnN0IFRJTUVfT05MWV9UT0tFTlMgPSBuZXcgU2V0KFsnSEgnLCAnSCcsICdtbScsICdtJywgJ3NzJywgJ3MnXSlcclxuXHJcbi8qKlxyXG4gKiDQktGL0LLQvtC00LjRgiDRhNC+0YDQvNCw0YIgXCLRgtC+0LvRjNC60L4g0LTQsNGC0LBcIiDQuNC3INGE0L7RgNC80LDRgtCwINC00LDRgtGLLdC4LdCy0YDQtdC80LXQvdC4IOKAlCDQvtGC0YDQtdC30LDQtdGCINCy0YDQtdC80Y8g0Lgg0YDQsNC30LTQtdC70LjRgtC10LvRjCDQv9C10YDQtdC0XHJcbiAqINC90LjQvCAo0L3QsNC/0YDQuNC80LXRgCwgYCdkZC5NTS55eXl5IEhIOm1tOnNzJ2Ag4oaSIGAnZGQuTU0ueXl5eSdgKS4g0J/QvtGA0Y/QtNC+0Log0LTQtdC90Ywv0LzQtdGB0Y/Rhi/Qs9C+0LQg0YMg0L/QvtC70LXQuVxyXG4gKiBcItC00LDRgtCwXCIg0LggXCLQtNCw0YLQsC3QstGA0LXQvNGPXCIg0L3QsCDQvtC00L3QvtC8INC/0L7RgNGC0LDQu9C1IEJpdHJpeDI0INCy0YHQtdCz0LTQsCDRgdC+0LPQu9Cw0YHQvtCy0LDQvSDigJQg0YDQsNC30LvQuNGH0LDQtdGC0YHRjyDRgtC+0LvRjNC60L5cclxuICog0L3QsNC70LjRh9C40LUgYEhIOm1tOnNzYCwg0L/QvtGN0YLQvtC80YMg0L3QtdGCINGB0LzRi9GB0LvQsCDQt9Cw0YHRgtCw0LLQu9GP0YLRjCDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INC/0LXRgNC10LTQsNCy0LDRgtGMINC+0LHQsCDRhNC+0YDQvNCw0YLQsCDQuFxyXG4gKiDQtNC10YDQttCw0YLRjCDQuNGFINCyINGB0LjQvdGF0YDQvtC90LUg0LLRgNGD0YfQvdGD0Y4uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlRGF0ZU9ubHlGb3JtYXQoZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxyXG5cclxuICB3aGlsZSAoKG1hdGNoID0gREFURV9GT1JNQVRfVE9LRU5fUkVHRVguZXhlYyhkYXRlVGltZUZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBpZiAoVElNRV9PTkxZX1RPS0VOUy5oYXMobWF0Y2hbMF0pKSB7XHJcbiAgICAgIC8vINCe0YLRgNC10LfQsNC10Lwg0LvRjtCx0L7QuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMINC/0LXRgNC10LQg0LLRgNC10LzQtdC90LXQvCwg0LLQutC70Y7Rh9Cw0Y8g0LHRg9C60LLQtdC90L3Ri9C5ICjQvdCw0L/RgNC40LzQtdGAICdUJyDQsiBJU08t0YHRgtC40LvQtVxyXG4gICAgICAvLyAnZGQuTU0ueXl5eVRISDptbTpzcycpLCDQsCDQvdC1INGC0L7Qu9GM0LrQviDQv9GD0L3QutGC0YPQsNGG0LjRjiDigJQg0L7RgdGC0LDQvdCw0LLQu9C40LLQsNC10LzRgdGPINC90LAg0L/QvtGB0LvQtdC00L3QtdC8INGB0LjQvNCy0L7Qu9C1LFxyXG4gICAgICAvLyDQutC+0YLQvtGA0YvQuSDRgNC10LDQu9GM0L3QviDQvtGC0L3QvtGB0LjRgtGB0Y8g0Log0YLQvtC60LXQvdCw0Lwg0LTQsNGC0YsgKHkvTS9kKS5cclxuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBkYXRlVGltZUZvcm1hdC5zbGljZSgwLCBtYXRjaC5pbmRleCkucmVwbGFjZSgvW155TWRdKyQvLCAnJylcclxuICAgICAgcmV0dXJuIGRhdGVQYXJ0IHx8IGRhdGVUaW1lRm9ybWF0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXRcclxufVxyXG5cclxuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcclxufVxyXG5cclxuLyoqXHJcbiAqINCk0L7RgNC80LDRgtGLINC00LDRgiwg0LrQvtGC0L7RgNGL0LUgQml0cml4MjQg0YDQtdCw0LvRjNC90L4g0L/RgNC40YHRi9C70LDQtdGCINCyINGA0LDQt9C90YvRhSDQvNC10YLQvtC00LDRhSBSRVNUINC4INC90LAg0YDQsNC30L3Ri9GFXHJcbiAqINC/0L7RgNGC0LDQu9Cw0YUg4oCUINGE0L7RgNC80LDRgiDQtNCw0YLRiy/QstGA0LXQvNC10L3QuCDQsiDQvtGC0LLQtdGC0LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQvdCw0YHRgtGA0L7QtdC6INC/0L7RgNGC0LDQu9CwICjQndCw0YHRgtGA0L7QudC60Lgg4oaSINGE0L7RgNC80LDRglxyXG4gKiDQtNCw0YLRiyDQuCDQstGA0LXQvNC10L3QuCksINC/0L7RjdGC0L7QvNGDINC+0LTQuNC9INC30LDRhdCw0YDQtNC60L7QttC10L3QvdGL0Lkg0YjQsNCx0LvQvtC9INC90LUg0YPQvdC40LLQtdGA0YHQsNC70LXQvS4g0JXRgdC70Lgg0Y/QstC90YvQuSBgZm9ybWF0YCxcclxuICog0L/QtdGA0LXQtNCw0L3QvdGL0Lkg0LIgdG9EYXRlKCksINC90LUg0YHQvtCy0L/QsNC7INGB0L4g0LfQvdCw0YfQtdC90LjQtdC8LCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0YHRgtGA0L7QutGDINC90LXQstCw0LvQuNC00L3QvtC5LFxyXG4gKiDQv9GA0L7QsdGD0LXQvCDRjdGC0Lgg0LLQsNGA0LjQsNC90YLRiyDQv9C+INC+0YfQtdGA0LXQtNC4IOKAlCDQvtC90Lgg0L3QtSDQv9C10YDQtdGB0LXQutCw0Y7RgtGB0Y8g0L/QviDRgNCw0LfQtNC10LvQuNGC0LXQu9GP0Lwv0L/QvtGA0Y/QtNC60YMg0YLQvtC60LXQvdC+0LIsXHJcbiAqINGC0LDQuiDRh9GC0L4g0LvQvtC20L3Ri9GFINGB0L7QstC/0LDQtNC10L3QuNC5INC90LUg0LHRg9C00LXRgi5cclxuICovXHJcbmNvbnN0IEZBTExCQUNLX0RBVEVfRk9STUFUUyA9IFtcclxuICAnZGQuTU0ueXl5eSBISDptbTpzcycsXHJcbiAgJ3l5eXktTU0tZGQgSEg6bW06c3MnLFxyXG4gICdkZC5NTS55eXl5JyxcclxuICAneXl5eS1NTS1kZCcsXHJcbl1cclxuXHJcbi8qKlxyXG4gKiDQoNCw0LfQsdC40YDQsNC10YIg0YHRgtGA0L7QutGDINC00LDRgtGLINC/0L4g0L/RgNC+0YHRgtC+0LzRgyDRiNCw0LHQu9C+0L3RgyAoeXl5eSwgTU0sIGRkLCBISCwgbW0sIHNzINC4INC40YUg0L7QtNC90L7QsdGD0LrQstC10L3QvdGL0LVcclxuICog0LLQsNGA0LjQsNC90YLRiywg0L3QsNC/0YDQuNC80LXRgCAnZGQuTU0ueXl5eSBISDptbTpzcycpLiDQoNCw0LfQtNC10LvQuNGC0LXQu9C4INC80LXQttC00YMg0YLQvtC60LXQvdCw0LzQuCDQsdC10YDRg9GC0YHRjyDQuNC3INGI0LDQsdC70L7QvdCwXHJcbiAqINC60LDQuiDQtdGB0YLRjC4g0J3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LvQvtC60LDQu9C4LCDQvdCw0LfQstCw0L3QuNGPINC80LXRgdGP0YbQtdCyINC4INGH0LDRgdC+0LLRi9C1INC/0L7Rj9GB0LAg4oCUINC00LvRjyBSRVNULdC+0YLQstC10YLQvtCyXHJcbiAqIEJpdHJpeDI0INC+0L3QuCDQvdC1INGC0YDQtdCx0YPRjtGC0YHRjywg0LfQvdCw0YfQtdC90LjRjyDQstGB0LXQs9C00LAg0L/RgNC40YXQvtC00Y/RgiDQsiDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QvCDRh9C40YHQu9C+0LLQvtC8INCy0LjQtNC1LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWw6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgdG9rZW5NYXAgPSBuZXcgTWFwKERBVEVfRk9STUFUX1RPS0VOUylcclxuICBsZXQgcGF0dGVybiA9ICcnXHJcbiAgbGV0IGxhc3RJbmRleCA9IDBcclxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcclxuXHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIHdoaWxlICgobWF0Y2ggPSBEQVRFX0ZPUk1BVF9UT0tFTl9SRUdFWC5leGVjKGZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBwYXR0ZXJuICs9IGVzY2FwZVJlZ0V4cChmb3JtYXQuc2xpY2UobGFzdEluZGV4LCBtYXRjaC5pbmRleCkpXHJcbiAgICBwYXR0ZXJuICs9IHRva2VuTWFwLmdldChtYXRjaFswXSlcclxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXHJcbiAgfVxyXG4gIHBhdHRlcm4gKz0gZXNjYXBlUmVnRXhwKGZvcm1hdC5zbGljZShsYXN0SW5kZXgpKVxyXG5cclxuICBjb25zdCByZXN1bHQgPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJufSRgKS5leGVjKHZhbClcclxuICBpZiAoIXJlc3VsdD8uZ3JvdXBzKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgZyA9IHJlc3VsdC5ncm91cHNcclxuICBjb25zdCB5ZWFyID0gZ1sneXl5eSddID8gTnVtYmVyKGdbJ3l5eXknXSkgOiBnWyd5eSddID8gMjAwMCArIE51bWJlcihnWyd5eSddKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxyXG4gIGNvbnN0IG1vbnRoID0gTnVtYmVyKGdbJ01NJ10gPz8gZ1snTSddID8/IDEpXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGdbJ2RkJ10gPz8gZ1snZCddID8/IDEpXHJcbiAgY29uc3QgaG91ciA9IE51bWJlcihnWydISCddID8/IGdbJ0gnXSA/PyAwKVxyXG4gIGNvbnN0IG1pbnV0ZSA9IE51bWJlcihnWydtbSddID8/IGdbJ20nXSA/PyAwKVxyXG4gIGNvbnN0IHNlY29uZCA9IE51bWJlcihnWydzcyddID8/IGdbJ3MnXSA/PyAwKVxyXG5cclxuICAvLyDQotC+0LrQtdC90Ysg4oCUINGN0YLQviDQv9GA0L7RgdGC0L4gXCJOINGG0LjRhNGAXCIsINCx0LXQtyDQv9GA0L7QstC10YDQutC4INC00LjQsNC/0LDQt9C+0L3QsCAocmVnZXgg0L3QtSDQvtGC0LvQuNGH0LjRgiBcIjEzXCIg0LzQtdGB0Y/RhtCwINC+0YJcclxuICAvLyBcIjEzXCIg0LTQvdGPKS4g0JHQtdC3INGN0YLQvtC5INC/0YDQvtCy0LXRgNC60LggbmV3IERhdGUoKSDQvNC+0LvRh9CwIFwi0L/QtdGA0LXQutCw0YLRi9Cy0LDQtdGCXCIg0L/QtdGA0LXQv9C+0LvQvdC10L3QuNC1INC90LAg0YHQvtGB0LXQtNC90LjQuVxyXG4gIC8vINC80LXRgdGP0YYv0LPQvtC0ICjQvdCw0L/RgNC40LzQtdGALCDQvNC10YHRj9GGPTEzIOKGkiDRj9C90LLQsNGA0Ywg0YHQu9C10LTRg9GO0YnQtdCz0L4g0LPQvtC00LApINCy0LzQtdGB0YLQviDRgtC+0LPQviwg0YfRgtC+0LHRiyDRgdGH0LjRgtCw0YLRjFxyXG4gIC8vINGB0YLRgNC+0LrRgyDQvdC10LLQsNC70LjQtNC90L7QuS5cclxuICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIgfHwgZGF5IDwgMSB8fCBkYXkgPiAzMSB8fCBob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG59XHJcblxyXG4vKiog0KHQvtCx0LjRgNCw0LXRgiDQtNCw0YLRgywg0L7RgtCx0YDQsNGB0YvQstCw0Y8g0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQtNC90Lgg0LzQtdGB0Y/RhtCwOiBuZXcgRGF0ZSgpINC/0YDQtdCy0YDQsNGC0LjQuyDQsdGLIDMxINGE0LXQstGA0LDQu9GPINCyIDMg0LzQsNGA0YLQsC4gKi9cclxuZnVuY3Rpb24gYnVpbGREYXRlKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIsIGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyKTogRGF0ZSB8IG51bGwge1xyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpXHJcbiAgcmV0dXJuIChpc05hTihkYXRlLmdldFRpbWUoKSkgfHwgZGF0ZS5nZXRNb250aCgpICE9PSBtb250aCAtIDEgfHwgZGF0ZS5nZXREYXRlKCkgIT09IGRheSkgPyBudWxsIDogZGF0ZVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtGB0LvQtdC00L3QuNC5INGA0LXQt9C10YDQstC90YvQuSDRgNCw0LfQsdC+0YAg4oCUINCx0LXQtyDQt9C90LDQvdC40Y8g0LrQvtC90LrRgNC10YLQvdC+0LPQviDRhNC+0YDQvNCw0YLQsC4g0KDQsNCx0L7RgtCw0LXRgiDRgtC+0LvRjNC60L4g0LTQu9GPINGH0LjRgdGC0L5cclxuICog0YfQuNGB0LvQvtCy0YvRhSDQtNCw0YIgKNC90LjQutCw0LrQuNGFINC90LDQt9Cy0LDQvdC40Lkg0LzQtdGB0Y/RhtC10LIv0LTQvdC10Lkg4oCUINC00LvRjyDRjdGC0L7Qs9C+INC90YPQttC90YsgbG9jYWxlLdGC0LDQsdC70LjRhtGLLCDQsCDRjdGC0L4g0LrQsNC6XHJcbiAqINGA0LDQtyDRgtC+0YIg0LLQtdGBLCDRgNCw0LTQuCDRg9GF0L7QtNCwINC+0YIg0LrQvtGC0L7RgNC+0LPQviBsdXhvbiDQsdGL0Lsg0YPQsdGA0LDQvSDQuNC3INC30LDQstC40YHQuNC80L7RgdGC0LXQuSkuXHJcbiAqXHJcbiAqINCY0LTQtdGPOiDQs9C+0LQg4oCUINC10LTQuNC90YHRgtCy0LXQvdC90YvQuSDRgdC10LPQvNC10L3RgiDQtNC70LjQvdC+0Lkg0YDQvtCy0L3QviA0INGG0LjRhNGA0YssINC/0L7RjdGC0L7QvNGDINC10LPQviDQv9C+0LfQuNGG0LjRjyAo0L/QtdGA0LLRi9C5INC40LvQuFxyXG4gKiDQv9C+0YHQu9C10LTQvdC40Lkg0LjQtyDRgtGA0ZHRhSDRgdC10LPQvNC10L3RgtC+0LIg0LTQsNGC0YspINC+0LTQvdC+0LfQvdCw0YfQvdC+INC+0L/QvtC30L3QsNGR0YLRgdGPINC/0YDQuCDQu9GO0LHQvtC8INGA0LDQt9C00LXQu9C40YLQtdC70LUgKGAuYCwgYC1gLFxyXG4gKiBgL2AsINC/0YDQvtCx0LXQuy4uLikuINCc0LXRgdGP0YYg0L/QviDQstGB0LXQvCDRgNCw0YHQv9GA0L7RgdGC0YDQsNC90ZHQvdC90YvQvCDQsiDQvNC40YDQtSDRgdC+0LPQu9Cw0YjQtdC90LjRj9C8IChJU08gYHl5eXktTU0tZGRgINC4XHJcbiAqINC10LLRgNC+0L/QtdC50YHQutC+0LUgYGRkLk1NLnl5eXlgKSDRgdGC0L7QuNGCINC80LXQttC00YMg0LPQvtC00L7QvCDQuCDQtNC90ZHQvCwg0L/QvtGN0YLQvtC80YMg0LHQtdGA0ZHRgtGB0Y8g0LrQsNC6INGB0YDQtdC00L3QuNC5INGB0LXQs9C80LXQvdGCLlxyXG4gKiDQktGA0LXQvNGPLCDQtdGB0LvQuCDQtdGB0YLRjCwg0LLRgdC10LPQtNCwINC40LTRkdGCINC60LDQuiBgSEg6bW06c3NgIOKAlCDRjdGC0L7RgiDQv9C+0YDRj9C00L7QuiDRg9C90LjQstC10YDRgdCw0LvQtdC9LlxyXG4gKlxyXG4gKiDQndC1INGA0LXRiNCw0LXRgiDQuCDQvdC1INC/0YvRgtCw0LXRgtGB0Y8g0YDQtdGI0LjRgtGMINC90LXQvtC00L3QvtC30L3QsNGH0L3QvtGB0YLRjCDQtNC10L3RjC/QvNC10YHRj9GGINCyINGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0YvRhSDRhNC+0YDQvNCw0YLQsNGFINCy0LjQtNCwXHJcbiAqIGBNTS9kZC95eXl5YCAo0KHQqNCQKSwg0LPQtNC1INC+0LHQsCDRgdC10LPQvNC10L3RgtCwINC80L7Qs9GD0YIg0LHRi9GC0Ywg4omkMTIg4oCUINGD0LPQsNC00YvQstCw0YLRjCDRjdGC0L4g0LHQtdC3INC30L3QsNC90LjRjyDQu9C+0LrQsNC70LhcclxuICog0LfQvdCw0YfQuNC70L4g0LHRiyDQuNC90L7Qs9C00LAg0LzQvtC70YfQsCDQv9GD0YLQsNGC0Ywg0LTQtdC90Ywg0YEg0LzQtdGB0Y/RhtC10LwsINGH0YLQviDRhdGD0LbQtSDRj9Cy0L3QvtC5INC+0YjQuNCx0LrQuC5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlRGF0ZUhldXJpc3RpY2FsbHkodmFsOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgcGFydHMgPSB2YWwubWF0Y2goL1xcZCsvZylcclxuICBpZiAoIXBhcnRzIHx8IHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHMubGVuZ3RoID4gNikge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IFtkMCwgZDEsIGQyLCAuLi50aW1lUGFydHNdID0gcGFydHNcclxuICBjb25zdCBkYXRlUGFydHMgPSBbZDAsIGQxLCBkMl1cclxuICBjb25zdCB5ZWFySWR4ID0gZGF0ZVBhcnRzLmZpbmRJbmRleChwID0+IHAubGVuZ3RoID09PSA0KVxyXG4gIC8vINCT0L7QtCDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L7QtNC90L7Qt9C90LDRh9C90L4g0L3QsNC50LTQtdC9ICjRgNC+0LLQvdC+IDQg0YbQuNGE0YDRiykg0Lgg0YHRgtC+0Y/RgtGMINGBINC60YDQsNGPLCDQsCDQvdC1INCyINGB0LXRgNC10LTQuNC90LUg4oCUXHJcbiAgLy8g0LjQvdCw0YfQtSDQv9C+0LfQuNGG0LjRjyDQvNC10YHRj9GG0LAv0LTQvdGPINC90LUg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LHQtdC30L7Qv9Cw0YHQvdC+LlxyXG4gIGlmICh5ZWFySWR4ICE9PSAwICYmIHllYXJJZHggIT09IDIpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4XSlcclxuICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlUGFydHNbMV0pXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4ID09PSAwID8gMiA6IDBdKVxyXG4gIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMiB8fCBkYXkgPCAxIHx8IGRheSA+IDMxKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgW2hoLCBtbSwgc3NdID0gdGltZVBhcnRzXHJcbiAgY29uc3QgaG91ciA9IGhoICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoaGgpIDogMFxyXG4gIGNvbnN0IG1pbnV0ZSA9IG1tICE9PSB1bmRlZmluZWQgPyBOdW1iZXIobW0pIDogMFxyXG4gIGNvbnN0IHNlY29uZCA9IHNzICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoc3MpIDogMFxyXG4gIGlmIChob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC00LDRgtGDLlxyXG4gKlxyXG4gKiDQldGB0LvQuCDQv9C10YDQtdC00LDQvSBgZm9ybWF0YCwg0L3QviDQt9C90LDRh9C10L3QuNC1INC10LzRgyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCICjRgdC8LiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMg4oCUXHJcbiAqINCw0LrRgtGD0LDQu9GM0L3QviDQtNC70Y8g0L/QvtC70LXQuSwg0LPQtNC1IEJpdHJpeDI0INC+0YLQtNCw0ZHRgiDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLQtSwg0L3QsNGB0YLRgNC+0LXQvdC90L7QvCDQvdCwINC/0L7RgNGC0LDQu9C1LCDQsCDQvdC1INCyXHJcbiAqINGC0L7QvCwg0YfRgtC+INC30LDRhdCw0YDQtNC60L7QttC10L0g0LIg0LzQsNC/0L/QtdGA0LUpLCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvdC10LLQsNC70LjQtNC90YvQvCwg0LTQtdC70LDRjtGC0YHRjyDQtdGJ0ZFcclxuICog0LTQstC1INC/0L7Qv9GL0YLQutC4OiDQtNGA0YPQs9C40LUg0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdGR0L3QvdGL0LUg0YTQvtGA0LzQsNGC0YsgQml0cml4MjQsINCwINC30LDRgtC10Lwg4oCUINC/0L7Qt9C40YbQuNC+0L3QvdCw0Y8g0Y3QstGA0LjRgdGC0LjQutCwXHJcbiAqICjRgdC8LiBwYXJzZURhdGVIZXVyaXN0aWNhbGx5KSwg0LrQvtGC0L7RgNCw0Y8g0YDQsNGB0L/QvtC30L3QsNGR0YIg0L/RgNCw0LrRgtC40YfQtdGB0LrQuCDQu9GO0LHQvtC5INGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0L7QuSDRhNC+0YDQvNCw0YJcclxuICog0LTQsNGC0Ysg0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgNCw0LfQtNC10LvQuNGC0LXQu9GPLiDQldGB0LvQuCDQv9GA0LjQu9C+0LbQtdC90LjRjiDRgtC+0YfQvdC+INC40LfQstC10YHRgtC10L0g0YTQvtGA0LzQsNGCINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/QvtGA0YLQsNC70LAsXHJcbiAqINC10LPQviDRgdGC0L7QuNGCINC/0LXRgNC10LTQsNCy0LDRgtGMINGP0LLQvdGL0LwgYGZvcm1hdGAg4oCUINGN0YLQviDQstGB0LXQs9C00LAg0L/RgNC40L7RgNC40YLQtdGC0L3QtdC1INGD0LPQsNC00YvQstCw0L3QuNGPLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZSh2YWw6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIGZvcm1hdD86IHN0cmluZywgb3B0PzogVG9EYXRlT3B0aW9ucywgdGhyb3dFcnJvciA9IHRydWUpOiBEYXRlIHtcclxuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgcmV0dXJuIHZhbFxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWwsIGZvcm1hdClcclxuICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCBmYWxsYmFja0Zvcm1hdCBvZiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMpIHtcclxuICAgICAgICBpZiAoZmFsbGJhY2tGb3JtYXQgPT09IGZvcm1hdCkgY29udGludWVcclxuICAgICAgICBjb25zdCBmYWxsYmFja1BhcnNlZCA9IHBhcnNlRGF0ZVdpdGhGb3JtYXQodmFsLCBmYWxsYmFja0Zvcm1hdClcclxuICAgICAgICBpZiAoZmFsbGJhY2tQYXJzZWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxsYmFja1BhcnNlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGV1cmlzdGljUGFyc2VkID0gcGFyc2VEYXRlSGV1cmlzdGljYWxseSh2YWwpXHJcbiAgICAgIGlmIChoZXVyaXN0aWNQYXJzZWQpIHtcclxuICAgICAgICByZXR1cm4gaGV1cmlzdGljUGFyc2VkXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpXHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbClcclxuICB9XHJcblxyXG4gIGlmICh0aHJvd0Vycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcsIHZhbCwgZm9ybWF0KVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IERhdGUoKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQtNCw0YLRgyDQsiDRgdGC0YDQvtC60YMg0YEg0YPRh9C10YLQvtC8INCy0YDQtdC80LXQvdC90L7QuSDQt9C+0L3Ri1xyXG4gKlxyXG4gKiDQpNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INC00LXQu9C10LPQuNGA0L7QstCw0L3QviB0b0xvY2FsQXRvbSgpIOKAlCDRgNCw0L3RjNGI0LUg0LfQtNC10YHRjCDQsdGL0LvQsCDQstGC0L7RgNCw0Y8sXHJcbiAqINC90LXQt9Cw0LLQuNGB0LjQvNCw0Y8g0LrQvtC/0LjRjyDRgtC+0Lkg0LbQtSDRhNC+0YDQvNGD0LvRiyAocGFkZGluZCArINGB0LzQtdGJ0LXQvdC40LUg0YLQsNC50LzQt9C+0L3RiyksINC60L7RgtC+0YDQsNGPXHJcbiAqINC80L7Qs9C70LAg0YDQsNC30L7QudGC0LjRgdGMINGBIHRvTG9jYWxBdG9tKCkg0L/RgNC4INC/0YDQsNCy0LrQtSDQvtC00L3QvtC5INC40Lcg0L3QuNGFINC4INC90LUg0LTRgNGD0LPQvtC5LlxyXG4gKlxyXG4gKiBAcGFyYW0gZGF0ZVxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvSVNPU3RyaW5nV2l0aFRpbWV6b25lKGRhdGU6IERhdGUsIHRocm93RXJyb3IgPSB0cnVlKTogc3RyaW5nIHtcclxuICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcclxuICAgIGlmICh0aHJvd0Vycm9yKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWU6IG5vdCBhIHZhbGlkIERhdGUgb2JqZWN0JylcclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRvTG9jYWxBdG9tKGRhdGUpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LVcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbCh2YWw6IGFueSwgdGhyb3dFcnJvciA9IHRydWUpOiBib29sZWFuIHtcclxuICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIGlmICh2YWwgPT09ICduJyB8fCB2YWwgPT09ICd5JykgeyAvLyDQsdC40YLRgNC40LrRgdC+0LLRi9C1INC/0L7QvdGP0YLQuNGPINC+IGJvb2xcclxuICAgICAgICByZXR1cm4gdmFsID09PSAneSdcclxuICAgICAgfSBlbHNlIGlmICh2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdmYWxzZScpIHsgLy8g0LHQuNGC0YDQuNC60YHQvtCy0YvQtSDQv9C+0L3Rj9GC0LjRjyDQviBib29sXHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gJ3RydWUnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRocm93RXJyb3IpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZTogY2Fubm90IGJlIGNvbnZlcnRlZCB0byBib29sZWFuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LUg0LIgJ1knINC40LvQuCAnTidcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQlhZb3JOKHZhbDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHZhbCA/ICdZJyA6ICdOJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZVVybEh0dHBzKHVybDogc3RyaW5nLCBjb21wb25lbnQgPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgcmV0dXJuIGVuY29kZVVSSShjcm9wVXJsKHVybCkgKyAnLycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBlbmNvZGVVUkkoJ2h0dHBzOi8vJyArIGNyb3BVcmwodXJsKSArICcvJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntCx0YDQtdC30LDQtdGCIFVSTCAo0YPQtNCw0LvRj9C10YIg0L/RgNC+0YLQvtC60L7QuylcclxuICpcclxuICogQHBhcmFtIHVybFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyb3BVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczovLycsICcnKSA6ICcnXHJcbiAgdXJsID0gdXJsID8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczonLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwOicsICcnKSA6ICcnXHJcbiAgcmV0dXJuIHVybFxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRhNCw0LnQuyDQsiBiYXNlNjRcclxuICpcclxuICogQHBhcmFtIGZpbGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNjRGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpXHJcbiAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcilcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtC70YPRh9C40YLRjCDRhNCw0LnQuyDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjQg0YEg0YDQsNC30LHQuNCy0LrQvtC5INC90LAg0LfQsNCz0L7Qu9C+0LLQvtC6INC4INC00LDQvdC90YvQtVxyXG4gKlxyXG4gKiBAcGFyYW0gZmlsZVxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhc2U2NEZpbGVMaWtlU3RyKGZpbGU6IEZpbGUpOiBQcm9taXNlPHtcclxuICBoZWFkZXI6IHN0cmluZyxcclxuICB2YWw6IHN0cmluZ1xyXG59IHwgdW5kZWZpbmVkPiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0QmFzZTY0RmlsZShmaWxlKVxyXG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xyXG4gICAgY29uc3Qgc3BsaXQgPSByZXN1bHQuc3BsaXQoJywnKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGVhZGVyOiBzcGxpdFswXSxcclxuICAgICAgdmFsOiBzcGxpdFsxXVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmFzZUFkZHJlc3ModXJsOiBzdHJpbmcsIGFkZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJycpIHtcclxuICAvLyBpZiAodXJsLnNlYXJjaCgnaHR0cHM6Ly8nKSAhPT0gMCAmJiB1cmwuc2VhcmNoKCdodHRwOi8vJykpIHtcclxuICAvLyAgIHVybCA9ICdodHRwczovLycgKyB1cmxcclxuICAvLyB9XHJcblxyXG4gIGlmIChhZGQgJiYgYWRkLmxlbmd0aCA+IDApIHtcclxuICAgIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgICB1cmwgPSB1cmwgKyAnLydcclxuICAgIH1cclxuXHJcbiAgICB1cmwgPSB1cmwgKyBhZGRcclxuICB9XHJcblxyXG4gIGlmICh1cmwubGFzdEluZGV4T2YoJy8nKSAhPT0gKHVybC5sZW5ndGggLSAxKSkge1xyXG4gICAgdXJsID0gdXJsICsgJy8nXHJcbiAgfVxyXG5cclxuICByZXR1cm4gdXJsXHJcbn0iXX0=
357
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBRXREOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLEtBQUssQ0FBQyxHQUFRLEVBQUUsVUFBVSxHQUFHLEtBQUs7SUFDaEQsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFBO1FBQ3hFLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUNwQixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLEdBQVEsRUFBRSxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBRyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUUxQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRWpDLElBQUksVUFBVTtZQUFFLE1BQU0sS0FBSyxDQUFBO1FBRTNCLGtEQUFrRDtRQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQy9CLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxVQUFXLFNBQVEsS0FBSztJQUNuQyxZQUE0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QTtJQUN4QyxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0IsT0FBTztZQUNMLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2QsQ0FBQTtJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEdBQVcsRUFBRSxNQUEwQixFQUFFO0lBQzFFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDMUIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQTtBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0xvY2FsQXRvbSB9IGZyb20gJy4uL2Z1bmN0aW9ucy90b0xvY2FsQXRvbSdcclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YHRgtGA0L7QutGDXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWxcclxuICogQHBhcmFtIHRocm93RXJyb3JcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0b1N0cih2YWw6IGFueSwgdGhyb3dFcnJvciA9IGZhbHNlKTogc3RyaW5nIHtcclxuICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodGhyb3dFcnJvcikge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmFsdWU6ICR7dmFsfSBjYW5ub3QgYmUgY29udmVydGVkIHRvIHN0cmluZ2ApXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJydcclxuICB9XHJcbiAgcmV0dXJuIFN0cmluZyh2YWwpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0YfQuNGB0LvQvlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvTnVtKHZhbDogYW55LCB0aHJvd0Vycm9yID0gdHJ1ZSwgZGVmVmFsdWUgPSAwKTogbnVtYmVyIHtcclxuICBjb25zdCByZXN1bHQgPSBOdW1iZXIodmFsKVxyXG5cclxuICBpZiAoaXNOYU4ocmVzdWx0KSkge1xyXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgVG9OdW1FcnJvcih2YWwpXHJcblxyXG4gICAgaWYgKHRocm93RXJyb3IpIHRocm93IGVycm9yXHJcblxyXG4gICAgLy8g0JXRgdC70Lgg0L7RiNC40LHQutCwINC90LUg0L/RgNC+0LHRgNCw0YHRi9Cy0LDQtdGC0YHRjyDigJQg0L/RgNC+0YHRgtC+INC70L7Qs9C40YDRg9C10LxcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IudG9TdHJpbmcoKSlcclxuICAgIHJldHVybiBkZWZWYWx1ZVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc3VsdFxyXG59XHJcblxyXG4vKipcclxuICog0JrQsNGB0YLQvtC80L3Ri9C5INGC0LjQvyDQvtGI0LjQsdC60Lgg0LTQu9GPINGH0LjRgdC70L7QstGL0YUg0L/RgNC10L7QsdGA0LDQt9C+0LLQsNC90LjQuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFRvTnVtRXJyb3IgZXh0ZW5kcyBFcnJvciB7XHJcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHR5cGVvZiB2YWx1ZVxyXG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPVxyXG4gICAgICB2YWx1ZVR5cGUgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogU3RyaW5nKHZhbHVlKVxyXG4gICAgY29uc3QgbWVzc2FnZSA9IGBJbnZhbGlkIHZhbHVlIHBhc3NlZCB0byB0b051bSgpOiAke2Zvcm1hdHRlZFZhbHVlfSAodHlwZTogJHt2YWx1ZVR5cGV9KWBcclxuICAgIHN1cGVyKG1lc3NhZ2UpXHJcbiAgICB0aGlzLm5hbWUgPSAnVG9OdW1FcnJvcidcclxuXHJcbiAgICAvLyDRgdC+0YXRgNCw0L3Rj9C10Lwg0YHRgtC10Log0LLRi9C30L7QstCwICjQvtGC0YTQuNC70YzRgtGA0L7QstCw0LIg0YHQsNC8INC60L7QvdGB0YLRgNGD0LrRgtC+0YApXHJcbiAgICBpZiAodGhpcy5zdGFjaykge1xyXG4gICAgICBjb25zdCBzdGFja0xpbmVzID0gdGhpcy5zdGFjay5zcGxpdCgnXFxuJylcclxuICAgICAgLy8g0KPQtNCw0LvRj9C10Lwg0YHRgtGA0L7QutGDINC60L7QvdGB0YLRgNGD0LrRgtC+0YDQsCAo0YfRgtC+0LHRiyDRgdGC0LXQuiDQvdCw0YfQuNC90LDQu9GB0Y8g0YEg0LzQtdGB0YLQsCDQstGL0LfQvtCy0LAgdG9OdW0pXHJcbiAgICAgIHRoaXMuc3RhY2sgPSBbc3RhY2tMaW5lc1swXSwgLi4uc3RhY2tMaW5lcy5zbGljZSgyKV0uam9pbignXFxuJylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBg4p2MIFske3RoaXMubmFtZX1dICR7dGhpcy5tZXNzYWdlfWAsXHJcbiAgICAgIHRoaXMuc3RhY2sgPyBgICAgU3RhY2sgdHJhY2U6XFxuJHt0aGlzLnN0YWNrfWAgOiAnJyxcclxuICAgIF0uam9pbignXFxuJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntC/0YbQuNC4INC00LvRjyB0b0RhdGUoKS4g0J7RgdGC0LDQstC70LXQvdGLINC00LvRjyDQvtCx0YDQsNGC0L3QvtC5INGB0L7QstC80LXRgdGC0LjQvNC+0YHRgtC4INGB0LjQs9C90LDRgtGD0YDRiyDigJQg0YDQsNC90LXQtSDQv9GA0L7QsdGA0LDRgdGL0LLQsNC70LjRgdGMXHJcbiAqINCyIGx1eG9uICjQt9C+0L3QsC/Qu9C+0LrQsNC70YwpLiDQoNCw0LfQsdC+0YAg0LTQsNGC0Ysg0YLQtdC/0LXRgNGMINC90LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQstC90LXRiNC90LjRhSDQsdC40LHQu9C40L7RgtC10Log0Lgg0L/QvtC00LTQtdGA0LbQuNCy0LDQtdGCXHJcbiAqINGC0L7Qu9GM0LrQviDRhNC40LrRgdC40YDQvtCy0LDQvdC90YvQtSDRh9C40YHQu9C+0LLRi9C1INGC0L7QutC10L3RiyAo0YHQvC4gcGFyc2VEYXRlV2l0aEZvcm1hdCksINC/0L7RjdGC0L7QvNGDINC+0L/RhtC40Lgg0YHQtdC50YfQsNGBINC90LUg0LjRgdC/0L7Qu9GM0LfRg9GO0YLRgdGPLlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBUb0RhdGVPcHRpb25zIHtcclxuICB6b25lPzogc3RyaW5nXHJcbiAgbG9jYWxlPzogc3RyaW5nXHJcbn1cclxuXHJcbi8qKiDQodC+0L7RgtCy0LXRgtGB0YLQstC40LUg0YLQvtC60LXQvdC+0LIg0YTQvtGA0LzQsNGC0LAg0YDQtdCz0YPQu9GP0YDQvdGL0Lwg0LPRgNGD0L/Qv9Cw0Lwg0LfQsNGF0LLQsNGC0LAuINCf0L7RgNGP0LTQvtC6INCy0LDQttC10L06INC00LvQuNC90L3Ri9C1INGC0L7QutC10L3RiyDQv9GA0L7QstC10YDRj9GO0YLRgdGPINGA0LDQvdGM0YjQtSDQutC+0YDQvtGC0LrQuNGFICovXHJcbmNvbnN0IERBVEVfRk9STUFUX1RPS0VOUzogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gIFsneXl5eScsICcoPzx5eXl5PlxcXFxkezR9KSddLFxyXG4gIFsneXknLCAnKD88eXk+XFxcXGR7Mn0pJ10sXHJcbiAgWydNTScsICcoPzxNTT5cXFxcZHsyfSknXSxcclxuICBbJ00nLCAnKD88TT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnZGQnLCAnKD88ZGQ+XFxcXGR7Mn0pJ10sXHJcbiAgWydkJywgJyg/PGQ+XFxcXGR7MSwyfSknXSxcclxuICBbJ0hIJywgJyg/PEhIPlxcXFxkezJ9KSddLFxyXG4gIFsnSCcsICcoPzxIPlxcXFxkezEsMn0pJ10sXHJcbiAgWydtbScsICcoPzxtbT5cXFxcZHsyfSknXSxcclxuICBbJ20nLCAnKD88bT5cXFxcZHsxLDJ9KSddLFxyXG4gIFsnc3MnLCAnKD88c3M+XFxcXGR7Mn0pJ10sXHJcbiAgWydzJywgJyg/PHM+XFxcXGR7MSwyfSknXSxcclxuXVxyXG5cclxuY29uc3QgREFURV9GT1JNQVRfVE9LRU5fUkVHRVggPSBuZXcgUmVnRXhwKERBVEVfRk9STUFUX1RPS0VOUy5tYXAoKFt0b2tlbl0pID0+IHRva2VuKS5qb2luKCd8JyksICdnJylcclxuXHJcbmNvbnN0IFRJTUVfT05MWV9UT0tFTlMgPSBuZXcgU2V0KFsnSEgnLCAnSCcsICdtbScsICdtJywgJ3NzJywgJ3MnXSlcclxuXHJcbi8qKlxyXG4gKiDQktGL0LLQvtC00LjRgiDRhNC+0YDQvNCw0YIgXCLRgtC+0LvRjNC60L4g0LTQsNGC0LBcIiDQuNC3INGE0L7RgNC80LDRgtCwINC00LDRgtGLLdC4LdCy0YDQtdC80LXQvdC4IOKAlCDQvtGC0YDQtdC30LDQtdGCINCy0YDQtdC80Y8g0Lgg0YDQsNC30LTQtdC70LjRgtC10LvRjCDQv9C10YDQtdC0XHJcbiAqINC90LjQvCAo0L3QsNC/0YDQuNC80LXRgCwgYCdkZC5NTS55eXl5IEhIOm1tOnNzJ2Ag4oaSIGAnZGQuTU0ueXl5eSdgKS4g0J/QvtGA0Y/QtNC+0Log0LTQtdC90Ywv0LzQtdGB0Y/Rhi/Qs9C+0LQg0YMg0L/QvtC70LXQuVxyXG4gKiBcItC00LDRgtCwXCIg0LggXCLQtNCw0YLQsC3QstGA0LXQvNGPXCIg0L3QsCDQvtC00L3QvtC8INC/0L7RgNGC0LDQu9C1IEJpdHJpeDI0INCy0YHQtdCz0LTQsCDRgdC+0LPQu9Cw0YHQvtCy0LDQvSDigJQg0YDQsNC30LvQuNGH0LDQtdGC0YHRjyDRgtC+0LvRjNC60L5cclxuICog0L3QsNC70LjRh9C40LUgYEhIOm1tOnNzYCwg0L/QvtGN0YLQvtC80YMg0L3QtdGCINGB0LzRi9GB0LvQsCDQt9Cw0YHRgtCw0LLQu9GP0YLRjCDQstGL0LfRi9Cy0LDRjtGJ0LXQs9C+INC/0LXRgNC10LTQsNCy0LDRgtGMINC+0LHQsCDRhNC+0YDQvNCw0YLQsCDQuFxyXG4gKiDQtNC10YDQttCw0YLRjCDQuNGFINCyINGB0LjQvdGF0YDQvtC90LUg0LLRgNGD0YfQvdGD0Y4uXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlRGF0ZU9ubHlGb3JtYXQoZGF0ZVRpbWVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbFxyXG5cclxuICB3aGlsZSAoKG1hdGNoID0gREFURV9GT1JNQVRfVE9LRU5fUkVHRVguZXhlYyhkYXRlVGltZUZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBpZiAoVElNRV9PTkxZX1RPS0VOUy5oYXMobWF0Y2hbMF0pKSB7XHJcbiAgICAgIC8vINCe0YLRgNC10LfQsNC10Lwg0LvRjtCx0L7QuSDRgNCw0LfQtNC10LvQuNGC0LXQu9GMINC/0LXRgNC10LQg0LLRgNC10LzQtdC90LXQvCwg0LLQutC70Y7Rh9Cw0Y8g0LHRg9C60LLQtdC90L3Ri9C5ICjQvdCw0L/RgNC40LzQtdGAICdUJyDQsiBJU08t0YHRgtC40LvQtVxyXG4gICAgICAvLyAnZGQuTU0ueXl5eVRISDptbTpzcycpLCDQsCDQvdC1INGC0L7Qu9GM0LrQviDQv9GD0L3QutGC0YPQsNGG0LjRjiDigJQg0L7RgdGC0LDQvdCw0LLQu9C40LLQsNC10LzRgdGPINC90LAg0L/QvtGB0LvQtdC00L3QtdC8INGB0LjQvNCy0L7Qu9C1LFxyXG4gICAgICAvLyDQutC+0YLQvtGA0YvQuSDRgNC10LDQu9GM0L3QviDQvtGC0L3QvtGB0LjRgtGB0Y8g0Log0YLQvtC60LXQvdCw0Lwg0LTQsNGC0YsgKHkvTS9kKS5cclxuICAgICAgY29uc3QgZGF0ZVBhcnQgPSBkYXRlVGltZUZvcm1hdC5zbGljZSgwLCBtYXRjaC5pbmRleCkucmVwbGFjZSgvW155TWRdKyQvLCAnJylcclxuICAgICAgcmV0dXJuIGRhdGVQYXJ0IHx8IGRhdGVUaW1lRm9ybWF0XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGF0ZVRpbWVGb3JtYXRcclxufVxyXG5cclxuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcclxuICByZXR1cm4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcclxufVxyXG5cclxuLyoqXHJcbiAqINCk0L7RgNC80LDRgtGLINC00LDRgiwg0LrQvtGC0L7RgNGL0LUgQml0cml4MjQg0YDQtdCw0LvRjNC90L4g0L/RgNC40YHRi9C70LDQtdGCINCyINGA0LDQt9C90YvRhSDQvNC10YLQvtC00LDRhSBSRVNUINC4INC90LAg0YDQsNC30L3Ri9GFXHJcbiAqINC/0L7RgNGC0LDQu9Cw0YUg4oCUINGE0L7RgNC80LDRgiDQtNCw0YLRiy/QstGA0LXQvNC10L3QuCDQsiDQvtGC0LLQtdGC0LUg0LfQsNCy0LjRgdC40YIg0L7RgiDQvdCw0YHRgtGA0L7QtdC6INC/0L7RgNGC0LDQu9CwICjQndCw0YHRgtGA0L7QudC60Lgg4oaSINGE0L7RgNC80LDRglxyXG4gKiDQtNCw0YLRiyDQuCDQstGA0LXQvNC10L3QuCksINC/0L7RjdGC0L7QvNGDINC+0LTQuNC9INC30LDRhdCw0YDQtNC60L7QttC10L3QvdGL0Lkg0YjQsNCx0LvQvtC9INC90LUg0YPQvdC40LLQtdGA0YHQsNC70LXQvS4g0JXRgdC70Lgg0Y/QstC90YvQuSBgZm9ybWF0YCxcclxuICog0L/QtdGA0LXQtNCw0L3QvdGL0Lkg0LIgdG9EYXRlKCksINC90LUg0YHQvtCy0L/QsNC7INGB0L4g0LfQvdCw0YfQtdC90LjQtdC8LCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0YHRgtGA0L7QutGDINC90LXQstCw0LvQuNC00L3QvtC5LFxyXG4gKiDQv9GA0L7QsdGD0LXQvCDRjdGC0Lgg0LLQsNGA0LjQsNC90YLRiyDQv9C+INC+0YfQtdGA0LXQtNC4IOKAlCDQvtC90Lgg0L3QtSDQv9C10YDQtdGB0LXQutCw0Y7RgtGB0Y8g0L/QviDRgNCw0LfQtNC10LvQuNGC0LXQu9GP0Lwv0L/QvtGA0Y/QtNC60YMg0YLQvtC60LXQvdC+0LIsXHJcbiAqINGC0LDQuiDRh9GC0L4g0LvQvtC20L3Ri9GFINGB0L7QstC/0LDQtNC10L3QuNC5INC90LUg0LHRg9C00LXRgi5cclxuICovXHJcbmNvbnN0IEZBTExCQUNLX0RBVEVfRk9STUFUUyA9IFtcclxuICAnZGQuTU0ueXl5eSBISDptbTpzcycsXHJcbiAgJ3l5eXktTU0tZGQgSEg6bW06c3MnLFxyXG4gICdkZC5NTS55eXl5JyxcclxuICAneXl5eS1NTS1kZCcsXHJcbl1cclxuXHJcbi8qKlxyXG4gKiDQoNCw0LfQsdC40YDQsNC10YIg0YHRgtGA0L7QutGDINC00LDRgtGLINC/0L4g0L/RgNC+0YHRgtC+0LzRgyDRiNCw0LHQu9C+0L3RgyAoeXl5eSwgTU0sIGRkLCBISCwgbW0sIHNzINC4INC40YUg0L7QtNC90L7QsdGD0LrQstC10L3QvdGL0LVcclxuICog0LLQsNGA0LjQsNC90YLRiywg0L3QsNC/0YDQuNC80LXRgCAnZGQuTU0ueXl5eSBISDptbTpzcycpLiDQoNCw0LfQtNC10LvQuNGC0LXQu9C4INC80LXQttC00YMg0YLQvtC60LXQvdCw0LzQuCDQsdC10YDRg9GC0YHRjyDQuNC3INGI0LDQsdC70L7QvdCwXHJcbiAqINC60LDQuiDQtdGB0YLRjC4g0J3QtSDQv9C+0LTQtNC10YDQttC40LLQsNC10YIg0LvQvtC60LDQu9C4LCDQvdCw0LfQstCw0L3QuNGPINC80LXRgdGP0YbQtdCyINC4INGH0LDRgdC+0LLRi9C1INC/0L7Rj9GB0LAg4oCUINC00LvRjyBSRVNULdC+0YLQstC10YLQvtCyXHJcbiAqIEJpdHJpeDI0INC+0L3QuCDQvdC1INGC0YDQtdCx0YPRjtGC0YHRjywg0LfQvdCw0YfQtdC90LjRjyDQstGB0LXQs9C00LAg0L/RgNC40YXQvtC00Y/RgiDQsiDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QvCDRh9C40YHQu9C+0LLQvtC8INCy0LjQtNC1LlxyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWw6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgdG9rZW5NYXAgPSBuZXcgTWFwKERBVEVfRk9STUFUX1RPS0VOUylcclxuICBsZXQgcGF0dGVybiA9ICcnXHJcbiAgbGV0IGxhc3RJbmRleCA9IDBcclxuICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGxcclxuXHJcbiAgREFURV9GT1JNQVRfVE9LRU5fUkVHRVgubGFzdEluZGV4ID0gMFxyXG4gIHdoaWxlICgobWF0Y2ggPSBEQVRFX0ZPUk1BVF9UT0tFTl9SRUdFWC5leGVjKGZvcm1hdCkpICE9PSBudWxsKSB7XHJcbiAgICBwYXR0ZXJuICs9IGVzY2FwZVJlZ0V4cChmb3JtYXQuc2xpY2UobGFzdEluZGV4LCBtYXRjaC5pbmRleCkpXHJcbiAgICBwYXR0ZXJuICs9IHRva2VuTWFwLmdldChtYXRjaFswXSlcclxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoXHJcbiAgfVxyXG4gIHBhdHRlcm4gKz0gZXNjYXBlUmVnRXhwKGZvcm1hdC5zbGljZShsYXN0SW5kZXgpKVxyXG5cclxuICBjb25zdCByZXN1bHQgPSBuZXcgUmVnRXhwKGBeJHtwYXR0ZXJufSRgKS5leGVjKHZhbClcclxuICBpZiAoIXJlc3VsdD8uZ3JvdXBzKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgZyA9IHJlc3VsdC5ncm91cHNcclxuICBjb25zdCB5ZWFyID0gZ1sneXl5eSddID8gTnVtYmVyKGdbJ3l5eXknXSkgOiBnWyd5eSddID8gMjAwMCArIE51bWJlcihnWyd5eSddKSA6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKVxyXG4gIGNvbnN0IG1vbnRoID0gTnVtYmVyKGdbJ01NJ10gPz8gZ1snTSddID8/IDEpXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGdbJ2RkJ10gPz8gZ1snZCddID8/IDEpXHJcbiAgY29uc3QgaG91ciA9IE51bWJlcihnWydISCddID8/IGdbJ0gnXSA/PyAwKVxyXG4gIGNvbnN0IG1pbnV0ZSA9IE51bWJlcihnWydtbSddID8/IGdbJ20nXSA/PyAwKVxyXG4gIGNvbnN0IHNlY29uZCA9IE51bWJlcihnWydzcyddID8/IGdbJ3MnXSA/PyAwKVxyXG5cclxuICAvLyDQotC+0LrQtdC90Ysg4oCUINGN0YLQviDQv9GA0L7RgdGC0L4gXCJOINGG0LjRhNGAXCIsINCx0LXQtyDQv9GA0L7QstC10YDQutC4INC00LjQsNC/0LDQt9C+0L3QsCAocmVnZXgg0L3QtSDQvtGC0LvQuNGH0LjRgiBcIjEzXCIg0LzQtdGB0Y/RhtCwINC+0YJcclxuICAvLyBcIjEzXCIg0LTQvdGPKS4g0JHQtdC3INGN0YLQvtC5INC/0YDQvtCy0LXRgNC60LggbmV3IERhdGUoKSDQvNC+0LvRh9CwIFwi0L/QtdGA0LXQutCw0YLRi9Cy0LDQtdGCXCIg0L/QtdGA0LXQv9C+0LvQvdC10L3QuNC1INC90LAg0YHQvtGB0LXQtNC90LjQuVxyXG4gIC8vINC80LXRgdGP0YYv0LPQvtC0ICjQvdCw0L/RgNC40LzQtdGALCDQvNC10YHRj9GGPTEzIOKGkiDRj9C90LLQsNGA0Ywg0YHQu9C10LTRg9GO0YnQtdCz0L4g0LPQvtC00LApINCy0LzQtdGB0YLQviDRgtC+0LPQviwg0YfRgtC+0LHRiyDRgdGH0LjRgtCw0YLRjFxyXG4gIC8vINGB0YLRgNC+0LrRgyDQvdC10LLQsNC70LjQtNC90L7QuS5cclxuICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIgfHwgZGF5IDwgMSB8fCBkYXkgPiAzMSB8fCBob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG59XHJcblxyXG4vKiog0KHQvtCx0LjRgNCw0LXRgiDQtNCw0YLRgywg0L7RgtCx0YDQsNGB0YvQstCw0Y8g0L3QtdGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSDQtNC90Lgg0LzQtdGB0Y/RhtCwOiBuZXcgRGF0ZSgpINC/0YDQtdCy0YDQsNGC0LjQuyDQsdGLIDMxINGE0LXQstGA0LDQu9GPINCyIDMg0LzQsNGA0YLQsC4gKi9cclxuZnVuY3Rpb24gYnVpbGREYXRlKHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciwgZGF5OiBudW1iZXIsIGhvdXI6IG51bWJlciwgbWludXRlOiBudW1iZXIsIHNlY29uZDogbnVtYmVyKTogRGF0ZSB8IG51bGwge1xyXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQpXHJcbiAgcmV0dXJuIChpc05hTihkYXRlLmdldFRpbWUoKSkgfHwgZGF0ZS5nZXRNb250aCgpICE9PSBtb250aCAtIDEgfHwgZGF0ZS5nZXREYXRlKCkgIT09IGRheSkgPyBudWxsIDogZGF0ZVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtGB0LvQtdC00L3QuNC5INGA0LXQt9C10YDQstC90YvQuSDRgNCw0LfQsdC+0YAg4oCUINCx0LXQtyDQt9C90LDQvdC40Y8g0LrQvtC90LrRgNC10YLQvdC+0LPQviDRhNC+0YDQvNCw0YLQsC4g0KDQsNCx0L7RgtCw0LXRgiDRgtC+0LvRjNC60L4g0LTQu9GPINGH0LjRgdGC0L5cclxuICog0YfQuNGB0LvQvtCy0YvRhSDQtNCw0YIgKNC90LjQutCw0LrQuNGFINC90LDQt9Cy0LDQvdC40Lkg0LzQtdGB0Y/RhtC10LIv0LTQvdC10Lkg4oCUINC00LvRjyDRjdGC0L7Qs9C+INC90YPQttC90YsgbG9jYWxlLdGC0LDQsdC70LjRhtGLLCDQsCDRjdGC0L4g0LrQsNC6XHJcbiAqINGA0LDQtyDRgtC+0YIg0LLQtdGBLCDRgNCw0LTQuCDRg9GF0L7QtNCwINC+0YIg0LrQvtGC0L7RgNC+0LPQviBsdXhvbiDQsdGL0Lsg0YPQsdGA0LDQvSDQuNC3INC30LDQstC40YHQuNC80L7RgdGC0LXQuSkuXHJcbiAqXHJcbiAqINCY0LTQtdGPOiDQs9C+0LQg4oCUINC10LTQuNC90YHRgtCy0LXQvdC90YvQuSDRgdC10LPQvNC10L3RgiDQtNC70LjQvdC+0Lkg0YDQvtCy0L3QviA0INGG0LjRhNGA0YssINC/0L7RjdGC0L7QvNGDINC10LPQviDQv9C+0LfQuNGG0LjRjyAo0L/QtdGA0LLRi9C5INC40LvQuFxyXG4gKiDQv9C+0YHQu9C10LTQvdC40Lkg0LjQtyDRgtGA0ZHRhSDRgdC10LPQvNC10L3RgtC+0LIg0LTQsNGC0YspINC+0LTQvdC+0LfQvdCw0YfQvdC+INC+0L/QvtC30L3QsNGR0YLRgdGPINC/0YDQuCDQu9GO0LHQvtC8INGA0LDQt9C00LXQu9C40YLQtdC70LUgKGAuYCwgYC1gLFxyXG4gKiBgL2AsINC/0YDQvtCx0LXQuy4uLikuINCc0LXRgdGP0YYg0L/QviDQstGB0LXQvCDRgNCw0YHQv9GA0L7RgdGC0YDQsNC90ZHQvdC90YvQvCDQsiDQvNC40YDQtSDRgdC+0LPQu9Cw0YjQtdC90LjRj9C8IChJU08gYHl5eXktTU0tZGRgINC4XHJcbiAqINC10LLRgNC+0L/QtdC50YHQutC+0LUgYGRkLk1NLnl5eXlgKSDRgdGC0L7QuNGCINC80LXQttC00YMg0LPQvtC00L7QvCDQuCDQtNC90ZHQvCwg0L/QvtGN0YLQvtC80YMg0LHQtdGA0ZHRgtGB0Y8g0LrQsNC6INGB0YDQtdC00L3QuNC5INGB0LXQs9C80LXQvdGCLlxyXG4gKiDQktGA0LXQvNGPLCDQtdGB0LvQuCDQtdGB0YLRjCwg0LLRgdC10LPQtNCwINC40LTRkdGCINC60LDQuiBgSEg6bW06c3NgIOKAlCDRjdGC0L7RgiDQv9C+0YDRj9C00L7QuiDRg9C90LjQstC10YDRgdCw0LvQtdC9LlxyXG4gKlxyXG4gKiDQndC1INGA0LXRiNCw0LXRgiDQuCDQvdC1INC/0YvRgtCw0LXRgtGB0Y8g0YDQtdGI0LjRgtGMINC90LXQvtC00L3QvtC30L3QsNGH0L3QvtGB0YLRjCDQtNC10L3RjC/QvNC10YHRj9GGINCyINGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0YvRhSDRhNC+0YDQvNCw0YLQsNGFINCy0LjQtNCwXHJcbiAqIGBNTS9kZC95eXl5YCAo0KHQqNCQKSwg0LPQtNC1INC+0LHQsCDRgdC10LPQvNC10L3RgtCwINC80L7Qs9GD0YIg0LHRi9GC0Ywg4omkMTIg4oCUINGD0LPQsNC00YvQstCw0YLRjCDRjdGC0L4g0LHQtdC3INC30L3QsNC90LjRjyDQu9C+0LrQsNC70LhcclxuICog0LfQvdCw0YfQuNC70L4g0LHRiyDQuNC90L7Qs9C00LAg0LzQvtC70YfQsCDQv9GD0YLQsNGC0Ywg0LTQtdC90Ywg0YEg0LzQtdGB0Y/RhtC10LwsINGH0YLQviDRhdGD0LbQtSDRj9Cy0L3QvtC5INC+0YjQuNCx0LrQuC5cclxuICovXHJcbmZ1bmN0aW9uIHBhcnNlRGF0ZUhldXJpc3RpY2FsbHkodmFsOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XHJcbiAgY29uc3QgcGFydHMgPSB2YWwubWF0Y2goL1xcZCsvZylcclxuICBpZiAoIXBhcnRzIHx8IHBhcnRzLmxlbmd0aCA8IDMgfHwgcGFydHMubGVuZ3RoID4gNikge1xyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IFtkMCwgZDEsIGQyLCAuLi50aW1lUGFydHNdID0gcGFydHNcclxuICBjb25zdCBkYXRlUGFydHMgPSBbZDAsIGQxLCBkMl1cclxuICBjb25zdCB5ZWFySWR4ID0gZGF0ZVBhcnRzLmZpbmRJbmRleChwID0+IHAubGVuZ3RoID09PSA0KVxyXG4gIC8vINCT0L7QtCDQtNC+0LvQttC10L0g0LHRi9GC0Ywg0L7QtNC90L7Qt9C90LDRh9C90L4g0L3QsNC50LTQtdC9ICjRgNC+0LLQvdC+IDQg0YbQuNGE0YDRiykg0Lgg0YHRgtC+0Y/RgtGMINGBINC60YDQsNGPLCDQsCDQvdC1INCyINGB0LXRgNC10LTQuNC90LUg4oCUXHJcbiAgLy8g0LjQvdCw0YfQtSDQv9C+0LfQuNGG0LjRjyDQvNC10YHRj9GG0LAv0LTQvdGPINC90LUg0L7Qv9GA0LXQtNC10LvQuNGC0Ywg0LHQtdC30L7Qv9Cw0YHQvdC+LlxyXG4gIGlmICh5ZWFySWR4ICE9PSAwICYmIHllYXJJZHggIT09IDIpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4XSlcclxuICBjb25zdCBtb250aCA9IE51bWJlcihkYXRlUGFydHNbMV0pXHJcbiAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVQYXJ0c1t5ZWFySWR4ID09PSAwID8gMiA6IDBdKVxyXG4gIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMiB8fCBkYXkgPCAxIHx8IGRheSA+IDMxKSB7XHJcbiAgICByZXR1cm4gbnVsbFxyXG4gIH1cclxuXHJcbiAgY29uc3QgW2hoLCBtbSwgc3NdID0gdGltZVBhcnRzXHJcbiAgY29uc3QgaG91ciA9IGhoICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoaGgpIDogMFxyXG4gIGNvbnN0IG1pbnV0ZSA9IG1tICE9PSB1bmRlZmluZWQgPyBOdW1iZXIobW0pIDogMFxyXG4gIGNvbnN0IHNlY29uZCA9IHNzICE9PSB1bmRlZmluZWQgPyBOdW1iZXIoc3MpIDogMFxyXG4gIGlmIChob3VyID4gMjMgfHwgbWludXRlID4gNTkgfHwgc2Vjb25kID4gNTkpIHtcclxuICAgIHJldHVybiBudWxsXHJcbiAgfVxyXG5cclxuICByZXR1cm4gYnVpbGREYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC00LDRgtGDLlxyXG4gKlxyXG4gKiDQldGB0LvQuCDQv9C10YDQtdC00LDQvSBgZm9ybWF0YCwg0L3QviDQt9C90LDRh9C10L3QuNC1INC10LzRgyDQvdC1INGB0L7QvtGC0LLQtdGC0YHRgtCy0YPQtdGCICjRgdC8LiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMg4oCUXHJcbiAqINCw0LrRgtGD0LDQu9GM0L3QviDQtNC70Y8g0L/QvtC70LXQuSwg0LPQtNC1IEJpdHJpeDI0INC+0YLQtNCw0ZHRgiDQtNCw0YLRgyDQsiDRhNC+0YDQvNCw0YLQtSwg0L3QsNGB0YLRgNC+0LXQvdC90L7QvCDQvdCwINC/0L7RgNGC0LDQu9C1LCDQsCDQvdC1INCyXHJcbiAqINGC0L7QvCwg0YfRgtC+INC30LDRhdCw0YDQtNC60L7QttC10L0g0LIg0LzQsNC/0L/QtdGA0LUpLCDQv9C10YDQtdC0INGC0LXQvCDQutCw0Log0YHRh9C40YLQsNGC0Ywg0LfQvdCw0YfQtdC90LjQtSDQvdC10LLQsNC70LjQtNC90YvQvCwg0LTQtdC70LDRjtGC0YHRjyDQtdGJ0ZFcclxuICog0LTQstC1INC/0L7Qv9GL0YLQutC4OiDQtNGA0YPQs9C40LUg0YDQsNGB0L/RgNC+0YHRgtGA0LDQvdGR0L3QvdGL0LUg0YTQvtGA0LzQsNGC0YsgQml0cml4MjQsINCwINC30LDRgtC10Lwg4oCUINC/0L7Qt9C40YbQuNC+0L3QvdCw0Y8g0Y3QstGA0LjRgdGC0LjQutCwXHJcbiAqICjRgdC8LiBwYXJzZURhdGVIZXVyaXN0aWNhbGx5KSwg0LrQvtGC0L7RgNCw0Y8g0YDQsNGB0L/QvtC30L3QsNGR0YIg0L/RgNCw0LrRgtC40YfQtdGB0LrQuCDQu9GO0LHQvtC5INGH0LjRgdGC0L4g0YfQuNGB0LvQvtCy0L7QuSDRhNC+0YDQvNCw0YJcclxuICog0LTQsNGC0Ysg0L3QtdC30LDQstC40YHQuNC80L4g0L7RgiDRgNCw0LfQtNC10LvQuNGC0LXQu9GPLiDQldGB0LvQuCDQv9GA0LjQu9C+0LbQtdC90LjRjiDRgtC+0YfQvdC+INC40LfQstC10YHRgtC10L0g0YTQvtGA0LzQsNGCINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0L/QvtGA0YLQsNC70LAsXHJcbiAqINC10LPQviDRgdGC0L7QuNGCINC/0LXRgNC10LTQsNCy0LDRgtGMINGP0LLQvdGL0LwgYGZvcm1hdGAg4oCUINGN0YLQviDQstGB0LXQs9C00LAg0L/RgNC40L7RgNC40YLQtdGC0L3QtdC1INGD0LPQsNC00YvQstCw0L3QuNGPLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRGF0ZSh2YWw6IG51bWJlciB8IHN0cmluZyB8IERhdGUsIGZvcm1hdD86IHN0cmluZywgb3B0PzogVG9EYXRlT3B0aW9ucywgdGhyb3dFcnJvciA9IHRydWUpOiBEYXRlIHtcclxuICBpZiAodmFsIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgcmV0dXJuIHZhbFxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcclxuICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VEYXRlV2l0aEZvcm1hdCh2YWwsIGZvcm1hdClcclxuICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZWRcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChjb25zdCBmYWxsYmFja0Zvcm1hdCBvZiBGQUxMQkFDS19EQVRFX0ZPUk1BVFMpIHtcclxuICAgICAgICBpZiAoZmFsbGJhY2tGb3JtYXQgPT09IGZvcm1hdCkgY29udGludWVcclxuICAgICAgICBjb25zdCBmYWxsYmFja1BhcnNlZCA9IHBhcnNlRGF0ZVdpdGhGb3JtYXQodmFsLCBmYWxsYmFja0Zvcm1hdClcclxuICAgICAgICBpZiAoZmFsbGJhY2tQYXJzZWQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxsYmFja1BhcnNlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaGV1cmlzdGljUGFyc2VkID0gcGFyc2VEYXRlSGV1cmlzdGljYWxseSh2YWwpXHJcbiAgICAgIGlmIChoZXVyaXN0aWNQYXJzZWQpIHtcclxuICAgICAgICByZXR1cm4gaGV1cmlzdGljUGFyc2VkXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWwpXHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbClcclxuICB9XHJcblxyXG4gIGlmICh0aHJvd0Vycm9yKSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcsIHZhbCwgZm9ybWF0KVxyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdXcm9uZyBkYXRlIGZvcm1hdCcpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gbmV3IERhdGUoKVxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQtNCw0YLRgyDQsiDRgdGC0YDQvtC60YMg0YEg0YPRh9C10YLQvtC8INCy0YDQtdC80LXQvdC90L7QuSDQt9C+0L3Ri1xyXG4gKlxyXG4gKiDQpNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1INC00LXQu9C10LPQuNGA0L7QstCw0L3QviB0b0xvY2FsQXRvbSgpIOKAlCDRgNCw0L3RjNGI0LUg0LfQtNC10YHRjCDQsdGL0LvQsCDQstGC0L7RgNCw0Y8sXHJcbiAqINC90LXQt9Cw0LLQuNGB0LjQvNCw0Y8g0LrQvtC/0LjRjyDRgtC+0Lkg0LbQtSDRhNC+0YDQvNGD0LvRiyAocGFkZGluZCArINGB0LzQtdGJ0LXQvdC40LUg0YLQsNC50LzQt9C+0L3RiyksINC60L7RgtC+0YDQsNGPXHJcbiAqINC80L7Qs9C70LAg0YDQsNC30L7QudGC0LjRgdGMINGBIHRvTG9jYWxBdG9tKCkg0L/RgNC4INC/0YDQsNCy0LrQtSDQvtC00L3QvtC5INC40Lcg0L3QuNGFINC4INC90LUg0LTRgNGD0LPQvtC5LlxyXG4gKlxyXG4gKiBAcGFyYW0gZGF0ZVxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvSVNPU3RyaW5nV2l0aFRpbWV6b25lKGRhdGU6IERhdGUsIHRocm93RXJyb3IgPSB0cnVlKTogc3RyaW5nIHtcclxuICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcclxuICAgIGlmICh0aHJvd0Vycm9yKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWU6IG5vdCBhIHZhbGlkIERhdGUgb2JqZWN0JylcclxuICAgIHJldHVybiAnJ1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRvTG9jYWxBdG9tKGRhdGUpXHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LVcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKiBAcGFyYW0gdGhyb3dFcnJvclxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQm9vbCh2YWw6IGFueSwgdGhyb3dFcnJvciA9IHRydWUpOiBib29sZWFuIHtcclxuICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHtcclxuICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgIHZhbCA9IHZhbC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgIGlmICh2YWwgPT09ICduJyB8fCB2YWwgPT09ICd5JykgeyAvLyDQsdC40YLRgNC40LrRgdC+0LLRi9C1INC/0L7QvdGP0YLQuNGPINC+IGJvb2xcclxuICAgICAgICByZXR1cm4gdmFsID09PSAneSdcclxuICAgICAgfSBlbHNlIGlmICh2YWwgPT09ICd0cnVlJyB8fCB2YWwgPT09ICdmYWxzZScpIHsgLy8g0LHQuNGC0YDQuNC60YHQvtCy0YvQtSDQv9C+0L3Rj9GC0LjRjyDQviBib29sXHJcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gJ3RydWUnXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRocm93RXJyb3IpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZTogY2Fubm90IGJlIGNvbnZlcnRlZCB0byBib29sZWFuJylcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgfVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIEJvb2xlYW4odmFsKVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqINCf0YDQtdC+0LHRgNCw0LfRg9C10YIg0LHRg9C70LXQstC+INC30L3QsNGH0LXQvdC40LUg0LIgJ1knINC40LvQuCAnTidcclxuICpcclxuICogQHBhcmFtIHZhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvQlhZb3JOKHZhbDogYm9vbGVhbik6IHN0cmluZyB7XHJcbiAgcmV0dXJuIHZhbCA/ICdZJyA6ICdOJ1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZVVybEh0dHBzKHVybDogc3RyaW5nLCBjb21wb25lbnQgPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgcmV0dXJuIGVuY29kZVVSSShjcm9wVXJsKHVybCkgKyAnLycpXHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBlbmNvZGVVUkkoJ2h0dHBzOi8vJyArIGNyb3BVcmwodXJsKSArICcvJylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDQntCx0YDQtdC30LDQtdGCIFVSTCAo0YPQtNCw0LvRj9C10YIg0L/RgNC+0YLQvtC60L7QuylcclxuICpcclxuICogQHBhcmFtIHVybFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyb3BVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczovLycsICcnKSA6ICcnXHJcbiAgdXJsID0gdXJsID8gdXJsLnJlcGxhY2UoJ2h0dHA6Ly8nLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwczonLCAnJykgOiAnJ1xyXG4gIHVybCA9IHVybCA/IHVybC5yZXBsYWNlKCdodHRwOicsICcnKSA6ICcnXHJcbiAgcmV0dXJuIHVybFxyXG59XHJcblxyXG4vKipcclxuICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDRhNCw0LnQuyDQsiBiYXNlNjRcclxuICpcclxuICogQHBhcmFtIGZpbGVcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlNjRGaWxlKGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKVxyXG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdCBhcyBzdHJpbmcpXHJcbiAgICByZWFkZXIub25lcnJvciA9IGVycm9yID0+IHJlamVjdChlcnJvcilcclxuICB9KVxyXG59XHJcblxyXG4vKipcclxuICog0J/QvtC70YPRh9C40YLRjCDRhNCw0LnQuyDQsiDRhNC+0YDQvNCw0YLQtSBiYXNlNjQg0YEg0YDQsNC30LHQuNCy0LrQvtC5INC90LAg0LfQsNCz0L7Qu9C+0LLQvtC6INC4INC00LDQvdC90YvQtVxyXG4gKlxyXG4gKiBAcGFyYW0gZmlsZVxyXG4gKi9cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhc2U2NEZpbGVMaWtlU3RyKGZpbGU6IEZpbGUpOiBQcm9taXNlPHtcclxuICBoZWFkZXI6IHN0cmluZyxcclxuICB2YWw6IHN0cmluZ1xyXG59IHwgdW5kZWZpbmVkPiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2V0QmFzZTY0RmlsZShmaWxlKVxyXG4gIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJykge1xyXG4gICAgY29uc3Qgc3BsaXQgPSByZXN1bHQuc3BsaXQoJywnKVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaGVhZGVyOiBzcGxpdFswXSxcclxuICAgICAgdmFsOiBzcGxpdFsxXVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdW5kZWZpbmVkXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmFzZUFkZHJlc3ModXJsOiBzdHJpbmcsIGFkZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gJycpIHtcclxuICBpZiAoYWRkICYmIGFkZC5sZW5ndGggPiAwKSB7XHJcbiAgICBpZiAodXJsLmxhc3RJbmRleE9mKCcvJykgIT09ICh1cmwubGVuZ3RoIC0gMSkpIHtcclxuICAgICAgdXJsID0gdXJsICsgJy8nXHJcbiAgICB9XHJcblxyXG4gICAgdXJsID0gdXJsICsgYWRkXHJcbiAgfVxyXG5cclxuICBpZiAodXJsLmxhc3RJbmRleE9mKCcvJykgIT09ICh1cmwubGVuZ3RoIC0gMSkpIHtcclxuICAgIHVybCA9IHVybCArICcvJ1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHVybFxyXG59Il19
@@ -0,0 +1,59 @@
1
+ import { BXRestSettings } from '../settings';
2
+ /**
3
+ * Контекст клиента: его настройки, экземпляр axios и общее состояние
4
+ * продления авторизации и очереди `throttle`.
5
+ *
6
+ * Объекты библиотеки запоминают контекст в момент создания
7
+ * (`currentContext()`), поэтому все запросы клиента `new BXRestNavvy(settings)`
8
+ * идут с его настройками, а не с глобальными. Внутренняя деталь библиотеки.
9
+ */
10
+ export class BXRestContext {
11
+ constructor(own) {
12
+ this.own = own;
13
+ /** Сколько продлений уже завершилось успешно. */
14
+ this.refreshCount = 0;
15
+ /** Очередь `throttle`: когда можно отправить следующий запрос клиента (мс, Date.now()). */
16
+ this.throttleNextSlot = 0;
17
+ }
18
+ /**
19
+ * Свои настройки клиента, а без них — глобальные `BXRestSettings.value`,
20
+ * прочитанные в момент обращения: `BXRestSettings.update()` заменяет объект.
21
+ */
22
+ get settings() {
23
+ return this.own ?? BXRestSettings.value;
24
+ }
25
+ }
26
+ /**
27
+ * Контекст глобальных настроек. С ним работают `new BXRestNavvy()` без
28
+ * аргумента и объекты, созданные приложением напрямую (`new Navvy()`,
29
+ * `new BXRestRequest()`).
30
+ */
31
+ export const globalContext = /* @__PURE__ */ new BXRestContext();
32
+ let current = globalContext;
33
+ export function currentContext() {
34
+ return current;
35
+ }
36
+ /**
37
+ * Делает `ctx` текущим и возвращает прежний контекст. Вызывающий обязан
38
+ * вернуть его через `restoreContext()` в `finally`: иначе после исключения
39
+ * чужие настройки достанутся объектам, созданным позже.
40
+ */
41
+ export function enterContext(ctx) {
42
+ const previous = current;
43
+ current = ctx;
44
+ return previous;
45
+ }
46
+ export function restoreContext(previous) {
47
+ current = previous;
48
+ }
49
+ /** Создаёт объекты в контексте `ctx` и возвращает прежний контекст, даже при исключении. */
50
+ export function runInContext(ctx, build) {
51
+ const previous = enterContext(ctx);
52
+ try {
53
+ return build();
54
+ }
55
+ finally {
56
+ restoreContext(previous);
57
+ }
58
+ }
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2J4LXJlc3Qvc3JjL3NlcnZpY2VzL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUk1Qzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFVeEIsWUFBNkIsR0FBcUI7UUFBckIsUUFBRyxHQUFILEdBQUcsQ0FBa0I7UUFQbEQsaURBQWlEO1FBQ2pELGlCQUFZLEdBQUcsQ0FBQyxDQUFBO1FBR2hCLDJGQUEyRjtRQUMzRixxQkFBZ0IsR0FBRyxDQUFDLENBQUE7SUFFaUMsQ0FBQztJQUV0RDs7O09BR0c7SUFDSCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksY0FBYyxDQUFDLEtBQUssQ0FBQTtJQUN6QyxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFBO0FBRWhFLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQTtBQUUzQixNQUFNLFVBQVUsY0FBYztJQUM1QixPQUFPLE9BQU8sQ0FBQTtBQUNoQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsR0FBa0I7SUFDN0MsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFBO0lBQ3hCLE9BQU8sR0FBRyxHQUFHLENBQUE7SUFDYixPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxRQUF1QjtJQUNwRCxPQUFPLEdBQUcsUUFBUSxDQUFBO0FBQ3BCLENBQUM7QUFFRCw0RkFBNEY7QUFDNUYsTUFBTSxVQUFVLFlBQVksQ0FBSSxHQUFrQixFQUFFLEtBQWM7SUFDaEUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xDLElBQUksQ0FBQztRQUNILE9BQU8sS0FBSyxFQUFFLENBQUE7SUFDaEIsQ0FBQztZQUFTLENBQUM7UUFDVCxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDMUIsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCWFJlc3RTZXR0aW5ncyB9IGZyb20gJy4uL3NldHRpbmdzJ1xyXG5pbXBvcnQgeyBpQlhSZXN0U2V0dGluZ3MgfSBmcm9tICcuLi90eXBpZmljYXRpb24vc2V0dGluZ3MnXHJcbmltcG9ydCB0eXBlIHsgQXhpb3NJbnN0YW5jZSB9IGZyb20gJ2F4aW9zJ1xyXG5cclxuLyoqXHJcbiAqINCa0L7QvdGC0LXQutGB0YIg0LrQu9C40LXQvdGC0LA6INC10LPQviDQvdCw0YHRgtGA0L7QudC60LgsINGN0LrQt9C10LzQv9C70Y/RgCBheGlvcyDQuCDQvtCx0YnQtdC1INGB0L7RgdGC0L7Rj9C90LjQtVxyXG4gKiDQv9GA0L7QtNC70LXQvdC40Y8g0LDQstGC0L7RgNC40LfQsNGG0LjQuCDQuCDQvtGH0LXRgNC10LTQuCBgdGhyb3R0bGVgLlxyXG4gKlxyXG4gKiDQntCx0YrQtdC60YLRiyDQsdC40LHQu9C40L7RgtC10LrQuCDQt9Cw0L/QvtC80LjQvdCw0Y7RgiDQutC+0L3RgtC10LrRgdGCINCyINC80L7QvNC10L3RgiDRgdC+0LfQtNCw0L3QuNGPXHJcbiAqIChgY3VycmVudENvbnRleHQoKWApLCDQv9C+0Y3RgtC+0LzRgyDQstGB0LUg0LfQsNC/0YDQvtGB0Ysg0LrQu9C40LXQvdGC0LAgYG5ldyBCWFJlc3ROYXZ2eShzZXR0aW5ncylgXHJcbiAqINC40LTRg9GCINGBINC10LPQviDQvdCw0YHRgtGA0L7QudC60LDQvNC4LCDQsCDQvdC1INGBINCz0LvQvtCx0LDQu9GM0L3Ri9C80LguINCS0L3Rg9GC0YDQtdC90L3Rj9GPINC00LXRgtCw0LvRjCDQsdC40LHQu9C40L7RgtC10LrQuC5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBCWFJlc3RDb250ZXh0IHtcclxuICAvKiog0JjQtNGD0YnQtdC1INGB0LXQudGH0LDRgSDQv9GA0L7QtNC70LXQvdC40LUg0LDQstGC0L7RgNC40LfQsNGG0LjQuCwg0LXQs9C+INC20LTRg9GCINCy0YHQtSDRg9C/0LDQstGI0LjQtSDQt9Cw0L/RgNC+0YHRiyDQutC70LjQtdC90YLQsC4gKi9cclxuICBwZW5kaW5nUmVmcmVzaDogUHJvbWlzZTx2b2lkPiB8IHVuZGVmaW5lZFxyXG4gIC8qKiDQodC60L7Qu9GM0LrQviDQv9GA0L7QtNC70LXQvdC40Lkg0YPQttC1INC30LDQstC10YDRiNC40LvQvtGB0Ywg0YPRgdC/0LXRiNC90L4uICovXHJcbiAgcmVmcmVzaENvdW50ID0gMFxyXG4gIC8qKiDQrdC60LfQtdC80L/Qu9GP0YAgYXhpb3Mg0LrQu9C40LXQvdGC0LA6INC+0LTQuNC9INC90LAg0LrQvtC90YLQtdC60YHRgiwg0YHQvtC30LTQsNGR0YLRgdGPINC/0YDQuCDQv9C10YDQstC+0Lwg0LfQsNC/0YDQvtGB0LUuICovXHJcbiAgYXhpb3M6IEF4aW9zSW5zdGFuY2UgfCB1bmRlZmluZWRcclxuICAvKiog0J7Rh9C10YDQtdC00YwgYHRocm90dGxlYDog0LrQvtCz0LTQsCDQvNC+0LbQvdC+INC+0YLQv9GA0LDQstC40YLRjCDRgdC70LXQtNGD0Y7RidC40Lkg0LfQsNC/0YDQvtGBINC60LvQuNC10L3RgtCwICjQvNGBLCBEYXRlLm5vdygpKS4gKi9cclxuICB0aHJvdHRsZU5leHRTbG90ID0gMFxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IG93bj86IGlCWFJlc3RTZXR0aW5ncykge31cclxuXHJcbiAgLyoqXHJcbiAgICog0KHQstC+0Lgg0L3QsNGB0YLRgNC+0LnQutC4INC60LvQuNC10L3RgtCwLCDQsCDQsdC10Lcg0L3QuNGFIOKAlCDQs9C70L7QsdCw0LvRjNC90YvQtSBgQlhSZXN0U2V0dGluZ3MudmFsdWVgLFxyXG4gICAqINC/0YDQvtGH0LjRgtCw0L3QvdGL0LUg0LIg0LzQvtC80LXQvdGCINC+0LHRgNCw0YnQtdC90LjRjzogYEJYUmVzdFNldHRpbmdzLnVwZGF0ZSgpYCDQt9Cw0LzQtdC90Y/QtdGCINC+0LHRitC10LrRgi5cclxuICAgKi9cclxuICBnZXQgc2V0dGluZ3MoKTogaUJYUmVzdFNldHRpbmdzIHtcclxuICAgIHJldHVybiB0aGlzLm93biA/PyBCWFJlc3RTZXR0aW5ncy52YWx1ZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqINCa0L7QvdGC0LXQutGB0YIg0LPQu9C+0LHQsNC70YzQvdGL0YUg0L3QsNGB0YLRgNC+0LXQui4g0KEg0L3QuNC8INGA0LDQsdC+0YLQsNGO0YIgYG5ldyBCWFJlc3ROYXZ2eSgpYCDQsdC10LdcclxuICog0LDRgNCz0YPQvNC10L3RgtCwINC4INC+0LHRitC10LrRgtGLLCDRgdC+0LfQtNCw0L3QvdGL0LUg0L/RgNC40LvQvtC20LXQvdC40LXQvCDQvdCw0L/RgNGP0LzRg9GOIChgbmV3IE5hdnZ5KClgLFxyXG4gKiBgbmV3IEJYUmVzdFJlcXVlc3QoKWApLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGdsb2JhbENvbnRleHQgPSAvKiBAX19QVVJFX18gKi8gbmV3IEJYUmVzdENvbnRleHQoKVxyXG5cclxubGV0IGN1cnJlbnQgPSBnbG9iYWxDb250ZXh0XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3VycmVudENvbnRleHQoKTogQlhSZXN0Q29udGV4dCB7XHJcbiAgcmV0dXJuIGN1cnJlbnRcclxufVxyXG5cclxuLyoqXHJcbiAqINCU0LXQu9Cw0LXRgiBgY3R4YCDRgtC10LrRg9GJ0LjQvCDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDQv9GA0LXQttC90LjQuSDQutC+0L3RgtC10LrRgdGCLiDQktGL0LfRi9Cy0LDRjtGJ0LjQuSDQvtCx0Y/Qt9Cw0L1cclxuICog0LLQtdGA0L3Rg9GC0Ywg0LXQs9C+INGH0LXRgNC10LcgYHJlc3RvcmVDb250ZXh0KClgINCyIGBmaW5hbGx5YDog0LjQvdCw0YfQtSDQv9C+0YHQu9C1INC40YHQutC70Y7Rh9C10L3QuNGPXHJcbiAqINGH0YPQttC40LUg0L3QsNGB0YLRgNC+0LnQutC4INC00L7RgdGC0LDQvdGD0YLRgdGPINC+0LHRitC10LrRgtCw0LwsINGB0L7Qt9C00LDQvdC90YvQvCDQv9C+0LfQttC1LlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGVudGVyQ29udGV4dChjdHg6IEJYUmVzdENvbnRleHQpOiBCWFJlc3RDb250ZXh0IHtcclxuICBjb25zdCBwcmV2aW91cyA9IGN1cnJlbnRcclxuICBjdXJyZW50ID0gY3R4XHJcbiAgcmV0dXJuIHByZXZpb3VzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXN0b3JlQ29udGV4dChwcmV2aW91czogQlhSZXN0Q29udGV4dCk6IHZvaWQge1xyXG4gIGN1cnJlbnQgPSBwcmV2aW91c1xyXG59XHJcblxyXG4vKiog0KHQvtC30LTQsNGR0YIg0L7QsdGK0LXQutGC0Ysg0LIg0LrQvtC90YLQtdC60YHRgtC1IGBjdHhgINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQtdC20L3QuNC5INC60L7QvdGC0LXQutGB0YIsINC00LDQttC1INC/0YDQuCDQuNGB0LrQu9GO0YfQtdC90LjQuC4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluQ29udGV4dDxUPihjdHg6IEJYUmVzdENvbnRleHQsIGJ1aWxkOiAoKSA9PiBUKTogVCB7XHJcbiAgY29uc3QgcHJldmlvdXMgPSBlbnRlckNvbnRleHQoY3R4KVxyXG4gIHRyeSB7XHJcbiAgICByZXR1cm4gYnVpbGQoKVxyXG4gIH0gZmluYWxseSB7XHJcbiAgICByZXN0b3JlQ29udGV4dChwcmV2aW91cylcclxuICB9XHJcbn1cclxuIl19
@@ -1,4 +1,4 @@
1
- import { throwError, forkJoin, from, defer } from 'rxjs';
1
+ import { Observable, throwError, forkJoin, defer } from 'rxjs';
2
2
  import clone from 'just-clone';
3
3
  import { HttpServices } from './http';
4
4
  import flatten from 'just-flatten-it';
@@ -7,6 +7,8 @@ import { switchMap } from 'rxjs/operators';
7
7
  import { prepareBaseAddress } from '../base';
8
8
  import { serializeBitrixParams as stringifyBitrixParams } from '../../functions/serializeBitrixParams';
9
9
  import { withAuthRefresh } from './authRefresh';
10
+ import { composeMiddleware } from './transport';
11
+ import { builtInMiddleware } from './middleware';
10
12
  export class HttpBXServices extends HttpServices {
11
13
  /**
12
14
  * Не считайте этот метод образцом/финальным API.
@@ -71,8 +73,8 @@ export class HttpBXServices extends HttpServices {
71
73
  get(name, params = {}, headers) {
72
74
  return this.httpGet(this.getNameMethod(name), params, undefined, headers);
73
75
  }
74
- // settings — только для совместимости сигнатуры с HttpServices: здесь тело
75
- // уходит JSON-ом/urlencoded, и пересчёт дат из iHttpParamSettings не нужен.
76
+ // settings не используется и оставлен ради прежней сигнатуры: headers
77
+ // остаётся четвёртым параметром у httpPost и httpGet.
76
78
  httpPost(url, params = {}, settings, headers) {
77
79
  // defer() откладывает всё содержимое (в том числе чтение BXRestSettings
78
80
  // через this.session.*) до реальной подписки — иначе даже с "живым"
@@ -103,20 +105,19 @@ export class HttpBXServices extends HttpServices {
103
105
  return throwError(() => this.session.getBaseUrlError('post'));
104
106
  }
105
107
  const fullUrl = prepareBaseAddress(baseUrl) + url;
106
- if (key === 'sessid') {
107
- // Преобразуем параметры в формат x-www-form-urlencoded
108
- const bodyString = this.serializeBitrixParams(paramsClone);
109
- return from(this.axiosInstance.post(fullUrl, bodyString, {
110
- withCredentials: this.session.getWithCredentials(),
111
- headers: this.buildHeaders(headers, { 'Content-Type': 'application/x-www-form-urlencoded' }),
112
- }).then((response) => response.data));
113
- }
114
- return from(this.axiosInstance.post(fullUrl, paramsClone, {
108
+ // sessid — тело x-www-form-urlencoded, остальные ключи — JSON
109
+ const urlencoded = key === 'sessid';
110
+ return this.send({
111
+ method: 'POST',
112
+ url: fullUrl,
113
+ data: urlencoded ? this.serializeBitrixParams(paramsClone) : paramsClone,
115
114
  withCredentials: this.session.getWithCredentials(),
116
- headers: this.buildHeaders(headers, { 'Content-Type': 'application/json' }),
117
- }).then((response) => response.data));
115
+ headers: this.buildHeaders(headers, {
116
+ 'Content-Type': urlencoded ? 'application/x-www-form-urlencoded' : 'application/json'
117
+ }),
118
+ });
118
119
  }));
119
- }));
120
+ }), this.session.ctx);
120
121
  }
121
122
  httpGet(url, params = {}, settings, headers) {
122
123
  // Та же причина, что и у httpPost выше: откладываем чтение BXRestSettings
@@ -144,12 +145,41 @@ export class HttpBXServices extends HttpServices {
144
145
  const fullUrl = prepareBaseAddress(baseUrl) + url;
145
146
  const queryString = this.serializeBitrixParams(paramsClone);
146
147
  const finalUrl = `${fullUrl}?${queryString}`;
147
- return from(this.axiosInstance.get(finalUrl, {
148
+ return this.send({
149
+ method: 'GET',
150
+ url: finalUrl,
148
151
  withCredentials: this.session.getWithCredentials(),
149
152
  headers: this.buildHeaders(headers),
150
- }).then((response) => response.data));
153
+ });
151
154
  }));
152
- }));
155
+ }), this.session.ctx);
156
+ }
157
+ /**
158
+ * Отправка через шаги из настроек: `retryOnQueryLimit`, `throttle`,
159
+ * `timeout`, затем `middleware`; последним идёт axios клиента. Настройки
160
+ * читаются при подписке. Отписка отменяет HTTP-запрос (AbortSignal).
161
+ * Ошибка транспорта уходит дальше как есть: у axios в ней весь запрос,
162
+ * вместе с токеном и секретом вебхука (см. README, «Обработка ошибок»).
163
+ */
164
+ send(config) {
165
+ return new Observable(subscriber => {
166
+ const controller = new AbortController();
167
+ const ctx = this.session.ctx;
168
+ const send = composeMiddleware([...builtInMiddleware(ctx.settings, ctx), ...this.session.getMiddleware()], request => this.axiosSend(request));
169
+ send({ ...config, signal: controller.signal }).then(data => {
170
+ subscriber.next(data);
171
+ subscriber.complete();
172
+ }, (error) => subscriber.error(error));
173
+ return () => controller.abort();
174
+ });
175
+ }
176
+ /** Транспорт по умолчанию: axios клиента, как и раньше через post()/get(). */
177
+ axiosSend(config) {
178
+ const options = { headers: config.headers, withCredentials: config.withCredentials, signal: config.signal };
179
+ const request = (config.method === 'GET')
180
+ ? this.axiosInstance.get(config.url, options)
181
+ : this.axiosInstance.post(config.url, config.data, options);
182
+ return request.then(response => response.data);
153
183
  }
154
184
  /**
155
185
  * Заголовки запроса: `BXRestSettings.headers`, поверх них — заголовки
@@ -167,4 +197,4 @@ export class HttpBXServices extends HttpServices {
167
197
  return arr.join('.');
168
198
  }
169
199
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEJYLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC9IdHRwQlgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFVBQVUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNwRSxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUtyQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFL0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxZQUFZO0lBRTlDOzs7O09BSUc7SUFDSCxNQUFNLENBQU8sS0FBeUQ7UUFFcEUsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBLENBQUMsbUJBQW1CO1FBQ25DLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQSxDQUFDLDJDQUEyQztRQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDL0QsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDakUsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUNiLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2dCQUNqQyxJQUFJLEVBQUUsQ0FBQztnQkFDUCxHQUFHLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNsQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQTtnQkFDdkIsQ0FBQyxDQUFDLENBQUM7YUFDSixDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FDcUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsWUFBWSxDQUFJLEtBQXlEO1FBQ3ZFLElBQUksR0FBRyxHQUEyQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FDekQsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWCxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO1lBQ2IsT0FBTyxHQUFHLENBQUE7UUFDWixDQUFDLEVBQ0QsRUFBNEIsQ0FDN0IsQ0FBQTtRQUNELEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDdEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDM0UsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUM1RSxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQztJQUVELGVBQWUsQ0FBSSxHQUE2QjtRQUM5QyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUN0QyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxJQUFJLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQ3hGLENBQUE7SUFDMUIsQ0FBQztJQUVELHlCQUF5QixDQUFJLEdBQTZCO1FBQ3hELE9BQU8sT0FBTyxDQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNqRCxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxJQUFJLDhCQUE4QixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQ2pCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUNoQixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFJLENBQUksSUFBYyxFQUFFLFNBQWMsRUFBRSxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBZ0M7UUFDekYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN2QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQW1CLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDeEcsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILEdBQUcsQ0FBSSxJQUFjLEVBQUUsU0FBYyxFQUFFLEVBQUUsT0FBZ0M7UUFDdkUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFtQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSw0RUFBNEU7SUFDbkUsUUFBUSxDQUNmLEdBQVcsRUFDWCxTQUFjLEVBQUUsRUFDaEIsUUFBNkIsRUFDN0IsT0FBZ0M7UUFFaEMsd0VBQXdFO1FBQ3hFLG9FQUFvRTtRQUNwRSxzRUFBc0U7UUFDdEUsb0VBQW9FO1FBQ3BFLGlEQUFpRDtRQUNqRCxFQUFFO1FBQ0YseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxvRUFBb0U7UUFDcEUsd0VBQXdFO1FBQ3hFLHdCQUF3QjtRQUN4QixPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFBO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBRXZELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNWLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7Z0JBQzVELENBQUM7Z0JBRUQsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3JCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUE7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDYixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO2dCQUMvRCxDQUFDO2dCQUVELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQTtnQkFFakQsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3JCLHVEQUF1RDtvQkFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFBO29CQUMxRCxPQUFPLElBQUksQ0FDVCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBSSxPQUFPLEVBQUUsVUFBVSxFQUFFO3dCQUM5QyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTt3QkFDbEQsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUMsY0FBYyxFQUFFLG1DQUFtQyxFQUFDLENBQUM7cUJBQzNGLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDckMsQ0FBQTtnQkFDSCxDQUFDO2dCQUVELE9BQU8sSUFBSSxDQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFJLE9BQU8sRUFBRSxXQUFXLEVBQzdDO29CQUNFLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO29CQUNsRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBQyxjQUFjLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQztpQkFDMUUsQ0FDRixDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUNwQyxDQUFBO1lBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtRQUNILENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDTCxDQUFDO0lBRVEsT0FBTyxDQUNkLEdBQVcsRUFDWCxTQUFjLEVBQUUsRUFDaEIsUUFBNkIsRUFDN0IsT0FBZ0M7UUFFaEMsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSx5RUFBeUU7UUFDekUsNkRBQTZEO1FBQzdELGdDQUFnQztRQUNoQyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFBO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFBO1lBRXZELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNWLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQzNELENBQUM7Z0JBRUQsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3JCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUE7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FDbkMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDYixPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUM5RCxDQUFDO2dCQUVELE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQTtnQkFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxDQUFBO2dCQUMzRCxNQUFNLFFBQVEsR0FBRyxHQUFHLE9BQU8sSUFBSSxXQUFXLEVBQUUsQ0FBQTtnQkFFNUMsT0FBTyxJQUFJLENBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUksUUFBUSxFQUFFO29CQUNsQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDbEQsT0FBTyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO2lCQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3JDLENBQUE7WUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLFlBQVksQ0FBQyxPQUFnQyxFQUFFLFdBQW1DLEVBQUU7UUFDMUYsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFBO0lBQ2xFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFlO1FBQ25DLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFhO1FBQ3pCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBmb3JrSm9pbiwgZnJvbSwgZGVmZXIgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgY2xvbmUgZnJvbSAnanVzdC1jbG9uZSdcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VzIH0gZnJvbSAnLi9odHRwJ1xyXG5pbXBvcnQge1xyXG4gIGlCYXRjaFJlcXVlc3RBbnN3ZXIsIGlCYXRjaFJlcXVlc3RQYXJhbSwgaUJhdGNoUmVxdWVzdFBhcmFtQXJyLCBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwLCBrZXlCYXRjaCxcclxufSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXRjaC9iYXRjaFJlcXVlc3RQYXJhbSdcclxuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgZmxhdHRlbiBmcm9tICdqdXN0LWZsYXR0ZW4taXQnXHJcbmltcG9ydCB7IGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBwcmVwYXJlQmFzZUFkZHJlc3MgfSBmcm9tICcuLi9iYXNlJ1xyXG5pbXBvcnQgeyBzZXJpYWxpemVCaXRyaXhQYXJhbXMgYXMgc3RyaW5naWZ5Qml0cml4UGFyYW1zIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3NlcmlhbGl6ZUJpdHJpeFBhcmFtcydcclxuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXHJcbmltcG9ydCB7IHdpdGhBdXRoUmVmcmVzaCB9IGZyb20gJy4vYXV0aFJlZnJlc2gnXHJcblxyXG5leHBvcnQgY2xhc3MgSHR0cEJYU2VydmljZXMgZXh0ZW5kcyBIdHRwU2VydmljZXMge1xyXG5cclxuICAvKipcclxuICAgKiDQndC1INGB0YfQuNGC0LDQudGC0LUg0Y3RgtC+0YIg0LzQtdGC0L7QtCDQvtCx0YDQsNC30YbQvtC8L9GE0LjQvdCw0LvRjNC90YvQvCBBUEkuXHJcbiAgICogVE9ETzog0KPQtNCw0LvQuNGC0Ywg0LTQsNC90L3Ri9C5INC80LXRgtC+0LQg0L/QvtGB0LvQtSDRgNC10LDQu9C40LfQsNGG0LjQuCDQtdCz0L4g0LIg0YDQsNC30LTQtdC70LUgTmF2dnlcclxuICAgKiBAcGFyYW0gcGFyYW1cclxuICAgKi9cclxuICBicmFuY2g8VCwgQT4ocGFyYW06IGlCYXRjaFJlcXVlc3RQYXJhbUFycjxUPiB8IGlCYXRjaFJlcXVlc3RQYXJhbTxUPltdKVxyXG4gICAgOiBPYnNlcnZhYmxlPGlCYXRjaFJlcXVlc3RBbnN3ZXI8QT5bXSB8IHVuZGVmaW5lZD4ge1xyXG4gICAgbGV0IHByZXBhcmVQYXJhbSA9IE9iamVjdC5lbnRyaWVzPHN0cmluZz4odGhpcy5wcmVwYXJlQmF0Y2g8VD4ocGFyYW0pKVxyXG4gICAgY29uc3Qgc2l6ZSA9IDUwIC8vINCx0L7Qu9GM0YjQtSDQvdC1INC+0YLQtNCw0YHRglxyXG4gICAgbGV0IHN1YmFycmF5ID0gW10gLy/QvNCw0YHRgdC40LIg0LIg0LrQvtGC0L7RgNGL0Lkg0LHRg9C00LXRgiDQstGL0LLQtdC00LXQvSDRgNC10LfRg9C70YzRgtCw0YIuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE1hdGguY2VpbChwcmVwYXJlUGFyYW0ubGVuZ3RoIC8gc2l6ZSk7IGkrKykge1xyXG4gICAgICBzdWJhcnJheVtpXSA9IHByZXBhcmVQYXJhbS5zbGljZSgoaSAqIHNpemUpLCAoaSAqIHNpemUpICsgc2l6ZSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oXHJcbiAgICAgIHN1YmFycmF5Lm1hcChpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwUG9zdCgnYmF0Y2guanNvbicsIHtcclxuICAgICAgICAgIGhhbHQ6IDAsXHJcbiAgICAgICAgICBjbWQ6IE9iamVjdC5hc3NpZ24oe30sIC4uLmkubWFwKHggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1t4WzBdXTogeFsxXX1cclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIH0pXHJcbiAgICApIGFzIE9ic2VydmFibGU8aUJhdGNoUmVxdWVzdEFuc3dlcjxBPltdPlxyXG4gIH1cclxuXHJcbiAgcHJlcGFyZUJhdGNoPFQ+KHBhcmFtOiBpQmF0Y2hSZXF1ZXN0UGFyYW1BcnI8VD4gfCBpQmF0Y2hSZXF1ZXN0UGFyYW08VD5bXSk6IGlCYXRjaFJlcXVlc3RQYXJhbUh0dHAge1xyXG4gICAgbGV0IHJlczogaUJhdGNoUmVxdWVzdFBhcmFtSHR0cCA9IE9iamVjdC5rZXlzKHBhcmFtKS5yZWR1Y2UoXHJcbiAgICAgIChvYmosIGtleSkgPT4ge1xyXG4gICAgICAgIG9ialtrZXldID0gJydcclxuICAgICAgICByZXR1cm4gb2JqXHJcbiAgICAgIH0sXHJcbiAgICAgIHt9IGFzIGlCYXRjaFJlcXVlc3RQYXJhbUh0dHBcclxuICAgIClcclxuICAgIGZvciAobGV0IGtleSBpbiBwYXJhbSkge1xyXG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleSA9PT0gJ251bWJlcicgJiYgcGFyYW1ba2V5XS5wYXJhbSkge1xyXG4gICAgICAgIHJlc1trZXldID0gcGFyYW1ba2V5XS5uYW1lICsgJz8nICsgc3RyaW5naWZ5Qml0cml4UGFyYW1zKHBhcmFtW2tleV0ucGFyYW0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNcclxuICB9XHJcblxyXG4gIG1hcEJyYW5jaFJlc3VsdDxUPihyZXM6IGlCYXRjaFJlcXVlc3RBbnN3ZXI8VD5bXSkge1xyXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PlxyXG4gICAgICAoaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGkpICYmIGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpLnJlc3VsdCkpID8gaS5yZXN1bHQucmVzdWx0IDogdW5kZWZpbmVkKVxyXG4gICAgKSBhcyBSZWNvcmQ8a2V5QmF0Y2gsIFQ+XHJcbiAgfVxyXG5cclxuICBtYXBCcmFuY2hSZXN1bHRXaXRob3V0S2V5PFQ+KHJlczogaUJhdGNoUmVxdWVzdEFuc3dlcjxUPltdKTogVFtdIHtcclxuICAgIHJldHVybiBmbGF0dGVuPFQ+KE9iamVjdC5hc3NpZ24oW10sIC4uLnJlcy5tYXAoaSA9PlxyXG4gICAgICAoaW5zdGFuY2VPZmlCWFJlc3RBbnN3ZXJTdWNjZXNzKGkpICYmIGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpLnJlc3VsdCkpXHJcbiAgICAgICAgPyBpLnJlc3VsdC5yZXN1bHRcclxuICAgICAgICA6IHVuZGVmaW5lZCkpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQntGB0L3QvtCy0L3QvtC5INC80LXRgtC+0LQg0LTQu9GPINC30LDQv9GA0L7RgdC+0LJcclxuICAgKlxyXG4gICAqIEBwYXJhbSBuYW1lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSByZXN0QXBpXHJcbiAgICogQHBhcmFtIGhlYWRlcnMg0LfQsNCz0L7Qu9C+0LLQutC4INGC0L7Qu9GM0LrQviDQtNC70Y8g0Y3RgtC+0LPQviDQt9Cw0L/RgNC+0YHQsCwg0L/QvtCy0LXRgNGFIGBCWFJlc3RTZXR0aW5ncy5oZWFkZXJzYFxyXG4gICAqL1xyXG4gIHBvc3Q8VD4obmFtZTogc3RyaW5nW10sIHBhcmFtczogYW55ID0ge30sIHJlc3RBcGkgPSBmYWxzZSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIGNvbnN0IG1ldGhvZCA9IHRoaXMuZ2V0TmFtZU1ldGhvZChuYW1lKVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFBvc3Q8aUJYUmVzdEFuc3dlcjxUPj4ocmVzdEFwaSA/IGBhcGkvJHttZXRob2R9YCA6IG1ldGhvZCwgcGFyYW1zLCB1bmRlZmluZWQsIGhlYWRlcnMpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDQktGC0L7RgNC+0YHRgtC10L/QtdC90L3Ri9C5INC80LXRgtC+0LQg0LTQu9GPINC30LDQv9GA0L7RgdC+0LIuINCf0L4g0LLQvtC30LzQvtC20L3QvtGB0YLQuCDQu9GD0YfRiNC1INC90LUg0LjRgdC/0L7Qu9GM0LfQvtCy0LDRgtGMXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbmFtZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gaGVhZGVycyDQt9Cw0LPQvtC70L7QstC60Lgg0YLQvtC70YzQutC+INC00LvRjyDRjdGC0L7Qs9C+INC30LDQv9GA0L7RgdCwLCDQv9C+0LLQtdGA0YUgYEJYUmVzdFNldHRpbmdzLmhlYWRlcnNgXHJcbiAgICovXHJcbiAgZ2V0PFQ+KG5hbWU6IHN0cmluZ1tdLCBwYXJhbXM6IGFueSA9IHt9LCBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cEdldDxpQlhSZXN0QW5zd2VyPFQ+Pih0aGlzLmdldE5hbWVNZXRob2QobmFtZSksIHBhcmFtcywgdW5kZWZpbmVkLCBoZWFkZXJzKVxyXG4gIH1cclxuXHJcbiAgLy8gc2V0dGluZ3Mg4oCUINGC0L7Qu9GM0LrQviDQtNC70Y8g0YHQvtCy0LzQtdGB0YLQuNC80L7RgdGC0Lgg0YHQuNCz0L3QsNGC0YPRgNGLINGBIEh0dHBTZXJ2aWNlczog0LfQtNC10YHRjCDRgtC10LvQvlxyXG4gIC8vINGD0YXQvtC00LjRgiBKU09OLdC+0LwvdXJsZW5jb2RlZCwg0Lgg0L/QtdGA0LXRgdGH0ZHRgiDQtNCw0YIg0LjQtyBpSHR0cFBhcmFtU2V0dGluZ3Mg0L3QtSDQvdGD0LbQtdC9LlxyXG4gIG92ZXJyaWRlIGh0dHBQb3N0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSA9IHt9LFxyXG4gICAgc2V0dGluZ3M/OiBpSHR0cFBhcmFtU2V0dGluZ3MsXHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgLy8gZGVmZXIoKSDQvtGC0LrQu9Cw0LTRi9Cy0LDQtdGCINCy0YHRkSDRgdC+0LTQtdGA0LbQuNC80L7QtSAo0LIg0YLQvtC8INGH0LjRgdC70LUg0YfRgtC10L3QuNC1IEJYUmVzdFNldHRpbmdzXHJcbiAgICAvLyDRh9C10YDQtdC3IHRoaXMuc2Vzc2lvbi4qKSDQtNC+INGA0LXQsNC70YzQvdC+0Lkg0L/QvtC00L/QuNGB0LrQuCDigJQg0LjQvdCw0YfQtSDQtNCw0LbQtSDRgSBcItC20LjQstGL0LxcIlxyXG4gICAgLy8g0LPQtdGC0YLQtdGA0L7QvCDQsiBTZXNzaW9uS2V5U2VydmljZXMg0L3QsNGB0YLRgNC+0LnQutC4INGH0LjRgtCw0LvQuNGB0Ywg0LHRiyDQsiDQvNC+0LzQtdC90YIg0LLRi9C30L7QstCwXHJcbiAgICAvLyAucmVzKCksINCwINC90LUg0LIg0LzQvtC80LXQvdGCIHN1YnNjcmliZSgpL2ZpcnN0VmFsdWVGcm9tKCksINGH0YLQviDQuCDQvtCx0LXRidCw0L3QvlxyXG4gICAgLy8g0LIgUkVBRE1FINC60LDQuiDQv9C+0LLQtdC00LXQvdC40LUgXCLQu9C10L3QuNCy0L7Qs9C+XCIgUkVTVC3QstGL0LfQvtCy0LAuXHJcbiAgICAvL1xyXG4gICAgLy8gd2l0aEF1dGhSZWZyZXNoKCkg0L/QvtCy0YLQvtGA0Y/QtdGCINC30LDQv9GA0L7RgSDQv9C+0YHQu9C1IEJYUmVzdFNldHRpbmdzLmF1dGgucmVmcmVzaCDigJRcclxuICAgIC8vINC/0L7QstGC0L7RgNC90L7QuSDQv9C+0LTQv9C40YHQutC+0Lkg0L3QsCDRjdGC0L7RgiDQttC1IGRlZmVyKCksINC/0L7RjdGC0L7QvNGDINC/0L7QstGC0L7RgCDQt9Cw0L3QvtCy0L4g0YfQuNGC0LDQtdGCXHJcbiAgICAvLyDRgtC+0LrQtdC9LCDQsNC00YDQtdGBINC4INC30LDQs9C+0LvQvtCy0LrQuC4g0KfQtdGA0LXQtyBodHRwUG9zdC9odHRwR2V0INC40LTRg9GCINCy0YHQtSDQt9Cw0L/RgNC+0YHRi1xyXG4gICAgLy8g0LHQuNCx0LvQuNC+0YLQtdC60LggKHBvc3QvZ2V0LCBiYXRjaCwg0LLRgdC1INCy0LjQtNGLIE5hdnZ5LdC30LDQv9GA0L7RgdC+0LIpLCDRgtCw0Log0YfRgtC+INC/0L7QstGC0L7RgFxyXG4gICAgLy8g0LLRgdGC0YDQvtC10L0g0YLQvtC70YzQutC+INC30LTQtdGB0YwuXHJcbiAgICByZXR1cm4gd2l0aEF1dGhSZWZyZXNoKGRlZmVyKCgpID0+IHtcclxuICAgICAgY29uc3QgcGFyYW1zQ2xvbmUgPSBjbG9uZShwYXJhbXMpXHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2Vzc2lvbi5nZXRLZXlBdXRoKClcclxuICAgICAgY29uc3QgYXV0aCA9IHRoaXMuc2Vzc2lvbi5nZXRBdXRoUGFyYW1zKClcclxuICAgICAgY29uc3QgY2hlY2tJc09uID0gdGhpcy5zZXNzaW9uLmdldENoZWNrQXV0aFBhcmFtc0lzT24oKVxyXG5cclxuICAgICAgaWYgKGNoZWNrSXNPbikge1xyXG4gICAgICAgIGlmICghYXV0aCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gdGhpcy5zZXNzaW9uLmdldEF1dGhFcnJvcigncG9zdCcpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ09BdXRoMicpIHtcclxuICAgICAgICAgIHBhcmFtc0Nsb25lW2tleV0gPSBhdXRoXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoYmFzZVVybCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ3Bvc3QnKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBmdWxsVXJsID0gcHJlcGFyZUJhc2VBZGRyZXNzKGJhc2VVcmwpICsgdXJsXHJcblxyXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Nlc3NpZCcpIHtcclxuICAgICAgICAgICAgLy8g0J/RgNC10L7QsdGA0LDQt9GD0LXQvCDQv9Cw0YDQsNC80LXRgtGA0Ysg0LIg0YTQvtGA0LzQsNGCIHgtd3d3LWZvcm0tdXJsZW5jb2RlZFxyXG4gICAgICAgICAgICBjb25zdCBib2R5U3RyaW5nID0gdGhpcy5zZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zQ2xvbmUpXHJcbiAgICAgICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5wb3N0PFQ+KGZ1bGxVcmwsIGJvZHlTdHJpbmcsIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5zZXNzaW9uLmdldFdpdGhDcmVkZW50aWFscygpLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycywgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ30pLFxyXG4gICAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuIGZyb20oXHJcbiAgICAgICAgICAgIHRoaXMuYXhpb3NJbnN0YW5jZS5wb3N0PFQ+KGZ1bGxVcmwsIHBhcmFtc0Nsb25lLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5zZXNzaW9uLmdldFdpdGhDcmVkZW50aWFscygpLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycywgeydDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbid9KSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGEpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSkpXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBodHRwR2V0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSA9IHt9LFxyXG4gICAgc2V0dGluZ3M/OiBpSHR0cFBhcmFtU2V0dGluZ3MsXHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgLy8g0KLQsCDQttC1INC/0YDQuNGH0LjQvdCwLCDRh9GC0L4g0Lgg0YMgaHR0cFBvc3Qg0LLRi9GI0LU6INC+0YLQutC70LDQtNGL0LLQsNC10Lwg0YfRgtC10L3QuNC1IEJYUmVzdFNldHRpbmdzXHJcbiAgICAvLyDQtNC+INC/0L7QtNC/0LjRgdC60LgsINGH0YLQvtCx0YsgYGdldCgpYCDQstGR0Lsg0YHQtdCx0Y8g0YLQsNC6INC20LUgXCLQu9C10L3QuNCy0L5cIiwg0LrQsNC6INC4IGBwb3N0KClgXHJcbiAgICAvLyAo0YHQuNC80LzQtdGC0YDQuNGPLCDQutC+0YLQvtGA0L7QuSDQvdC1INCx0YvQu9C+INC00L4g0Y3RgtC+0LPQviDigJQgR0VUINGA0LXQt9C+0LvQstC40Lsg0L3QsNGB0YLRgNC+0LnQutC4INCyINC80L7QvNC10L3RglxyXG4gICAgLy8g0LLRi9C30L7QstCwLCDQsCDQvdC1INCyINC80L7QvNC10L3RgiBzdWJzY3JpYmUoKSkuINCf0L7QstGC0L7RgCDQv9C+0YHQu9C1INC/0YDQvtC00LvQtdC90LjRj1xyXG4gICAgLy8g0LDQstGC0L7RgNC40LfQsNGG0LjQuCDigJQg0LrQsNC6INCyIGh0dHBQb3N0LlxyXG4gICAgcmV0dXJuIHdpdGhBdXRoUmVmcmVzaChkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxyXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXHJcbiAgICAgIGNvbnN0IGF1dGggPSB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpXHJcbiAgICAgIGNvbnN0IGNoZWNrSXNPbiA9IHRoaXMuc2Vzc2lvbi5nZXRDaGVja0F1dGhQYXJhbXNJc09uKClcclxuXHJcbiAgICAgIGlmIChjaGVja0lzT24pIHtcclxuICAgICAgICBpZiAoIWF1dGgpIHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRBdXRoRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ09BdXRoMicpIHtcclxuICAgICAgICAgIHBhcmFtc0Nsb25lW2tleV0gPSBhdXRoXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoYmFzZVVybCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBwcmVwYXJlQmFzZUFkZHJlc3MoYmFzZVVybCkgKyB1cmxcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5zZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zQ2xvbmUpXHJcbiAgICAgICAgICBjb25zdCBmaW5hbFVybCA9IGAke2Z1bGxVcmx9PyR7cXVlcnlTdHJpbmd9YFxyXG5cclxuICAgICAgICAgIHJldHVybiBmcm9tKFxyXG4gICAgICAgICAgICB0aGlzLmF4aW9zSW5zdGFuY2UuZ2V0PFQ+KGZpbmFsVXJsLCB7XHJcbiAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLnNlc3Npb24uZ2V0V2l0aENyZWRlbnRpYWxzKCksXHJcbiAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycyksXHJcbiAgICAgICAgICAgIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0JfQsNCz0L7Qu9C+0LLQutC4INC30LDQv9GA0L7RgdCwOiBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2AsINC/0L7QstC10YDRhSDQvdC40YUg4oCUINC30LDQs9C+0LvQvtCy0LrQuFxyXG4gICAqINC60L7QvdC60YDQtdGC0L3QvtCz0L4g0LfQsNC/0YDQvtGB0LAsINC/0L7QstC10YDRhSDQstGB0LXQs9C+IOKAlCBgcmVxdWlyZWRgLiDQkiBgcmVxdWlyZWRgINC40LTRkdGCXHJcbiAgICogYENvbnRlbnQtVHlwZWA6INC+0YIg0L3QtdCz0L4g0LfQsNCy0LjRgdC40YIsINC60LDQuiDRgdC10YDQstC10YAg0YDQsNC30LHQtdGA0ZHRgiDRgtC10LvQviwg0L/QvtGN0YLQvtC80YNcclxuICAgKiDQv9C+0LvRjNC30L7QstCw0YLQtdC70YzRgdC60LjQtSDQt9Cw0LPQvtC70L7QstC60Lgg0LXQs9C+INC90LUg0L/QtdGA0LXQsdC40LLQsNGO0YIuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZEhlYWRlcnMoaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIHJlcXVpcmVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge30pIHtcclxuICAgIHJldHVybiB7IC4uLnRoaXMuc2Vzc2lvbi5nZXRIZWFkZXJzKCksIC4uLmhlYWRlcnMsIC4uLnJlcXVpcmVkIH1cclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZUJpdHJpeFBhcmFtcyhwYXJhbXM6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN0cmluZ2lmeUJpdHJpeFBhcmFtcyhwYXJhbXMpXHJcbiAgfVxyXG5cclxuICBnZXROYW1lTWV0aG9kKGFycjogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiBhcnIuam9pbignLicpXHJcbiAgfVxyXG5cclxufVxyXG5cclxuIl19
200
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSHR0cEJYLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYngtcmVzdC9zcmMvc2VydmljZXMvaHR0cC9IdHRwQlgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5RCxPQUFPLEtBQUssTUFBTSxZQUFZLENBQUE7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUtyQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzVDLE9BQU8sRUFBRSxxQkFBcUIsSUFBSSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBRXRHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDL0MsT0FBTyxFQUF1QixpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFFaEQsTUFBTSxPQUFPLGNBQWUsU0FBUSxZQUFZO0lBRTlDOzs7O09BSUc7SUFDSCxNQUFNLENBQU8sS0FBeUQ7UUFFcEUsSUFBSSxZQUFZLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBUyxJQUFJLENBQUMsWUFBWSxDQUFJLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDdEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFBLENBQUMsbUJBQW1CO1FBQ25DLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQSxDQUFDLDJDQUEyQztRQUM3RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMs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QUMsTUFBTSxDQUFDLENBQUE7SUFDdEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFhO1FBQ3pCLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN0QixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBmb3JrSm9pbiwgZGVmZXIgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQgY2xvbmUgZnJvbSAnanVzdC1jbG9uZSdcclxuaW1wb3J0IHsgSHR0cFNlcnZpY2VzIH0gZnJvbSAnLi9odHRwJ1xyXG5pbXBvcnQge1xyXG4gIGlCYXRjaFJlcXVlc3RBbnN3ZXIsIGlCYXRjaFJlcXVlc3RQYXJhbSwgaUJhdGNoUmVxdWVzdFBhcmFtQXJyLCBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwLCBrZXlCYXRjaCxcclxufSBmcm9tICcuLi8uLi90eXBpZmljYXRpb24vcmVzdC9iYXRjaC9iYXRjaFJlcXVlc3RQYXJhbSdcclxuaW1wb3J0IHsgaUJYUmVzdEFuc3dlciB9IGZyb20gJy4uLy4uL3R5cGlmaWNhdGlvbi9yZXN0L2Jhc2UvYW5zd2VyJ1xyXG5pbXBvcnQgZmxhdHRlbiBmcm9tICdqdXN0LWZsYXR0ZW4taXQnXHJcbmltcG9ydCB7IGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9tYXBSZXN1bHQnXHJcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBwcmVwYXJlQmFzZUFkZHJlc3MgfSBmcm9tICcuLi9iYXNlJ1xyXG5pbXBvcnQgeyBzZXJpYWxpemVCaXRyaXhQYXJhbXMgYXMgc3RyaW5naWZ5Qml0cml4UGFyYW1zIH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL3NlcmlhbGl6ZUJpdHJpeFBhcmFtcydcclxuaW1wb3J0IHsgaUh0dHBQYXJhbVNldHRpbmdzIH0gZnJvbSAnLi4vLi4vdHlwaWZpY2F0aW9uL3Jlc3Qvc2V0dGluZ3MnXHJcbmltcG9ydCB7IHdpdGhBdXRoUmVmcmVzaCB9IGZyb20gJy4vYXV0aFJlZnJlc2gnXHJcbmltcG9ydCB7IEJYUmVzdFJlcXVlc3RDb25maWcsIGNvbXBvc2VNaWRkbGV3YXJlIH0gZnJvbSAnLi90cmFuc3BvcnQnXHJcbmltcG9ydCB7IGJ1aWx0SW5NaWRkbGV3YXJlIH0gZnJvbSAnLi9taWRkbGV3YXJlJ1xyXG5cclxuZXhwb3J0IGNsYXNzIEh0dHBCWFNlcnZpY2VzIGV4dGVuZHMgSHR0cFNlcnZpY2VzIHtcclxuXHJcbiAgLyoqXHJcbiAgICog0J3QtSDRgdGH0LjRgtCw0LnRgtC1INGN0YLQvtGCINC80LXRgtC+0LQg0L7QsdGA0LDQt9GG0L7QvC/RhNC40L3QsNC70YzQvdGL0LwgQVBJLlxyXG4gICAqIFRPRE86INCj0LTQsNC70LjRgtGMINC00LDQvdC90YvQuSDQvNC10YLQvtC0INC/0L7RgdC70LUg0YDQtdCw0LvQuNC30LDRhtC40Lgg0LXQs9C+INCyINGA0LDQt9C00LXQu9C1IE5hdnZ5XHJcbiAgICogQHBhcmFtIHBhcmFtXHJcbiAgICovXHJcbiAgYnJhbmNoPFQsIEE+KHBhcmFtOiBpQmF0Y2hSZXF1ZXN0UGFyYW1BcnI8VD4gfCBpQmF0Y2hSZXF1ZXN0UGFyYW08VD5bXSlcclxuICAgIDogT2JzZXJ2YWJsZTxpQmF0Y2hSZXF1ZXN0QW5zd2VyPEE+W10gfCB1bmRlZmluZWQ+IHtcclxuICAgIGxldCBwcmVwYXJlUGFyYW0gPSBPYmplY3QuZW50cmllczxzdHJpbmc+KHRoaXMucHJlcGFyZUJhdGNoPFQ+KHBhcmFtKSlcclxuICAgIGNvbnN0IHNpemUgPSA1MCAvLyDQsdC+0LvRjNGI0LUg0L3QtSDQvtGC0LTQsNGB0YJcclxuICAgIGxldCBzdWJhcnJheSA9IFtdIC8v0LzQsNGB0YHQuNCyINCyINC60L7RgtC+0YDRi9C5INCx0YPQtNC10YIg0LLRi9Cy0LXQtNC10L0g0YDQtdC30YPQu9GM0YLQsNGCLlxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLmNlaWwocHJlcGFyZVBhcmFtLmxlbmd0aCAvIHNpemUpOyBpKyspIHtcclxuICAgICAgc3ViYXJyYXlbaV0gPSBwcmVwYXJlUGFyYW0uc2xpY2UoKGkgKiBzaXplKSwgKGkgKiBzaXplKSArIHNpemUpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKFxyXG4gICAgICBzdWJhcnJheS5tYXAoaSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFBvc3QoJ2JhdGNoLmpzb24nLCB7XHJcbiAgICAgICAgICBoYWx0OiAwLFxyXG4gICAgICAgICAgY21kOiBPYmplY3QuYXNzaWduKHt9LCAuLi5pLm1hcCh4ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHtbeFswXV06IHhbMV19XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICB9KVxyXG4gICAgICB9KVxyXG4gICAgKSBhcyBPYnNlcnZhYmxlPGlCYXRjaFJlcXVlc3RBbnN3ZXI8QT5bXT5cclxuICB9XHJcblxyXG4gIHByZXBhcmVCYXRjaDxUPihwYXJhbTogaUJhdGNoUmVxdWVzdFBhcmFtQXJyPFQ+IHwgaUJhdGNoUmVxdWVzdFBhcmFtPFQ+W10pOiBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwIHtcclxuICAgIGxldCByZXM6IGlCYXRjaFJlcXVlc3RQYXJhbUh0dHAgPSBPYmplY3Qua2V5cyhwYXJhbSkucmVkdWNlKFxyXG4gICAgICAob2JqLCBrZXkpID0+IHtcclxuICAgICAgICBvYmpba2V5XSA9ICcnXHJcbiAgICAgICAgcmV0dXJuIG9ialxyXG4gICAgICB9LFxyXG4gICAgICB7fSBhcyBpQmF0Y2hSZXF1ZXN0UGFyYW1IdHRwXHJcbiAgICApXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gcGFyYW0pIHtcclxuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBrZXkgPT09ICdudW1iZXInICYmIHBhcmFtW2tleV0ucGFyYW0pIHtcclxuICAgICAgICByZXNba2V5XSA9IHBhcmFtW2tleV0ubmFtZSArICc/JyArIHN0cmluZ2lmeUJpdHJpeFBhcmFtcyhwYXJhbVtrZXldLnBhcmFtKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzXHJcbiAgfVxyXG5cclxuICBtYXBCcmFuY2hSZXN1bHQ8VD4ocmVzOiBpQmF0Y2hSZXF1ZXN0QW5zd2VyPFQ+W10pIHtcclxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKFtdLCAuLi5yZXMubWFwKGkgPT5cclxuICAgICAgKGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpKSAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaS5yZXN1bHQpKSA/IGkucmVzdWx0LnJlc3VsdCA6IHVuZGVmaW5lZClcclxuICAgICkgYXMgUmVjb3JkPGtleUJhdGNoLCBUPlxyXG4gIH1cclxuXHJcbiAgbWFwQnJhbmNoUmVzdWx0V2l0aG91dEtleTxUPihyZXM6IGlCYXRjaFJlcXVlc3RBbnN3ZXI8VD5bXSk6IFRbXSB7XHJcbiAgICByZXR1cm4gZmxhdHRlbjxUPihPYmplY3QuYXNzaWduKFtdLCAuLi5yZXMubWFwKGkgPT5cclxuICAgICAgKGluc3RhbmNlT2ZpQlhSZXN0QW5zd2VyU3VjY2VzcyhpKSAmJiBpbnN0YW5jZU9maUJYUmVzdEFuc3dlclN1Y2Nlc3MoaS5yZXN1bHQpKVxyXG4gICAgICAgID8gaS5yZXN1bHQucmVzdWx0XHJcbiAgICAgICAgOiB1bmRlZmluZWQpKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0J7RgdC90L7QstC90L7QuSDQvNC10YLQvtC0INC00LvRjyDQt9Cw0L/RgNC+0YHQvtCyXHJcbiAgICpcclxuICAgKiBAcGFyYW0gbmFtZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gcmVzdEFwaVxyXG4gICAqIEBwYXJhbSBoZWFkZXJzINC30LDQs9C+0LvQvtCy0LrQuCDRgtC+0LvRjNC60L4g0LTQu9GPINGN0YLQvtCz0L4g0LfQsNC/0YDQvtGB0LAsINC/0L7QstC10YDRhSBgQlhSZXN0U2V0dGluZ3MuaGVhZGVyc2BcclxuICAgKi9cclxuICBwb3N0PFQ+KG5hbWU6IHN0cmluZ1tdLCBwYXJhbXM6IGFueSA9IHt9LCByZXN0QXBpID0gZmFsc2UsIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLmdldE5hbWVNZXRob2QobmFtZSlcclxuICAgIHJldHVybiB0aGlzLmh0dHBQb3N0PGlCWFJlc3RBbnN3ZXI8VD4+KHJlc3RBcGkgPyBgYXBpLyR7bWV0aG9kfWAgOiBtZXRob2QsIHBhcmFtcywgdW5kZWZpbmVkLCBoZWFkZXJzKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0JLRgtC+0YDQvtGB0YLQtdC/0LXQvdC90YvQuSDQvNC10YLQvtC0INC00LvRjyDQt9Cw0L/RgNC+0YHQvtCyLiDQn9C+INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0LvRg9GH0YjQtSDQvdC1INC40YHQv9C+0LvRjNC30L7QstCw0YLRjFxyXG4gICAqXHJcbiAgICogQHBhcmFtIG5hbWVcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGhlYWRlcnMg0LfQsNCz0L7Qu9C+0LLQutC4INGC0L7Qu9GM0LrQviDQtNC70Y8g0Y3RgtC+0LPQviDQt9Cw0L/RgNC+0YHQsCwg0L/QvtCy0LXRgNGFIGBCWFJlc3RTZXR0aW5ncy5oZWFkZXJzYFxyXG4gICAqL1xyXG4gIGdldDxUPihuYW1lOiBzdHJpbmdbXSwgcGFyYW1zOiBhbnkgPSB7fSwgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBHZXQ8aUJYUmVzdEFuc3dlcjxUPj4odGhpcy5nZXROYW1lTWV0aG9kKG5hbWUpLCBwYXJhbXMsIHVuZGVmaW5lZCwgaGVhZGVycylcclxuICB9XHJcblxyXG4gIC8vIHNldHRpbmdzINC90LUg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINC4INC+0YHRgtCw0LLQu9C10L0g0YDQsNC00Lgg0L/RgNC10LbQvdC10Lkg0YHQuNCz0L3QsNGC0YPRgNGLOiBoZWFkZXJzXHJcbiAgLy8g0L7RgdGC0LDRkdGC0YHRjyDRh9C10YLQstGR0YDRgtGL0Lwg0L/QsNGA0LDQvNC10YLRgNC+0Lwg0YMgaHR0cFBvc3Qg0LggaHR0cEdldC5cclxuICBodHRwUG9zdDxUPihcclxuICAgIHVybDogc3RyaW5nLFxyXG4gICAgcGFyYW1zOiBhbnkgPSB7fSxcclxuICAgIHNldHRpbmdzPzogaUh0dHBQYXJhbVNldHRpbmdzLFxyXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cclxuICApOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcclxuICAgIC8vIGRlZmVyKCkg0L7RgtC60LvQsNC00YvQstCw0LXRgiDQstGB0ZEg0YHQvtC00LXRgNC20LjQvNC+0LUgKNCyINGC0L7QvCDRh9C40YHQu9C1INGH0YLQtdC90LjQtSBCWFJlc3RTZXR0aW5nc1xyXG4gICAgLy8g0YfQtdGA0LXQtyB0aGlzLnNlc3Npb24uKikg0LTQviDRgNC10LDQu9GM0L3QvtC5INC/0L7QtNC/0LjRgdC60Lgg4oCUINC40L3QsNGH0LUg0LTQsNC20LUg0YEgXCLQttC40LLRi9C8XCJcclxuICAgIC8vINCz0LXRgtGC0LXRgNC+0Lwg0LIgU2Vzc2lvbktleVNlcnZpY2VzINC90LDRgdGC0YDQvtC50LrQuCDRh9C40YLQsNC70LjRgdGMINCx0Ysg0LIg0LzQvtC80LXQvdGCINCy0YvQt9C+0LLQsFxyXG4gICAgLy8gLnJlcygpLCDQsCDQvdC1INCyINC80L7QvNC10L3RgiBzdWJzY3JpYmUoKS9maXJzdFZhbHVlRnJvbSgpLCDRh9GC0L4g0Lgg0L7QsdC10YnQsNC90L5cclxuICAgIC8vINCyIFJFQURNRSDQutCw0Log0L/QvtCy0LXQtNC10L3QuNC1IFwi0LvQtdC90LjQstC+0LPQvlwiIFJFU1Qt0LLRi9C30L7QstCwLlxyXG4gICAgLy9cclxuICAgIC8vIHdpdGhBdXRoUmVmcmVzaCgpINC/0L7QstGC0L7RgNGP0LXRgiDQt9Cw0L/RgNC+0YEg0L/QvtGB0LvQtSBCWFJlc3RTZXR0aW5ncy5hdXRoLnJlZnJlc2gg4oCUXHJcbiAgICAvLyDQv9C+0LLRgtC+0YDQvdC+0Lkg0L/QvtC00L/QuNGB0LrQvtC5INC90LAg0Y3RgtC+0YIg0LbQtSBkZWZlcigpLCDQv9C+0Y3RgtC+0LzRgyDQv9C+0LLRgtC+0YAg0LfQsNC90L7QstC+INGH0LjRgtCw0LXRglxyXG4gICAgLy8g0YLQvtC60LXQvSwg0LDQtNGA0LXRgSDQuCDQt9Cw0LPQvtC70L7QstC60LguINCn0LXRgNC10LcgaHR0cFBvc3QvaHR0cEdldCDQuNC00YPRgiDQstGB0LUg0LfQsNC/0YDQvtGB0YtcclxuICAgIC8vINCx0LjQsdC70LjQvtGC0LXQutC4IChwb3N0L2dldCwgYmF0Y2gsINCy0YHQtSDQstC40LTRiyBOYXZ2eS3Qt9Cw0L/RgNC+0YHQvtCyKSwg0YLQsNC6INGH0YLQviDQv9C+0LLRgtC+0YBcclxuICAgIC8vINCy0YHRgtGA0L7QtdC9INGC0L7Qu9GM0LrQviDQt9C00LXRgdGMLlxyXG4gICAgcmV0dXJuIHdpdGhBdXRoUmVmcmVzaChkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxyXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXHJcbiAgICAgIGNvbnN0IGF1dGggPSB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpXHJcbiAgICAgIGNvbnN0IGNoZWNrSXNPbiA9IHRoaXMuc2Vzc2lvbi5nZXRDaGVja0F1dGhQYXJhbXNJc09uKClcclxuXHJcbiAgICAgIGlmIChjaGVja0lzT24pIHtcclxuICAgICAgICBpZiAoIWF1dGgpIHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRBdXRoRXJyb3IoJ3Bvc3QnKSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChrZXkgIT09ICdPQXV0aDInKSB7XHJcbiAgICAgICAgICBwYXJhbXNDbG9uZVtrZXldID0gYXV0aFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsKCkucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKGJhc2VVcmwpID0+IHtcclxuICAgICAgICAgIGlmICghYmFzZVVybCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiB0aGlzLnNlc3Npb24uZ2V0QmFzZVVybEVycm9yKCdwb3N0JykpXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgZnVsbFVybCA9IHByZXBhcmVCYXNlQWRkcmVzcyhiYXNlVXJsKSArIHVybFxyXG4gICAgICAgICAgLy8gc2Vzc2lkIOKAlCDRgtC10LvQviB4LXd3dy1mb3JtLXVybGVuY29kZWQsINC+0YHRgtCw0LvRjNC90YvQtSDQutC70Y7Rh9C4IOKAlCBKU09OXHJcbiAgICAgICAgICBjb25zdCB1cmxlbmNvZGVkID0ga2V5ID09PSAnc2Vzc2lkJ1xyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLnNlbmQ8VD4oe1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgdXJsOiBmdWxsVXJsLFxyXG4gICAgICAgICAgICBkYXRhOiB1cmxlbmNvZGVkID8gdGhpcy5zZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zQ2xvbmUpIDogcGFyYW1zQ2xvbmUsXHJcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5zZXNzaW9uLmdldFdpdGhDcmVkZW50aWFscygpLFxyXG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmJ1aWxkSGVhZGVycyhoZWFkZXJzLCB7XHJcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVybGVuY29kZWQgPyAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyA6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSksIHRoaXMuc2Vzc2lvbi5jdHgpXHJcbiAgfVxyXG5cclxuICBodHRwR2V0PFQ+KFxyXG4gICAgdXJsOiBzdHJpbmcsXHJcbiAgICBwYXJhbXM6IGFueSA9IHt9LFxyXG4gICAgc2V0dGluZ3M/OiBpSHR0cFBhcmFtU2V0dGluZ3MsXHJcbiAgICBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxyXG4gICk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xyXG4gICAgLy8g0KLQsCDQttC1INC/0YDQuNGH0LjQvdCwLCDRh9GC0L4g0Lgg0YMgaHR0cFBvc3Qg0LLRi9GI0LU6INC+0YLQutC70LDQtNGL0LLQsNC10Lwg0YfRgtC10L3QuNC1IEJYUmVzdFNldHRpbmdzXHJcbiAgICAvLyDQtNC+INC/0L7QtNC/0LjRgdC60LgsINGH0YLQvtCx0YsgYGdldCgpYCDQstGR0Lsg0YHQtdCx0Y8g0YLQsNC6INC20LUgXCLQu9C10L3QuNCy0L5cIiwg0LrQsNC6INC4IGBwb3N0KClgXHJcbiAgICAvLyAo0YHQuNC80LzQtdGC0YDQuNGPLCDQutC+0YLQvtGA0L7QuSDQvdC1INCx0YvQu9C+INC00L4g0Y3RgtC+0LPQviDigJQgR0VUINGA0LXQt9C+0LvQstC40Lsg0L3QsNGB0YLRgNC+0LnQutC4INCyINC80L7QvNC10L3RglxyXG4gICAgLy8g0LLRi9C30L7QstCwLCDQsCDQvdC1INCyINC80L7QvNC10L3RgiBzdWJzY3JpYmUoKSkuINCf0L7QstGC0L7RgCDQv9C+0YHQu9C1INC/0YDQvtC00LvQtdC90LjRj1xyXG4gICAgLy8g0LDQstGC0L7RgNC40LfQsNGG0LjQuCDigJQg0LrQsNC6INCyIGh0dHBQb3N0LlxyXG4gICAgcmV0dXJuIHdpdGhBdXRoUmVmcmVzaChkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmFtc0Nsb25lID0gY2xvbmUocGFyYW1zKVxyXG4gICAgICBjb25zdCBrZXkgPSB0aGlzLnNlc3Npb24uZ2V0S2V5QXV0aCgpXHJcbiAgICAgIGNvbnN0IGF1dGggPSB0aGlzLnNlc3Npb24uZ2V0QXV0aFBhcmFtcygpXHJcbiAgICAgIGNvbnN0IGNoZWNrSXNPbiA9IHRoaXMuc2Vzc2lvbi5nZXRDaGVja0F1dGhQYXJhbXNJc09uKClcclxuXHJcbiAgICAgIGlmIChjaGVja0lzT24pIHtcclxuICAgICAgICBpZiAoIWF1dGgpIHtcclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRBdXRoRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGtleSAhPT0gJ09BdXRoMicpIHtcclxuICAgICAgICAgIHBhcmFtc0Nsb25lW2tleV0gPSBhdXRoXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldEJhc2VVcmwoKS5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgoYmFzZVVybCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFiYXNlVXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IHRoaXMuc2Vzc2lvbi5nZXRCYXNlVXJsRXJyb3IoJ2dldCcpKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGZ1bGxVcmwgPSBwcmVwYXJlQmFzZUFkZHJlc3MoYmFzZVVybCkgKyB1cmxcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdGhpcy5zZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zQ2xvbmUpXHJcbiAgICAgICAgICBjb25zdCBmaW5hbFVybCA9IGAke2Z1bGxVcmx9PyR7cXVlcnlTdHJpbmd9YFxyXG5cclxuICAgICAgICAgIHJldHVybiB0aGlzLnNlbmQ8VD4oe1xyXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICB1cmw6IGZpbmFsVXJsLFxyXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuc2Vzc2lvbi5nZXRXaXRoQ3JlZGVudGlhbHMoKSxcclxuICAgICAgICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoaGVhZGVycyksXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pLCB0aGlzLnNlc3Npb24uY3R4KVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog0J7RgtC/0YDQsNCy0LrQsCDRh9C10YDQtdC3INGI0LDQs9C4INC40Lcg0L3QsNGB0YLRgNC+0LXQujogYHJldHJ5T25RdWVyeUxpbWl0YCwgYHRocm90dGxlYCxcclxuICAgKiBgdGltZW91dGAsINC30LDRgtC10LwgYG1pZGRsZXdhcmVgOyDQv9C+0YHQu9C10LTQvdC40Lwg0LjQtNGR0YIgYXhpb3Mg0LrQu9C40LXQvdGC0LAuINCd0LDRgdGC0YDQvtC50LrQuFxyXG4gICAqINGH0LjRgtCw0Y7RgtGB0Y8g0L/RgNC4INC/0L7QtNC/0LjRgdC60LUuINCe0YLQv9C40YHQutCwINC+0YLQvNC10L3Rj9C10YIgSFRUUC3Qt9Cw0L/RgNC+0YEgKEFib3J0U2lnbmFsKS5cclxuICAgKiDQntGI0LjQsdC60LAg0YLRgNCw0L3RgdC/0L7RgNGC0LAg0YPRhdC+0LTQuNGCINC00LDQu9GM0YjQtSDQutCw0Log0LXRgdGC0Yw6INGDIGF4aW9zINCyINC90LXQuSDQstC10YHRjCDQt9Cw0L/RgNC+0YEsXHJcbiAgICog0LLQvNC10YHRgtC1INGBINGC0L7QutC10L3QvtC8INC4INGB0LXQutGA0LXRgtC+0Lwg0LLQtdCx0YXRg9C60LAgKNGB0LwuIFJFQURNRSwgwqvQntCx0YDQsNCx0L7RgtC60LAg0L7RiNC40LHQvtC6wrspLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2VuZDxUPihjb25maWc6IEJYUmVzdFJlcXVlc3RDb25maWcpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxyXG4gICAgICBjb25zdCBjdHggPSB0aGlzLnNlc3Npb24uY3R4XHJcbiAgICAgIGNvbnN0IHNlbmQgPSBjb21wb3NlTWlkZGxld2FyZShcclxuICAgICAgICBbLi4uYnVpbHRJbk1pZGRsZXdhcmUoY3R4LnNldHRpbmdzLCBjdHgpLCAuLi50aGlzLnNlc3Npb24uZ2V0TWlkZGxld2FyZSgpXSxcclxuICAgICAgICByZXF1ZXN0ID0+IHRoaXMuYXhpb3NTZW5kKHJlcXVlc3QpXHJcbiAgICAgIClcclxuICAgICAgc2VuZCh7IC4uLmNvbmZpZywgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KS50aGVuKFxyXG4gICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGRhdGEgYXMgVCB8IHVuZGVmaW5lZClcclxuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yOiB1bmtub3duKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKVxyXG4gICAgICApXHJcbiAgICAgIHJldHVybiAoKSA9PiBjb250cm9sbGVyLmFib3J0KClcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKiog0KLRgNCw0L3RgdC/0L7RgNGCINC/0L4g0YPQvNC+0LvRh9Cw0L3QuNGOOiBheGlvcyDQutC70LjQtdC90YLQsCwg0LrQsNC6INC4INGA0LDQvdGM0YjQtSDRh9C10YDQtdC3IHBvc3QoKS9nZXQoKS4gKi9cclxuICBwcml2YXRlIGF4aW9zU2VuZChjb25maWc6IEJYUmVzdFJlcXVlc3RDb25maWcpOiBQcm9taXNlPHVua25vd24+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGhlYWRlcnM6IGNvbmZpZy5oZWFkZXJzLCB3aXRoQ3JlZGVudGlhbHM6IGNvbmZpZy53aXRoQ3JlZGVudGlhbHMsIHNpZ25hbDogY29uZmlnLnNpZ25hbCB9XHJcbiAgICBjb25zdCByZXF1ZXN0ID0gKGNvbmZpZy5tZXRob2QgPT09ICdHRVQnKVxyXG4gICAgICA/IHRoaXMuYXhpb3NJbnN0YW5jZS5nZXQoY29uZmlnLnVybCwgb3B0aW9ucylcclxuICAgICAgOiB0aGlzLmF4aW9zSW5zdGFuY2UucG9zdChjb25maWcudXJsLCBjb25maWcuZGF0YSwgb3B0aW9ucylcclxuICAgIHJldHVybiByZXF1ZXN0LnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2UuZGF0YSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqINCX0LDQs9C+0LvQvtCy0LrQuCDQt9Cw0L/RgNC+0YHQsDogYEJYUmVzdFNldHRpbmdzLmhlYWRlcnNgLCDQv9C+0LLQtdGA0YUg0L3QuNGFIOKAlCDQt9Cw0LPQvtC70L7QstC60LhcclxuICAgKiDQutC+0L3QutGA0LXRgtC90L7Qs9C+INC30LDQv9GA0L7RgdCwLCDQv9C+0LLQtdGA0YUg0LLRgdC10LPQviDigJQgYHJlcXVpcmVkYC4g0JIgYHJlcXVpcmVkYCDQuNC00ZHRglxyXG4gICAqIGBDb250ZW50LVR5cGVgOiDQvtGCINC90LXQs9C+INC30LDQstC40YHQuNGCLCDQutCw0Log0YHQtdGA0LLQtdGAINGA0LDQt9Cx0LXRgNGR0YIg0YLQtdC70L4sINC/0L7RjdGC0L7QvNGDXHJcbiAgICog0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GM0YHQutC40LUg0LfQsNCz0L7Qu9C+0LLQutC4INC10LPQviDQvdC1INC/0LXRgNC10LHQuNCy0LDRjtGCLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRIZWFkZXJzKGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCByZXF1aXJlZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9KSB7XHJcbiAgICByZXR1cm4geyAuLi50aGlzLnNlc3Npb24uZ2V0SGVhZGVycygpLCAuLi5oZWFkZXJzLCAuLi5yZXF1aXJlZCB9XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemVCaXRyaXhQYXJhbXMocGFyYW1zOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzdHJpbmdpZnlCaXRyaXhQYXJhbXMocGFyYW1zKVxyXG4gIH1cclxuXHJcbiAgZ2V0TmFtZU1ldGhvZChhcnI6IHN0cmluZ1tdKSB7XHJcbiAgICByZXR1cm4gYXJyLmpvaW4oJy4nKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==