@ai-table/grid 0.0.65 → 0.0.67

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 (210) hide show
  1. package/components/cell-editors/abstract-cell-editor.component.d.ts +3 -3
  2. package/components/cell-editors/abstract-cell-editor.component.d.ts.map +1 -1
  3. package/components/cell-editors/date/date-editor.component.d.ts +1 -1
  4. package/components/cell-editors/date/date-editor.component.d.ts.map +1 -1
  5. package/components/cell-editors/link/link-editor.component.d.ts.map +1 -1
  6. package/components/cell-editors/select/select-editor.component.d.ts +1 -1
  7. package/components/cell-editors/select/select-editor.component.d.ts.map +1 -1
  8. package/components/cell-views/select/option.component.d.ts +1 -1
  9. package/components/cell-views/select/option.component.d.ts.map +1 -1
  10. package/components/drag/drag.component.d.ts +1 -1
  11. package/components/drag/drag.component.d.ts.map +1 -1
  12. package/components/drag/drag.component.scss +1 -1
  13. package/components/field-menu/field-menu.component.d.ts +2 -1
  14. package/components/field-menu/field-menu.component.d.ts.map +1 -1
  15. package/components/field-setting/field-setting.component.d.ts +2 -1
  16. package/components/field-setting/field-setting.component.d.ts.map +1 -1
  17. package/constants/editor.d.ts +1 -1
  18. package/constants/editor.d.ts.map +1 -1
  19. package/constants/grid.d.ts +1 -1
  20. package/constants/grid.d.ts.map +1 -1
  21. package/core/constants/field.d.ts +2 -1
  22. package/core/constants/field.d.ts.map +1 -1
  23. package/core/context.d.ts +2 -1
  24. package/core/context.d.ts.map +1 -1
  25. package/core/coordinate.d.ts +2 -1
  26. package/core/coordinate.d.ts.map +1 -1
  27. package/core/types/ai-table.d.ts +2 -1
  28. package/core/types/ai-table.d.ts.map +1 -1
  29. package/core/types/core.d.ts +1 -188
  30. package/core/types/core.d.ts.map +1 -1
  31. package/core/utils/common.d.ts +2 -1
  32. package/core/utils/common.d.ts.map +1 -1
  33. package/core/utils/field.d.ts +2 -1
  34. package/core/utils/field.d.ts.map +1 -1
  35. package/core/utils/index.d.ts.map +1 -1
  36. package/core/utils/queries.d.ts +2 -1
  37. package/core/utils/queries.d.ts.map +1 -1
  38. package/dom-grid.component.d.ts +1 -1
  39. package/dom-grid.component.d.ts.map +1 -1
  40. package/esm2022/components/cell-editors/abstract-cell-editor.component.mjs +1 -1
  41. package/esm2022/components/cell-editors/date/date-editor.component.mjs +1 -1
  42. package/esm2022/components/cell-editors/link/link-editor.component.mjs +2 -1
  43. package/esm2022/components/cell-editors/select/select-editor.component.mjs +3 -2
  44. package/esm2022/components/cell-views/select/option.component.mjs +2 -2
  45. package/esm2022/components/drag/drag.component.mjs +4 -4
  46. package/esm2022/components/field-menu/field-menu.component.mjs +1 -1
  47. package/esm2022/components/field-setting/field-setting.component.mjs +3 -2
  48. package/esm2022/constants/editor.mjs +2 -2
  49. package/esm2022/constants/grid.mjs +2 -2
  50. package/esm2022/core/constants/field.mjs +2 -2
  51. package/esm2022/core/context.mjs +1 -1
  52. package/esm2022/core/coordinate.mjs +2 -2
  53. package/esm2022/core/types/ai-table.mjs +1 -1
  54. package/esm2022/core/types/core.mjs +2 -58
  55. package/esm2022/core/utils/common.mjs +1 -1
  56. package/esm2022/core/utils/field.mjs +2 -2
  57. package/esm2022/core/utils/index.mjs +1 -1
  58. package/esm2022/core/utils/queries.mjs +2 -2
  59. package/esm2022/dom-grid.component.mjs +1 -1
  60. package/esm2022/grid-base.component.mjs +3 -2
  61. package/esm2022/grid.component.mjs +3 -2
  62. package/esm2022/pipes/grid.pipe.mjs +1 -1
  63. package/esm2022/renderer/components/cells/attachment.component.mjs +2 -2
  64. package/esm2022/renderer/components/cells/cells.mjs +1 -1
  65. package/esm2022/renderer/components/cells/link.component.mjs +3 -3
  66. package/esm2022/renderer/components/cells/progress.component.mjs +2 -2
  67. package/esm2022/renderer/components/cells/rate.component.mjs +2 -2
  68. package/esm2022/renderer/components/cells/rich-text.component.mjs +2 -2
  69. package/esm2022/renderer/components/field-icon.component.mjs +2 -2
  70. package/esm2022/renderer/components/hover-cell.component.mjs +2 -3
  71. package/esm2022/renderer/components/hover-row-heads.component.mjs +2 -2
  72. package/esm2022/renderer/components/icon.component.mjs +2 -2
  73. package/esm2022/renderer/creations/create-cells.mjs +1 -1
  74. package/esm2022/renderer/drawers/cell-drawer.mjs +3 -2
  75. package/esm2022/renderer/interfaces/hover-cell.mjs +1 -1
  76. package/esm2022/services/event.service.mjs +6 -4
  77. package/esm2022/services/selection.service.mjs +3 -2
  78. package/esm2022/types/canvas.mjs +1 -1
  79. package/esm2022/types/cell.mjs +1 -1
  80. package/esm2022/types/component-config.mjs +1 -1
  81. package/esm2022/types/field.mjs +1 -1
  82. package/esm2022/types/grid.mjs +1 -6
  83. package/esm2022/types/index.mjs +1 -2
  84. package/esm2022/utils/build.mjs +1 -1
  85. package/esm2022/utils/cell.mjs +2 -2
  86. package/esm2022/utils/clipboard/copy.mjs +4 -3
  87. package/esm2022/utils/clipboard/paste.mjs +4 -3
  88. package/esm2022/utils/common.mjs +1 -11
  89. package/esm2022/utils/field/field-operable.mjs +2 -0
  90. package/esm2022/utils/field/field.mjs +20 -0
  91. package/esm2022/utils/field/index.mjs +4 -0
  92. package/esm2022/utils/field/model/attachment.mjs +7 -26
  93. package/esm2022/utils/field/model/date.mjs +8 -17
  94. package/esm2022/utils/field/model/index.mjs +12 -28
  95. package/esm2022/utils/field/model/link.mjs +6 -22
  96. package/esm2022/utils/field/model/member.mjs +6 -26
  97. package/esm2022/utils/field/model/number.mjs +7 -14
  98. package/esm2022/utils/field/model/progress.mjs +7 -18
  99. package/esm2022/utils/field/model/rate.mjs +7 -12
  100. package/esm2022/utils/field/model/rich-text.mjs +7 -11
  101. package/esm2022/utils/field/model/select.mjs +7 -21
  102. package/esm2022/utils/field/model/text.mjs +6 -11
  103. package/esm2022/utils/field/operate.mjs +27 -2
  104. package/esm2022/utils/index.mjs +2 -3
  105. package/esm2022/utils/match-keywords.mjs +2 -2
  106. package/esm2022/utils/position.mjs +1 -1
  107. package/esm2022/utils/visible-range.mjs +1 -1
  108. package/fesm2022/ai-table-grid.mjs +234 -425
  109. package/fesm2022/ai-table-grid.mjs.map +1 -1
  110. package/grid-base.component.d.ts +3 -2
  111. package/grid-base.component.d.ts.map +1 -1
  112. package/grid.component.d.ts +2 -1
  113. package/grid.component.d.ts.map +1 -1
  114. package/package.json +1 -1
  115. package/pipes/grid.pipe.d.ts +4 -3
  116. package/pipes/grid.pipe.d.ts.map +1 -1
  117. package/renderer/components/cells/attachment.component.d.ts +1 -1
  118. package/renderer/components/cells/attachment.component.d.ts.map +1 -1
  119. package/renderer/components/cells/cells.d.ts +1 -1
  120. package/renderer/components/cells/cells.d.ts.map +1 -1
  121. package/renderer/components/cells/link.component.d.ts +1 -1
  122. package/renderer/components/cells/link.component.d.ts.map +1 -1
  123. package/renderer/components/cells/progress.component.d.ts +1 -1
  124. package/renderer/components/cells/progress.component.d.ts.map +1 -1
  125. package/renderer/components/cells/rate.component.d.ts +1 -1
  126. package/renderer/components/cells/rate.component.d.ts.map +1 -1
  127. package/renderer/components/cells/rich-text.component.d.ts +1 -1
  128. package/renderer/components/cells/rich-text.component.d.ts.map +1 -1
  129. package/renderer/components/field-head.component.d.ts +1 -1
  130. package/renderer/components/hover-cell.component.d.ts +2 -2
  131. package/renderer/components/hover-cell.component.d.ts.map +1 -1
  132. package/renderer/components/hover-row-heads.component.d.ts.map +1 -1
  133. package/renderer/creations/create-cells.d.ts +2 -1
  134. package/renderer/creations/create-cells.d.ts.map +1 -1
  135. package/renderer/drawers/cell-drawer.d.ts +1 -1
  136. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  137. package/renderer/interfaces/hover-cell.d.ts +1 -1
  138. package/renderer/interfaces/hover-cell.d.ts.map +1 -1
  139. package/renderer/renderer.component.d.ts +2 -2
  140. package/renderer/renderer.component.d.ts.map +1 -1
  141. package/services/event.service.d.ts +3 -2
  142. package/services/event.service.d.ts.map +1 -1
  143. package/services/selection.service.d.ts +2 -1
  144. package/services/selection.service.d.ts.map +1 -1
  145. package/types/canvas.d.ts +1 -1
  146. package/types/canvas.d.ts.map +1 -1
  147. package/types/cell.d.ts +3 -2
  148. package/types/cell.d.ts.map +1 -1
  149. package/types/component-config.d.ts +4 -2
  150. package/types/component-config.d.ts.map +1 -1
  151. package/types/field.d.ts +2 -1
  152. package/types/field.d.ts.map +1 -1
  153. package/types/grid.d.ts +2 -42
  154. package/types/grid.d.ts.map +1 -1
  155. package/types/index.d.ts +0 -1
  156. package/types/index.d.ts.map +1 -1
  157. package/utils/build.d.ts +2 -1
  158. package/utils/build.d.ts.map +1 -1
  159. package/utils/cell.d.ts +2 -2
  160. package/utils/cell.d.ts.map +1 -1
  161. package/utils/clipboard/copy.d.ts.map +1 -1
  162. package/utils/clipboard/paste.d.ts +2 -2
  163. package/utils/clipboard/paste.d.ts.map +1 -1
  164. package/utils/common.d.ts +0 -1
  165. package/utils/common.d.ts.map +1 -1
  166. package/utils/field/field-operable.d.ts +17 -0
  167. package/utils/field/field-operable.d.ts.map +1 -0
  168. package/utils/field/field.d.ts +4 -0
  169. package/utils/field/field.d.ts.map +1 -0
  170. package/utils/field/index.d.ts +4 -0
  171. package/utils/field/index.d.ts.map +1 -0
  172. package/utils/field/model/attachment.d.ts +5 -6
  173. package/utils/field/model/attachment.d.ts.map +1 -1
  174. package/utils/field/model/date.d.ts +4 -6
  175. package/utils/field/model/date.d.ts.map +1 -1
  176. package/utils/field/model/index.d.ts +11 -3
  177. package/utils/field/model/index.d.ts.map +1 -1
  178. package/utils/field/model/link.d.ts +3 -7
  179. package/utils/field/model/link.d.ts.map +1 -1
  180. package/utils/field/model/member.d.ts +4 -6
  181. package/utils/field/model/member.d.ts.map +1 -1
  182. package/utils/field/model/number.d.ts +4 -6
  183. package/utils/field/model/number.d.ts.map +1 -1
  184. package/utils/field/model/progress.d.ts +4 -6
  185. package/utils/field/model/progress.d.ts.map +1 -1
  186. package/utils/field/model/rate.d.ts +4 -5
  187. package/utils/field/model/rate.d.ts.map +1 -1
  188. package/utils/field/model/rich-text.d.ts +5 -5
  189. package/utils/field/model/rich-text.d.ts.map +1 -1
  190. package/utils/field/model/select.d.ts +5 -5
  191. package/utils/field/model/select.d.ts.map +1 -1
  192. package/utils/field/model/text.d.ts +3 -5
  193. package/utils/field/model/text.d.ts.map +1 -1
  194. package/utils/field/operate.d.ts +7 -0
  195. package/utils/field/operate.d.ts.map +1 -1
  196. package/utils/hover-cell.d.ts +1 -1
  197. package/utils/index.d.ts +1 -2
  198. package/utils/index.d.ts.map +1 -1
  199. package/utils/match-keywords.d.ts +2 -2
  200. package/utils/match-keywords.d.ts.map +1 -1
  201. package/utils/position.d.ts +2 -1
  202. package/utils/position.d.ts.map +1 -1
  203. package/utils/visible-range.d.ts +2 -1
  204. package/utils/visible-range.d.ts.map +1 -1
  205. package/esm2022/types/view.mjs +0 -18
  206. package/esm2022/utils/field/model/field.mjs +0 -37
  207. package/types/view.d.ts +0 -23
  208. package/types/view.d.ts.map +0 -1
  209. package/utils/field/model/field.d.ts +0 -21
  210. package/utils/field/model/field.d.ts.map +0 -1
@@ -182,4 +182,4 @@ const isSelectedRecord = (recordId, aiTable) => {
182
182
  const isHoverRecord = (isHover, targetName) => {
183
183
  return isHover && targetName !== AI_TABLE_FIELD_HEAD;
184
184
  };
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNlbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY3JlYXRpb25zL2NyZWF0ZS1jZWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBdUIsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDM0YsT0FBTyxFQUEyQyxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBZ0MsRUFBRSxFQUFFO0lBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDeEgsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQTBCLENBQUM7SUFDbkQsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMs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QUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBZSxFQUFFLE9BQWdCLEVBQVcsRUFBRTtJQUMxRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE9BQWdCLEVBQVcsRUFBRTtJQUNyRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxVQUFrQixFQUFXLEVBQUU7SUFDcEUsT0FBTyxPQUFPLElBQUksVUFBVSxLQUFLLG1CQUFtQixDQUFDO0FBQ3pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQUlfVEFCTEVfRklFTERfSEVBRCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfUk9XX0FERF9CVVRUT04sXG4gICAgREVGQVVMVF9GT05UX1NUWUxFXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVJlY29yZEZpZWxkSWRQYXRoLCBBSVRhYmxlLCBBSVRhYmxlUXVlcmllcywgUmVuZGVyZXJDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ2VsbHNEcmF3ZXJDb25maWcsIEFJVGFibGVSZW5kZXIsIEFJVGFibGVSb3dUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbiwgZ2V0SG92ZXJDZWxsLCB0cmFuc2Zvcm1DZWxsVmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBhZGRSb3dMYXlvdXQgfSBmcm9tICcuLi9kcmF3ZXJzL2FkZC1yb3ctbGF5b3V0LWRyYXdlcic7XG5pbXBvcnQgeyBjZWxsRHJhd2VyIH0gZnJvbSAnLi4vZHJhd2Vycy9jZWxsLWRyYXdlcic7XG5pbXBvcnQgeyByZWNvcmRSb3dMYXlvdXQgfSBmcm9tICcuLi9kcmF3ZXJzL3JlY29yZC1yb3ctbGF5b3V0LWRyYXdlcic7XG5cbi8qKlxuICog57uY5Yi25Y2V5YWD5qC85YaF5a6555qE5Ye95pWwXG4gKiDliKnnlKggQ2FudmFzIEFQSSDnu5jliLbmr4/kuKrljZXlhYPmoLznmoTog4zmma/popzoibLjgIHmlofmnKzku6Xlj4rlhbbku5blj6/og73nmoTmoLflvI/jgILov5nkuKrlh73mlbDpgJrluLjnlKjkuo7oh6rlrprkuYnooajmoLzmuLLmn5PvvIzlsKTlhbbmmK/lnKjlpITnkIblpKfph4/mlbDmja7ml7bvvIzpgJrov4fnm7TmjqXmk43kvZwgQ2FudmFzIOadpeaPkOmrmOa4suafk+aAp+iDvVxuICogQHBhcmFtIGNvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ2VsbHMgPSAoY29uZmlnOiBBSVRhYmxlQ2VsbHNEcmF3ZXJDb25maWcpID0+IHtcbiAgICBjb25zdCB7IGFpVGFibGUsIGNvb3JkaW5hdGUsIHJlZmVyZW5jZXMsIGN0eCwgcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4LCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5TdG9wSW5kZXggfSA9IGNvbmZpZztcbiAgICBjb25zdCBjb250ZXh0ID0gYWlUYWJsZS5jb250ZXh0IGFzIFJlbmRlcmVyQ29udGV4dDtcbiAgICBjb25zdCB7IHJvd0hlaWdodCwgY29sdW1uQ291bnQsIHJvd0NvdW50IH0gPSBjb29yZGluYXRlO1xuICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHMoYWlUYWJsZSk7XG5cbiAgICAvLyDliJ3lp4vljJbnu5jlm77kuIrkuIvmlocsIOS4uuWQjue7reeahOe7mOWItuaTjeS9nOWBmuWHhuWkh1xuICAgIGNlbGxEcmF3ZXIuaW5pdEN0eChjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICBhZGRSb3dMYXlvdXQuaW5pdEN0eChjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICByZWNvcmRSb3dMYXlvdXQuaW5pdEN0eChjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcblxuICAgIGNvbnN0IGhvdmVyQ2VsbCA9IGdldEhvdmVyQ2VsbChhaVRhYmxlKTtcblxuICAgIC8vIOmBjeWOhuWIlywg56Gu5a6a5Zyo5ZOq5Lqb5YiX5LiK57uY5Yi25Y2V5YWD5qC8XG4gICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4OyBjb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gY29sdW1uQ291bnQgLSAxKSBicmVhaztcblxuICAgICAgICAvLyDojrflj5bor6XliJflr7nlupTnmoQgZmllbGTvvIzlpoLmnpwgZmllbGQg5LiN5YaN5bGV56S66IyD5Zu077yM5YiZ6Lez6L+H6K+l5YiXXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdmlzaWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdO1xuICAgICAgICBpZiAoZmllbGQgPT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgLy8g6I635Y+W6K+l5YiX5a+55bqU55qE5a695bqmXG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IHggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCkgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgIGNvbnN0IGlzTGFzdENvbHVtbiA9IGNvbHVtbkluZGV4ID09PSBhaVRhYmxlLmdyaWREYXRhKCkuZmllbGRzPy5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgY2VsbERyYXdlci5pbml0U3R5bGUoZmllbGQsIHsgZm9udFdlaWdodDogREVGQVVMVF9GT05UX1NUWUxFIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6YGN5Y6G6KGMLCDku44gcm93U3RhcnRJbmRleCDliLAgcm93U3RvcEluZGV4IOeahOaJgOacieihjO+8jOWGs+WumuWwhuWcqOWTquS6m+ihjOS4iue7mOWItuWNleWFg+agvFxuICAgICAgICBmb3IgKGxldCByb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDsgcm93SW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4ID4gcm93Q291bnQgLSAxKSBicmVhaztcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGNvbnRleHQubGluZWFyUm93cygpW3Jvd0luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHsgX2lkOiByZWNvcmRJZCwgdHlwZSB9ID0gcm93O1xuICAgICAgICAgICAgY29uc3QgeSA9IGNvb3JkaW5hdGUuZ2V0Um93T2Zmc2V0KHJvd0luZGV4KSArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgIGNvbnN0IHsgcm93SW5kZXg6IHBvaW50Um93SW5kZXgsIHRhcmdldE5hbWUgfSA9IGNvbnRleHQucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgaXNIb3ZlciA9IHBvaW50Um93SW5kZXggPT09IHJvd0luZGV4O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVSb3dUeXBlLmFkZDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0hvdmVyUm93ID0gaXNIb3ZlciAmJiB0YXJnZXROYW1lID09PSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDaGVja2VkUm93ID0gYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJvdy5faWQpO1xuICAgICAgICAgICAgICAgICAgICBhZGRSb3dMYXlvdXQuaW5pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodDogQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBjb29yZGluYXRlLmNvbnRhaW5lcldpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRSb3dMYXlvdXQucmVuZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSG92ZXJSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWRSb3dcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVSb3dUeXBlLnJlY29yZDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZElkID0gZmllbGQuX2lkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhY2tncm91bmQgPSBnZXRDZWxsQmFja2dyb3VuZChjZWxsLCBpc0hvdmVyLCB0YXJnZXROYW1lLCBhaVRhYmxlKTtcblxuICAgICAgICAgICAgICAgICAgICByZWNvcmRSb3dMYXlvdXQuaW5pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IGNvb3JkaW5hdGUuY29udGFpbmVyV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFJvd0xheW91dC5yZW5kZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZmlsbDogYmFja2dyb3VuZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3ZlclJvdzogaXNIb3ZlclJlY29yZChpc0hvdmVyLCB0YXJnZXROYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZFJvdzogaXNTZWxlY3RlZFJlY29yZChyZWNvcmRJZCwgYWlUYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIG9mZnNldCB9ID0gZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxYID0geCArIG9mZnNldCArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbFkgPSB5ICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHsgZm9udFdlaWdodDogREVGQVVMVF9GT05UX1NUWUxFIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IEFJVGFibGVRdWVyaWVzLmdldEZpZWxkVmFsdWUoYWlUYWJsZSwgW3JlY29yZElkLCBmaWVsZElkXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gdHJhbnNmb3JtQ2VsbFZhbHVlKGFpVGFibGUsIGZpZWxkLCBjZWxsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhaVRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogcmVhbFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiByZWFsWSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IGlzU2VsZWN0ZWRGaWVsZChmaWVsZElkLCBhaVRhYmxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIGhvdmVyIOe7hOS7tua4suafk+aXtu+8jOW6leWxgueahCBjZWxsIOa4suafk+S4uuepulxuICAgICAgICAgICAgICAgICAgICBpZiAoaG92ZXJDZWxsICYmIGhvdmVyQ2VsbC5yZWNvcmRJZCA9PT0gcmVjb3JkSWQgJiYgaG92ZXJDZWxsLmZpZWxkSWQgPT09IGZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlci5jZWxsVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2VsbERyYXdlci5pbml0U3R5bGUoZmllbGQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g5pyA5ZCO5LiA5YiX77yM5LiU5Y2V5YWD5qC85YaF5a655a2Y5Zyo77yM6ZyA6KaB6KOB5Ymq5YaF5a6577yM5Lul6Ziy5q2i5paH5pys5rqi5Ye65Y2V5YWD5qC86L6555WMXG4gICAgICAgICAgICAgICAgICAgIC8vIOeEtuWQju+8jOagueaNruiuoeeul+WlveeahOagt+W8j+WSjOW4g+WxgOe7mOWItuWNleWFg+agvOWGheWuuVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXN0Q29sdW1uICYmIGNlbGxWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlY3QocmVhbFgsIHJlYWxZLCB3aWR0aCwgcm93SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsRHJhd2VyLnJlbmRlckNlbGwocmVuZGVyIGFzIEFJVGFibGVSZW5kZXIsIGN0eCBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsRHJhd2VyLnJlbmRlckNlbGwocmVuZGVyIGFzIEFJVGFibGVSZW5kZXIsIGN0eCBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IGdldENlbGxCYWNrZ3JvdW5kID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGlzSG92ZXI6IGJvb2xlYW4sIHRhcmdldE5hbWU6IHN0cmluZywgYWlUYWJsZTogQUlUYWJsZSk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICBsZXQgYmFja2dyb3VuZCA9IGNvbG9ycy53aGl0ZTtcblxuICAgIGNvbnN0IF9pc0hvdmVyUmVjb3JkID0gaXNIb3ZlclJlY29yZChpc0hvdmVyLCB0YXJnZXROYW1lKTtcbiAgICBjb25zdCBfaXNTZWxlY3RlZFJlY29yZCA9IGlzU2VsZWN0ZWRSZWNvcmQocmVjb3JkSWQsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc1NlbGVjdGVkRmllbGQgPSBpc1NlbGVjdGVkRmllbGQoZmllbGRJZCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzU2libGluZ0NlbGwgPSBpc1NpYmxpbmdDZWxsKGNlbGwsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc0FjdGl2ZUNlbGwgPSBpc0FjdGl2ZUNlbGwoY2VsbCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzU2VsZWN0ZWRDZWxsID0gaXNTZWxlY3RlZENlbGwoY2VsbCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzS2V5d29yZHNNYXRjaGVkQ2VsbCA9IGlzS2V5d29yZHNNYXRjaGVkQ2VsbChjZWxsLCBhaVRhYmxlKTtcblxuICAgIGlmIChfaXNLZXl3b3Jkc01hdGNoZWRDZWxsKSB7XG4gICAgICAgIGJhY2tncm91bmQgPSBjb2xvcnMuaXRlbU1hdGNoQmdDb2xvcjtcbiAgICB9IGVsc2UgaWYgKF9pc1NlbGVjdGVkUmVjb3JkIHx8IF9pc1NlbGVjdGVkRmllbGQgfHwgX2lzU2libGluZ0NlbGwgfHwgKF9pc1NlbGVjdGVkQ2VsbCAmJiAhX2lzQWN0aXZlQ2VsbCkpIHtcbiAgICAgICAgYmFja2dyb3VuZCA9IGNvbG9ycy5pdGVtQWN0aXZlQmdDb2xvcjtcbiAgICB9IGVsc2UgaWYgKF9pc0hvdmVyUmVjb3JkICYmICFfaXNBY3RpdmVDZWxsKSB7XG4gICAgICAgIGJhY2tncm91bmQgPSBjb2xvcnMuZ3JheTgwO1xuICAgIH1cblxuICAgIHJldHVybiBiYWNrZ3JvdW5kO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWN0aXZlQ2VsbCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgY29uc3QgW2FjdGl2ZVJlY29yZElkLCBhY3RpdmVGaWVsZElkXSA9IEFJVGFibGUuZ2V0QWN0aXZlQ2VsbChhaVRhYmxlKSB8fCBbXTtcbiAgICByZXR1cm4gcmVjb3JkSWQgPT09IGFjdGl2ZVJlY29yZElkICYmIGZpZWxkSWQgPT09IGFjdGl2ZUZpZWxkSWQ7XG59O1xuXG5jb25zdCBpc1NpYmxpbmdDZWxsID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICBjb25zdCBbYWN0aXZlUmVjb3JkSWQsIGFjdGl2ZUZpZWxkSWRdID0gQUlUYWJsZS5nZXRBY3RpdmVDZWxsKGFpVGFibGUpIHx8IFtdO1xuICAgIHJldHVybiBBSVRhYmxlLmdldEFjdGl2ZVJlY29yZElkcyhhaVRhYmxlKS5sZW5ndGggPT09IDEgJiYgcmVjb3JkSWQgPT09IGFjdGl2ZVJlY29yZElkICYmIGZpZWxkSWQgIT09IGFjdGl2ZUZpZWxkSWQ7XG59O1xuXG5jb25zdCBpc0tleXdvcmRzTWF0Y2hlZENlbGwgPSAoY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCwgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IFtyZWNvcmRJZCwgZmllbGRJZF0gPSBjZWxsO1xuICAgIHJldHVybiBhaVRhYmxlLmtleXdvcmRzTWF0Y2hlZENlbGxzKCkuaGFzKGAke3JlY29yZElkfToke2ZpZWxkSWR9YCk7XG59O1xuXG5jb25zdCBpc1NlbGVjdGVkQ2VsbCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgcmV0dXJuIGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5oYXMoYCR7cmVjb3JkSWR9OiR7ZmllbGRJZH1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRmllbGQgPSAoZmllbGRJZDogc3RyaW5nLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuaGFzKGZpZWxkSWQpO1xufTtcblxuY29uc3QgaXNTZWxlY3RlZFJlY29yZCA9IChyZWNvcmRJZDogc3RyaW5nLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLmhhcyhyZWNvcmRJZCk7XG59O1xuXG5jb25zdCBpc0hvdmVyUmVjb3JkID0gKGlzSG92ZXI6IGJvb2xlYW4sIHRhcmdldE5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBpc0hvdmVyICYmIHRhcmdldE5hbWUgIT09IEFJX1RBQkxFX0ZJRUxEX0hFQUQ7XG59O1xuIl19
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNlbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY3JlYXRpb25zL2NyZWF0ZS1jZWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLFlBQVksQ0FBQztBQUN0RSxPQUFPLEVBQTJDLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRFOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFnQyxFQUFFLEVBQUU7SUFDNUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUN4SCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBMEIsQ0FBQztJQUNuRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxVQUFVLENBQUM7SUFDeEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25DLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxn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QyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFlLEVBQUUsT0FBZ0IsRUFBVyxFQUFFO0lBQzFFLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsT0FBZ0IsRUFBVyxFQUFFO0lBQ3JFLE9BQU8sT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxPQUFnQixFQUFFLFVBQWtCLEVBQVcsRUFBRTtJQUNwRSxPQUFPLE9BQU8sSUFBSSxVQUFVLEtBQUssbUJBQW1CLENBQUM7QUFDekQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlSZWNvcmRGaWVsZElkUGF0aCB9IGZyb20gJ0BhaS10YWJsZS91dGlscyc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQUQsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgQUlfVEFCTEVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OLFxuICAgIERFRkFVTFRfRk9OVF9TVFlMRVxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZVF1ZXJpZXMsIFJlbmRlcmVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUNlbGxzRHJhd2VyQ29uZmlnLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlUm93VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGdldENlbGxIb3Jpem9udGFsUG9zaXRpb24sIGdldEhvdmVyQ2VsbCwgdHJhbnNmb3JtQ2VsbFZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgYWRkUm93TGF5b3V0IH0gZnJvbSAnLi4vZHJhd2Vycy9hZGQtcm93LWxheW91dC1kcmF3ZXInO1xuaW1wb3J0IHsgY2VsbERyYXdlciB9IGZyb20gJy4uL2RyYXdlcnMvY2VsbC1kcmF3ZXInO1xuaW1wb3J0IHsgcmVjb3JkUm93TGF5b3V0IH0gZnJvbSAnLi4vZHJhd2Vycy9yZWNvcmQtcm93LWxheW91dC1kcmF3ZXInO1xuXG4vKipcbiAqIOe7mOWItuWNleWFg+agvOWGheWuueeahOWHveaVsFxuICog5Yip55SoIENhbnZhcyBBUEkg57uY5Yi25q+P5Liq5Y2V5YWD5qC855qE6IOM5pmv6aKc6Imy44CB5paH5pys5Lul5Y+K5YW25LuW5Y+v6IO955qE5qC35byP44CC6L+Z5Liq5Ye95pWw6YCa5bi455So5LqO6Ieq5a6a5LmJ6KGo5qC85riy5p+T77yM5bCk5YW25piv5Zyo5aSE55CG5aSn6YeP5pWw5o2u5pe277yM6YCa6L+H55u05o6l5pON5L2cIENhbnZhcyDmnaXmj5Dpq5jmuLLmn5PmgKfog71cbiAqIEBwYXJhbSBjb25maWdcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNlbGxzID0gKGNvbmZpZzogQUlUYWJsZUNlbGxzRHJhd2VyQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgeyBhaVRhYmxlLCBjb29yZGluYXRlLCByZWZlcmVuY2VzLCBjdHgsIHJvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleCwgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uU3RvcEluZGV4IH0gPSBjb25maWc7XG4gICAgY29uc3QgY29udGV4dCA9IGFpVGFibGUuY29udGV4dCBhcyBSZW5kZXJlckNvbnRleHQ7XG4gICAgY29uc3QgeyByb3dIZWlnaHQsIGNvbHVtbkNvdW50LCByb3dDb3VudCB9ID0gY29vcmRpbmF0ZTtcbiAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKGFpVGFibGUpO1xuXG4gICAgLy8g5Yid5aeL5YyW57uY5Zu+5LiK5LiL5paHLCDkuLrlkI7nu63nmoTnu5jliLbmk43kvZzlgZrlh4blpIdcbiAgICBjZWxsRHJhd2VyLmluaXRDdHgoY3R4IGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgYWRkUm93TGF5b3V0LmluaXRDdHgoY3R4IGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgcmVjb3JkUm93TGF5b3V0LmluaXRDdHgoY3R4IGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG5cbiAgICBjb25zdCBob3ZlckNlbGwgPSBnZXRIb3ZlckNlbGwoYWlUYWJsZSk7XG5cbiAgICAvLyDpgY3ljobliJcsIOehruWumuWcqOWTquS6m+WIl+S4iue7mOWItuWNleWFg+agvFxuICAgIGZvciAobGV0IGNvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4OyBjb2x1bW5JbmRleCsrKSB7XG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA+IGNvbHVtbkNvdW50IC0gMSkgYnJlYWs7XG5cbiAgICAgICAgLy8g6I635Y+W6K+l5YiX5a+55bqU55qEIGZpZWxk77yM5aaC5p6cIGZpZWxkIOS4jeWGjeWxleekuuiMg+WbtO+8jOWImei3s+i/h+ivpeWIl1xuICAgICAgICBjb25zdCBmaWVsZCA9IHZpc2libGVDb2x1bW5zW2NvbHVtbkluZGV4XTtcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIOiOt+WPluivpeWIl+WvueW6lOeahOWuveW6plxuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICBjb25zdCBpc0xhc3RDb2x1bW4gPSBjb2x1bW5JbmRleCA9PT0gYWlUYWJsZS5ncmlkRGF0YSgpLmZpZWxkcz8ubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAoY29sdW1uSW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgIGNlbGxEcmF3ZXIuaW5pdFN0eWxlKGZpZWxkLCB7IGZvbnRXZWlnaHQ6IERFRkFVTFRfRk9OVF9TVFlMRSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOmBjeWOhuihjCwg5LuOIHJvd1N0YXJ0SW5kZXgg5YiwIHJvd1N0b3BJbmRleCDnmoTmiYDmnInooYzvvIzlhrPlrprlsIblnKjlk6rkupvooYzkuIrnu5jliLbljZXlhYPmoLxcbiAgICAgICAgZm9yIChsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4OyByb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IHJvd0luZGV4KyspIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA+IHJvd0NvdW50IC0gMSkgYnJlYWs7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBjb250ZXh0LmxpbmVhclJvd3MoKVtyb3dJbmRleF07XG4gICAgICAgICAgICBjb25zdCB7IF9pZDogcmVjb3JkSWQsIHR5cGUgfSA9IHJvdztcbiAgICAgICAgICAgIGNvbnN0IHkgPSBjb29yZGluYXRlLmdldFJvd09mZnNldChyb3dJbmRleCkgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgICAgICBjb25zdCB7IHJvd0luZGV4OiBwb2ludFJvd0luZGV4LCB0YXJnZXROYW1lIH0gPSBjb250ZXh0LnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSG92ZXIgPSBwb2ludFJvd0luZGV4ID09PSByb3dJbmRleDtcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlUm93VHlwZS5hZGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNIb3ZlclJvdyA9IGlzSG92ZXIgJiYgdGFyZ2V0TmFtZSA9PT0gQUlfVEFCTEVfUk9XX0FERF9CVVRUT047XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2hlY2tlZFJvdyA9IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLmhhcyhyb3cuX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm93TGF5b3V0LmluaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dIZWlnaHQ6IEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXaWR0aDogY29vcmRpbmF0ZS5jb250YWluZXJXaWR0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm93TGF5b3V0LnJlbmRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0hvdmVyUm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkUm93XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlUm93VHlwZS5yZWNvcmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGZpZWxkLl9pZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCA9IFtyZWNvcmRJZCwgZmllbGRJZF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kID0gZ2V0Q2VsbEJhY2tncm91bmQoY2VsbCwgaXNIb3ZlciwgdGFyZ2V0TmFtZSwgYWlUYWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkUm93TGF5b3V0LmluaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBjb29yZGluYXRlLmNvbnRhaW5lcldpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRSb3dMYXlvdXQucmVuZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IGZpbGw6IGJhY2tncm91bmQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSG92ZXJSb3c6IGlzSG92ZXJSZWNvcmQoaXNIb3ZlciwgdGFyZ2V0TmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWRSb3c6IGlzU2VsZWN0ZWRSZWNvcmQocmVjb3JkSWQsIGFpVGFibGUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBvZmZzZXQgfSA9IGdldENlbGxIb3Jpem9udGFsUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFsWCA9IHggKyBvZmZzZXQgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxZID0geSArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB7IGZvbnRXZWlnaHQ6IERFRkFVTFRfRk9OVF9TVFlMRSB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBBSVRhYmxlUXVlcmllcy5nZXRGaWVsZFZhbHVlKGFpVGFibGUsIFtyZWNvcmRJZCwgZmllbGRJZF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1WYWx1ZSA9IHRyYW5zZm9ybUNlbGxWYWx1ZShhaVRhYmxlLCBmaWVsZCwgY2VsbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWlUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlYWxYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcmVhbFksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiBpc1NlbGVjdGVkRmllbGQoZmllbGRJZCwgYWlUYWJsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBob3ZlciDnu4Tku7bmuLLmn5Pml7bvvIzlupXlsYLnmoQgY2VsbCDmuLLmn5PkuLrnqbpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvdmVyQ2VsbCAmJiBob3ZlckNlbGwucmVjb3JkSWQgPT09IHJlY29yZElkICYmIGhvdmVyQ2VsbC5maWVsZElkID09PSBmaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIuY2VsbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIudHJhbnNmb3JtVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNlbGxEcmF3ZXIuaW5pdFN0eWxlKGZpZWxkLCBzdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIOacgOWQjuS4gOWIl++8jOS4lOWNleWFg+agvOWGheWuueWtmOWcqO+8jOmcgOimgeijgeWJquWGheWuue+8jOS7pemYsuatouaWh+acrOa6ouWHuuWNleWFg+agvOi+ueeVjFxuICAgICAgICAgICAgICAgICAgICAvLyDnhLblkI7vvIzmoLnmja7orqHnrpflpb3nmoTmoLflvI/lkozluIPlsYDnu5jliLbljZXlhYPmoLzlhoXlrrlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdENvbHVtbiAmJiBjZWxsVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZWN0KHJlYWxYLCByZWFsWSwgd2lkdGgsIHJvd0hlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbERyYXdlci5yZW5kZXJDZWxsKHJlbmRlciBhcyBBSVRhYmxlUmVuZGVyLCBjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBjb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbERyYXdlci5yZW5kZXJDZWxsKHJlbmRlciBhcyBBSVRhYmxlUmVuZGVyLCBjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBjb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5jb25zdCBnZXRDZWxsQmFja2dyb3VuZCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBpc0hvdmVyOiBib29sZWFuLCB0YXJnZXROYW1lOiBzdHJpbmcsIGFpVGFibGU6IEFJVGFibGUpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgbGV0IGJhY2tncm91bmQgPSBjb2xvcnMud2hpdGU7XG5cbiAgICBjb25zdCBfaXNIb3ZlclJlY29yZCA9IGlzSG92ZXJSZWNvcmQoaXNIb3ZlciwgdGFyZ2V0TmFtZSk7XG4gICAgY29uc3QgX2lzU2VsZWN0ZWRSZWNvcmQgPSBpc1NlbGVjdGVkUmVjb3JkKHJlY29yZElkLCBhaVRhYmxlKTtcbiAgICBjb25zdCBfaXNTZWxlY3RlZEZpZWxkID0gaXNTZWxlY3RlZEZpZWxkKGZpZWxkSWQsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc1NpYmxpbmdDZWxsID0gaXNTaWJsaW5nQ2VsbChjZWxsLCBhaVRhYmxlKTtcbiAgICBjb25zdCBfaXNBY3RpdmVDZWxsID0gaXNBY3RpdmVDZWxsKGNlbGwsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc1NlbGVjdGVkQ2VsbCA9IGlzU2VsZWN0ZWRDZWxsKGNlbGwsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc0tleXdvcmRzTWF0Y2hlZENlbGwgPSBpc0tleXdvcmRzTWF0Y2hlZENlbGwoY2VsbCwgYWlUYWJsZSk7XG5cbiAgICBpZiAoX2lzS2V5d29yZHNNYXRjaGVkQ2VsbCkge1xuICAgICAgICBiYWNrZ3JvdW5kID0gY29sb3JzLml0ZW1NYXRjaEJnQ29sb3I7XG4gICAgfSBlbHNlIGlmIChfaXNTZWxlY3RlZFJlY29yZCB8fCBfaXNTZWxlY3RlZEZpZWxkIHx8IF9pc1NpYmxpbmdDZWxsIHx8IChfaXNTZWxlY3RlZENlbGwgJiYgIV9pc0FjdGl2ZUNlbGwpKSB7XG4gICAgICAgIGJhY2tncm91bmQgPSBjb2xvcnMuaXRlbUFjdGl2ZUJnQ29sb3I7XG4gICAgfSBlbHNlIGlmIChfaXNIb3ZlclJlY29yZCAmJiAhX2lzQWN0aXZlQ2VsbCkge1xuICAgICAgICBiYWNrZ3JvdW5kID0gY29sb3JzLmdyYXk4MDtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFja2dyb3VuZDtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZUNlbGwgPSAoY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCwgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IFtyZWNvcmRJZCwgZmllbGRJZF0gPSBjZWxsO1xuICAgIGNvbnN0IFthY3RpdmVSZWNvcmRJZCwgYWN0aXZlRmllbGRJZF0gPSBBSVRhYmxlLmdldEFjdGl2ZUNlbGwoYWlUYWJsZSkgfHwgW107XG4gICAgcmV0dXJuIHJlY29yZElkID09PSBhY3RpdmVSZWNvcmRJZCAmJiBmaWVsZElkID09PSBhY3RpdmVGaWVsZElkO1xufTtcblxuY29uc3QgaXNTaWJsaW5nQ2VsbCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgY29uc3QgW2FjdGl2ZVJlY29yZElkLCBhY3RpdmVGaWVsZElkXSA9IEFJVGFibGUuZ2V0QWN0aXZlQ2VsbChhaVRhYmxlKSB8fCBbXTtcbiAgICByZXR1cm4gQUlUYWJsZS5nZXRBY3RpdmVSZWNvcmRJZHMoYWlUYWJsZSkubGVuZ3RoID09PSAxICYmIHJlY29yZElkID09PSBhY3RpdmVSZWNvcmRJZCAmJiBmaWVsZElkICE9PSBhY3RpdmVGaWVsZElkO1xufTtcblxuY29uc3QgaXNLZXl3b3Jkc01hdGNoZWRDZWxsID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICByZXR1cm4gYWlUYWJsZS5rZXl3b3Jkc01hdGNoZWRDZWxscygpLmhhcyhgJHtyZWNvcmRJZH06JHtmaWVsZElkfWApO1xufTtcblxuY29uc3QgaXNTZWxlY3RlZENlbGwgPSAoY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCwgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IFtyZWNvcmRJZCwgZmllbGRJZF0gPSBjZWxsO1xuICAgIHJldHVybiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuaGFzKGAke3JlY29yZElkfToke2ZpZWxkSWR9YCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTZWxlY3RlZEZpZWxkID0gKGZpZWxkSWQ6IHN0cmluZywgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkRmllbGRzLmhhcyhmaWVsZElkKTtcbn07XG5cbmNvbnN0IGlzU2VsZWN0ZWRSZWNvcmQgPSAocmVjb3JkSWQ6IHN0cmluZywgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBhaVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5oYXMocmVjb3JkSWQpO1xufTtcblxuY29uc3QgaXNIb3ZlclJlY29yZCA9IChpc0hvdmVyOiBib29sZWFuLCB0YXJnZXROYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gaXNIb3ZlciAmJiB0YXJnZXROYW1lICE9PSBBSV9UQUJMRV9GSUVMRF9IRUFEO1xufTtcbiJdfQ==
@@ -1,6 +1,7 @@
1
1
  import { isNil } from 'lodash';
2
2
  import { AI_TABLE_CELL_ADD_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE, AI_TABLE_CELL_DELETE_ITEM_BUTTON_SIZE_OFFSET, AI_TABLE_CELL_EMOJI_PADDING, AI_TABLE_CELL_EMOJI_SIZE, AI_TABLE_CELL_MAX_ROW_COUNT, AI_TABLE_CELL_MEMBER_ITEM_HEIGHT, AI_TABLE_CELL_MEMBER_ITEM_PADDING, AI_TABLE_CELL_MULTI_DOT_RADIUS, AI_TABLE_CELL_MULTI_ITEM_MARGIN_TOP, AI_TABLE_CELL_MULTI_ITEM_MIN_WIDTH, AI_TABLE_CELL_MULTI_PADDING_LEFT, AI_TABLE_CELL_MULTI_PADDING_TOP, AI_TABLE_CELL_PADDING, AI_TABLE_COMMON_FONT_SIZE, AI_TABLE_DOT_RADIUS, AI_TABLE_FIELD_ITEM_MARGIN_RIGHT, AI_TABLE_FILE_ICON_ITEM_HEIGHT, AI_TABLE_FILE_ICON_SIZE, AI_TABLE_MEMBER_AVATAR_SIZE, AI_TABLE_MEMBER_ITEM_AVATAR_MARGIN_RIGHT, AI_TABLE_MIN_TEXT_WIDTH, AI_TABLE_OFFSET, AI_TABLE_OPTION_ITEM_FONT_SIZE, AI_TABLE_OPTION_ITEM_HEIGHT, AI_TABLE_OPTION_ITEM_PADDING, AI_TABLE_OPTION_ITEM_RADIUS, AI_TABLE_PIECE_RADIUS, AI_TABLE_PIECE_WIDTH, AI_TABLE_PROGRESS_BAR_HEIGHT, AI_TABLE_PROGRESS_BAR_RADIUS, AI_TABLE_PROGRESS_TEXT_WIDTH, AI_TABLE_ROW_BLANK_HEIGHT, AI_TABLE_TAG_FONT_SIZE, AI_TABLE_TAG_PADDING, AI_TABLE_TEXT_GAP, Colors, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_FONT_WEIGHT, DEFAULT_TEXT_ALIGN_LEFT, DEFAULT_TEXT_ALIGN_RIGHT, DEFAULT_TEXT_DECORATION, DEFAULT_TEXT_LINE_HEIGHT, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE, FONT_SIZE_SM, AI_TABLE_RATE_MAX, StarFill } from '../../constants';
3
- import { AITable, AITableFieldType, AITableSelectOptionStyle } from '../../core';
3
+ import { AITable } from '../../core';
4
+ import { AITableFieldType, AITableSelectOptionStyle } from '@ai-table/utils';
4
5
  import { AITableAvatarSize, AITableAvatarType } from '../../types';
5
6
  import { FieldModelMap, getAvatarBgColor, getAvatarShortName, getTextWidth } from '../../utils';
6
7
  import { Drawer } from './drawer';
@@ -669,4 +670,4 @@ export class CellDrawer extends Drawer {
669
670
  }
670
671
  }
671
672
  export const cellDrawer = new CellDrawer();
672
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDckMsNENBQTRDLEVBQzVDLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLGdDQUFnQyxFQUNoQyxpQ0FBaUMsRUFDakMsOEJBQThCLEVBQzlCLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLFlBQVksRUFDWixpQkFBaUIsRUFDakIsUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsd0JBQXdCLEVBQWtDLE1BQU0sWUFB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Q04sSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDUCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRO29CQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ1osS0FBSyxFQUFFLHVCQUF1QjtvQkFDOUIsTUFBTSxFQUFFLHVCQUF1QjtpQkFDbEMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQsXG4gICAgQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgIEFJX1RBQkxFX01FTUJFUl9BVkFUQVJfU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX01JTl9URVhUX1dJRFRILFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgIEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgREVGQVVMVF9GT05UX1NJWkUsXG4gICAgREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fUklHSFQsXG4gICAgREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgRk9OVF9TSVpFX1NNLFxuICAgIEFJX1RBQkxFX1JBVEVfTUFYLFxuICAgIFN0YXJGaWxsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgTWVtYmVyU2V0dGluZ3MsIFJhdGVGaWVsZFZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQXZhdGFyU2l6ZSwgQUlUYWJsZUF2YXRhclR5cGUsIEFJVGFibGVSZW5kZXIsIEFJVGFibGVTZWxlY3RGaWVsZCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IEZpZWxkTW9kZWxNYXAsIGdldEF2YXRhckJnQ29sb3IsIGdldEF2YXRhclNob3J0TmFtZSwgZ2V0VGV4dFdpZHRoIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRHJhd2VyIH0gZnJvbSAnLi9kcmF3ZXInO1xuaW1wb3J0IHsgaGVscGVycyB9IGZyb20gJ25neC10ZXRoeXMvdXRpbCc7XG5pbXBvcnQgeyBnZXRGaWxlVGh1bWJuYWlsU3ZnU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZSc7XG5cbi8qKlxuICog5aSE55CG5ZKM5riy5p+T6KGo5qC85Y2V5YWD5qC855qE5YaF5a65XG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsRHJhd2VyIGV4dGVuZHMgRHJhd2VyIHtcbiAgICAvLyDmoLflvI/liJ3lp4vljJZcbiAgICBwdWJsaWMgaW5pdFN0eWxlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHN0eWxlUHJvcHM6IHsgZm9udFdlaWdodDogYW55IH0pOiB2b2lkIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogZmllbGRUeXBlIH0gPSBmaWVsZDtcbiAgICAgICAgY29uc3QgeyBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCB9ID0gc3R5bGVQcm9wcztcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3R5bGUoeyBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsIGZvbnRXZWlnaHQgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5Y2V5YWD5qC85riy5p+TXG4gICAgcHVibGljIHJlbmRlckNlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCwgY29sdW1uV2lkdGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCBjZWxsVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgY29uc3QgZmllbGRNZXRob2QgPSBGaWVsZE1vZGVsTWFwW2ZpZWxkVHlwZV07XG4gICAgICAgIGlmICghZmllbGRNZXRob2QuaXNWYWxpZChjZWxsVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJpY2hUZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5saW5rOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxUZXh0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxEYXRlKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYXRlKHJlbmRlciwgY3R4LCBjb2x1bW5XaWR0aCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFByb2dyZXNzKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsTWVtYmVyKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5hdHRhY2htZW50OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxBdHRhY2htZW50KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxUZXh0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGZpZWxkLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKGlzTmlsKHRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGxldCByZW5kZXJUZXh0OiBzdHJpbmcgfCBudWxsID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyB0cmFuc2Zvcm1WYWx1ZT8udGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1NpbmdsZUxpbmUgPSB0cnVlO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0IHx8IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dDtcbiAgICAgICAgY29uc3QgaXNOdW1iZXJGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI7XG5cbiAgICAgICAgaWYgKGlzVGV4dEZpZWxkICYmIGlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHJlbmRlclRleHQucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgdGhpcy5jb2xvcnMuZ3JheTgwMDtcbiAgICAgICAgY29uc3QgdGV4dEFsaWduID0gc3R5bGU/LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR05fTEVGVDtcbiAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0O1xuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclggPSB0ZXh0QWxpZ24gPT09IERFRkFVTFRfVEVYVF9BTElHTl9SSUdIVCA/IHggKyBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORyA6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclkgPSB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDI7XG4gICAgICAgIGNvbnN0IHRleHREZWNvcmF0aW9uID0gREVGQVVMVF9URVhUX0RFQ09SQVRJT047XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJlbmRlclRleHQgPSBTdHJpbmcocmVuZGVyVGV4dCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZW5kZXJUZXh0LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgbGV0IHB1cmVUZXh0ID0gdGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwdXJlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cmFwVGV4dCh7XG4gICAgICAgICAgICAgICAgeDogcmVuZGVyWCxcbiAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhSb3c6IEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBERUZBVUxUX1RFWFRfTElORV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubGluayA/IENvbG9ycy5wcmltYXJ5IDogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgbmVlZERyYXc6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzPy5pc19tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlciwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHRyYW5zZm9ybVZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICBjb25zdCBmaWVsZE9wdGlvbnNNYXAgPSBoZWxwZXJzLmtleUJ5KChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnMgfHwgW10sICdfaWQnKTtcbiAgICAgICAgcmV0dXJuICh0cmFuc2Zvcm1WYWx1ZSB8fCBbXSkuZmlsdGVyKChvcHRpb25JZDogc3RyaW5nKSA9PiAhIWZpZWxkT3B0aW9uc01hcFtvcHRpb25JZF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbE11bHRpU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgZmllbGQsIGNvbHVtbldpZHRoIH0gPSByZW5kZXI7XG4gICAgICAgIGxldCB0cmFuc2Zvcm1WYWx1ZSA9IHRoaXMuZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkLCByZW5kZXIudHJhbnNmb3JtVmFsdWUpO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0geCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgbWF4Q29udGFpbmVyV2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9wdGlvblN0eWxlID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlO1xuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtERUZBVUxUX0ZPTlRfV0VJR0hUfSAke0FJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgY29uc3QgaXNEb3RPclBpZWNlID0gb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QgfHwgb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTtcblxuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNlbGxJdGVtSW5mb01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGRyYXdhYmxlSW5kZXggPSAwO1xuICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5mb3JFYWNoKChvcHRpb25JZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5faWQgPT09IG9wdGlvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGl0ZW0/LnRleHQgYXMgc3RyaW5nLCBmb250U3R5bGUpO1xuICAgICAgICAgICAgdG90YWxXaWR0aCArPSB0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG90YWxXaWR0aCA8IG1heENvbnRhaW5lcldpZHRoIHx8IHRvdGFsV2lkdGggPT09IG1heENvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbEl0ZW1JbmZvTWFwLnNldChvcHRpb25JZCwgeyB0ZXh0V2lkdGgsIGl0ZW0sIG9mZnNldDogdG90YWxXaWR0aCB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gQUlfVEFCTEVfTUlOX1RFWFRfV0lEVEggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IGlzRG90T3JQaWVjZSA/IGJhc2VXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IGJhc2VXaWR0aDtcblxuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCArIDFdKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogY3VycmVudE9mZnNldCB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4XSk7XG4gICAgICAgICAgICBjb25zdCBjYW5EcmF3ZXJOZXh0ID0gbWF4Q29udGFpbmVyV2lkdGggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGg7XG4gICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gY2FuRHJhd2VyTmV4dCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgIC8vIOS4iumdoui/h+eoi+aYryAg5rKh5pyJICvmlbDlrZcgIOeahOaDheWGteS4i+acgOWkp+iDveaUvuWHoOS4qu+8m1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDor7TmmI7mnIkgK+aVsOWtl++8jOmHjeaWsOiuoeeul1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgYCt7bnVtYmVyfWAsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IG1heENvbnRhaW5lcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgLSBjaXJjbGVXaWR0aDtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3lt7Lnu4/otoXlh7rkuobvvIznnIvmmK/lkKbog73lrrnkuIvlvZPliY3nmoTvvIzkuI3og73lsLHlh4/ljrsgIDHvvJtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUhhc092ZXIgPSBjdXJyZW50T2Zmc2V0ID4gbWF4O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUhhc092ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdE9mZnNldCA9IGRyYXdhYmxlSW5kZXggPT09IDAgPyAwIDogY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gbGFzdE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCA6IGRyYXdhYmxlSW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/mOacieWJqeS9meepuumXtCwg55yL5piv5ZCm6IO95aSa5riy5p+T5LiA5LiqXG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2lyY2xlVGV4dCA9IGArJHt0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpfWA7XG4gICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID1cbiAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSkgPiAwID8gZ2V0VGV4dFdpZHRoKGN0eCwgY2lyY2xlVGV4dCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgOiAwO1xuICAgICAgICAvLyDliankvZnnqbrpl7RcbiAgICAgICAgbGV0IHJlbWFpblNwYWNlID0gbWF4Q29udGFpbmVyV2lkdGggLSBjaXJjbGVXaWR0aCAtIChjaXJjbGVXaWR0aCA+IDAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IDApO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdHJhbnNmb3JtVmFsdWVbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSAob3B0aW9uU3R5bGU6IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgc2hhcGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGlzRG90T3JQaWVjZVxuICAgICAgICAgICAgICAgICAgICA/IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5TcGFjZSA8IG1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0V2lkdGgsIGl0ZW0gfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQob3B0aW9uSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlV2lkdGggPSBiYXNlV2lkdGggKyB0ZXh0V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBiZ1dpZHRoID0gcmVtYWluU3BhY2UgPiBjb21wbGV0ZVdpZHRoID8gY29tcGxldGVXaWR0aCA6IHJlbWFpblNwYWNlO1xuICAgICAgICAgICAgICAgIGJnQ29uZmlnLndpZHRoID0gYmdXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSA9PT0gJ3JlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdhcmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJnQ29uZmlnLnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmdDb25maWcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYmdDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gYmdDb25maWcud2lkdGg7XG4gICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGN1cnJlbnRXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90LCAnYXJjJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZSwgJ3JlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGV4dCwgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVU1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gdGhpcy5nZXRWYWxpZFNlbGVjdGVkVmFsdWUoZmllbGQsIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZVswXSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBzaW5nbGUgc2VsZWN0IGZpZWxkIHVuZXhwZWN0ZWQgdmFsdWU6ICR7dHJhbnNmb3JtVmFsdWVbMF19YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gdHJhbnNmb3JtVmFsdWVbMF0pO1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGl0ZW0/LnRleHQgfHwgJyc7XG4gICAgICAgIGNvbnN0IGdldFRleHRFbGxpcHNpcyA9IChtYXhUZXh0V2lkdGg6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUpID0+IHtcbiAgICAgICAgICAgIG1heFRleHRXaWR0aCAtPSBpc09wZXJhdGluZyA/IEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCA6IDA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1OYW1lLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgICAgICBsZXQgYmFja2dyb3VuZCA9IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IGNvbG9ycy5wcmltYXJ5O1xuICAgICAgICAgICAgY29uc3QgZG90TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEggLSBBSV9UQUJMRV9URVhUX0dBUDtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOeahCBBSV9UQUJMRV9PRkZTRVQg5YGP56e75LiN56Gu5a6a5piv5Li65ZWl77yI5YyF5ousIHBpZWNlIOeahO+8ie+8jOWPquaYr+S4uuS6huS/neaMgeWSjOe8lui+kee7hOS7tuS4reeahOWvuem9kFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIKSAvIDIgKyBBSV9UQUJMRV9ET1RfUkFESVVTIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfUElFQ0VfV0lEVEggKyBBSV9UQUJMRV9URVhUX0dBUCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKGRvdE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiAoQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfVEFHX1BBRERJTkcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dCB9ID0gZ2V0VGV4dEVsbGlwc2lzKG1heFRleHRXaWR0aCwgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX1RBR19QQURESU5HLCBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfT1BUSU9OX0lURU1fUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKHRleHRNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbERhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgaWYgKGlzTmlsKHRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHsgdGV4dDogdHJhbnNmb3JtVmFsdWUsIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGggfSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gc3R5bGU/LmNvbG9yIHx8IGNvbG9ycy5ncmF5ODAwO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogc3R5bGU/LmZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxSYXRlKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQsIGNvbHVtbldpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSBBSV9UQUJMRV9SQVRFX01BWDtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IEFJX1RBQkxFX0NFTExfRU1PSklfU0laRTtcblxuICAgICAgICBjb25zdCByZW5kZXJXaWR0aCA9IGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBzdGFyV2lkdGggPSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUgKyBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG1heFN0YXIgPSBNYXRoLm1pbihtYXgsIE1hdGguZmxvb3IocmVuZGVyV2lkdGggLyBzdGFyV2lkdGgpKTtcblxuICAgICAgICByZXR1cm4gWy4uLkFycmF5KG1heFN0YXIpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gKHRyYW5zZm9ybVZhbHVlIHx8IDApO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhdGgoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgaWNvblgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBpY29uWSxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IFN0YXJGaWxsLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBjaGVja2VkID8gdGhpcy5jb2xvcnMud2FyaW5nIDogdGhpcy5jb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCB2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlID0gdHJhbnNmb3JtVmFsdWU7XG4gICAgICAgIGlmIChpc05pbCh2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QUk9HUkVTU19URVhUX1dJRFRIO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUO1xuICAgICAgICBjb25zdCB0ZXh0SGVpZ2h0ID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgb2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCkgLyAyO1xuICAgICAgICBjb25zdCB0ZXh0T2Zmc2V0WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gdGV4dEhlaWdodCkgLyAyO1xuXG4gICAgICAgIC8vIOe7mOWItuiDjOaZr1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogY29sb3JzLmdyYXkyMDBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8g6K6h566X5bm257uY5Yi26L+b5bqmXG4gICAgICAgIGNvbnN0IHByb2dyZXNzV2lkdGggPSAodmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSAvIDEwMCkgKiB3aWR0aDtcbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYLFxuICAgICAgICAgICAgeTogeSArIG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aDogcHJvZ3Jlc3NXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5zdWNjZXNzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCArIHdpZHRoICsgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgICAgICAgICB5OiB5ICsgdGV4dE9mZnNldFksXG4gICAgICAgICAgICB0ZXh0OiBgJHt2YWxpZGF0ZVRyYW5zZm9ybVZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aXBsZSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBpc0FjdGl2ZSA/IDEzMCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AgOiByb3dIZWlnaHQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7XG4gICAgICAgIGxldCBpc092ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgdXNlckluZm8gPSByZWZlcmVuY2VzPy5tZW1iZXJzW3RyYW5zZm9ybVZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIXVzZXJJbmZvKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgeyB1aWQsIGRpc3BsYXlfbmFtZSwgYXZhdGFyIH0gPSB1c2VySW5mbztcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCArIChpc011bHRpcGxlID8gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9QQURESU5HIDogMCk7XG5cbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG5cbiAgICAgICAgICAgIGxldCByZWFsTWF4VGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoIDwgMCA/IDAgOiBtYXhUZXh0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaXNPcGVyYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpbmdNYXhXaWR0aCA9IG1heFRleHRXaWR0aCAtIChBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFICsgNCk7XG4gICAgICAgICAgICAgICAgLy8gaXRlbSBObyBzcGFjZSB0byBkaXNwbGF5LCB0aGVuIHBlcmZvcm0gYSBsaW5lIGZlZWRcbiAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW5nTWF4V2lkdGggPD0gMjApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCArIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NQVJHSU5fVE9QO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWxNYXhUZXh0V2lkdGggPSBvcGVyYXRpbmdNYXhXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBpc01vcmUgPSBjdXJyZW50WCArIGl0ZW1XaWR0aCA+IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmF2YXRhcih7XG4gICAgICAgICAgICAgICAgICAgIHg6IHggKyBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGN1cnJlbnRZLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGF2YXRhciEsXG4gICAgICAgICAgICAgICAgICAgIGlkOiB1aWQhLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0QXZhdGFyU2hvcnROYW1lKGRpc3BsYXlfbmFtZSksXG4gICAgICAgICAgICAgICAgICAgIGJnQ29sb3I6IGdldEF2YXRhckJnQ29sb3IoZGlzcGxheV9uYW1lISksXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEFJVGFibGVBdmF0YXJUeXBlLm1lbWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7lpJrpgInmqKHlvI/kuIvmmL7npLrlkI3np7BcbiAgICAgICAgICAgICAgICBpZiAoIWlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dFggPSB4ICsgY3VycmVudFggKyBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hUO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdGV4dFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZGlzcGxheV9uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IHRoaXMuY29sb3JzLmdyYXk4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGlzTW9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdGhpcy5jb2xvcnMuYmxhY2tcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFggKyBGT05UX1NJWkVfU00gLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiB0aGlzLmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBGT05UX1NJWkVfU00sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBgKyR7bGlzdENvdW50IC0gaW5kZXggLSAxfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbEF0dGFjaG1lbnQocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmIChpc05pbCh0cmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbGVJY29uU2l6ZSA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFO1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hUO1xuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuXG4gICAgICAgIGxldCBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBpdGVtSGVpZ2h0KSAvIDI7XG4gICAgICAgIGNvbnN0IGl0ZW1PdGhlcldpZHRoID0gZmlsZUljb25TaXplICsgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQ7XG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGlzT3BlcmF0aW5nXG4gICAgICAgICAgICA/IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIDEyXG4gICAgICAgICAgICA6IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoO1xuXG4gICAgICAgIGNvbnN0IGxpc3RDb3VudCA9IHRyYW5zZm9ybVZhbHVlLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudEluZm8gPSByZWZlcmVuY2VzPy5hdHRhY2htZW50c1t0cmFuc2Zvcm1WYWx1ZVtpbmRleF1dO1xuICAgICAgICAgICAgaWYgKCFhdHRhY2htZW50SW5mbykgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB7IHRpdGxlLCBhZGRpdGlvbiB9ID0gYXR0YWNobWVudEluZm87XG4gICAgICAgICAgICBjb25zdCBpdGVtV2lkdGggPSBBSV9UQUJMRV9GSUxFX0lDT05fU0laRSArIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hUO1xuICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIGl0ZW1XaWR0aDtcbiAgICAgICAgICAgIGxldCByZWFsTWF4VGV4dFdpZHRoID0gbWF4VGV4dFdpZHRoIDwgMCA/IDAgOiBtYXhUZXh0V2lkdGg7XG4gICAgICAgICAgICBpZiAoaW5kZXggPT09IDAgJiYgaXNPcGVyYXRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcGVyYXRpbmdNYXhXaWR0aCA9IG1heFRleHRXaWR0aCAtIChBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFICsgNCk7XG4gICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN2Z1N0cmluZyA9IGdldEZpbGVUaHVtYm5haWxTdmdTdHJpbmcoYWRkaXRpb24/LmV4dCk7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcbiAgICAgICAgICAgIGltZy5zcmMgPSBgZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmLTgsJHtlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyaW5nKX1gO1xuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBpbWcuc3JjLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfRklMRV9JQ09OX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNlbGxEcmF3ZXIgPSBuZXcgQ2VsbERyYXdlcigpO1xuIl19
673
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUNILGtDQUFrQyxFQUNsQyxxQ0FBcUMsRUFDckMsNENBQTRDLEVBQzVDLDJCQUEyQixFQUMzQix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBQzNCLGdDQUFnQyxFQUNoQyxpQ0FBaUMsRUFDakMsOEJBQThCLEVBQzlCLG1DQUFtQyxFQUNuQyxrQ0FBa0MsRUFDbEMsZ0NBQWdDLEVBQ2hDLCtCQUErQixFQUMvQixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLG1CQUFtQixFQUNuQixnQ0FBZ0MsRUFDaEMsOEJBQThCLEVBQzlCLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0Isd0NBQXdDLEVBQ3hDLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLFlBQVksRUFDWixpQkFBaUIsRUFDakIsUUFBUSxFQUNYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyQyxPQUFPLEVBQWdCLGdC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QUFDO1lBQzlFLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDUCxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ2IsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRO29CQUNmLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTtvQkFDZixHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUc7b0JBQ1osS0FBSyxFQUFFLHVCQUF1QjtvQkFDOUIsTUFBTSxFQUFFLHVCQUF1QjtpQkFDbEMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfLCB7IGlzTmlsIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfRklFTERfSVRFTV9NQVJHSU5fUklHSFQsXG4gICAgQUlfVEFCTEVfRklMRV9JQ09OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgIEFJX1RBQkxFX01FTUJFUl9BVkFUQVJfU0laRSxcbiAgICBBSV9UQUJMRV9NRU1CRVJfSVRFTV9BVkFUQVJfTUFSR0lOX1JJR0hULFxuICAgIEFJX1RBQkxFX01JTl9URVhUX1dJRFRILFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgIEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgREVGQVVMVF9GT05UX1NJWkUsXG4gICAgREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fUklHSFQsXG4gICAgREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgRk9OVF9TSVpFX1NNLFxuICAgIEFJX1RBQkxFX1JBVEVfTUFYLFxuICAgIFN0YXJGaWxsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGQsIEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgTWVtYmVyU2V0dGluZ3MgfSBmcm9tICdAYWktdGFibGUvdXRpbHMnO1xuaW1wb3J0IHsgQUlUYWJsZUF2YXRhclNpemUsIEFJVGFibGVBdmF0YXJUeXBlLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBGaWVsZE1vZGVsTWFwLCBnZXRBdmF0YXJCZ0NvbG9yLCBnZXRBdmF0YXJTaG9ydE5hbWUsIGdldFRleHRXaWR0aCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcbmltcG9ydCB7IGhlbHBlcnMgfSBmcm9tICduZ3gtdGV0aHlzL3V0aWwnO1xuaW1wb3J0IHsgZ2V0RmlsZVRodW1ibmFpbFN2Z1N0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2ZpbGUnO1xuXG4vKipcbiAqIOWkhOeQhuWSjOa4suafk+ihqOagvOWNleWFg+agvOeahOWGheWuuVxuICovXG5leHBvcnQgY2xhc3MgQ2VsbERyYXdlciBleHRlbmRzIERyYXdlciB7XG4gICAgLy8g5qC35byP5Yid5aeL5YyWXG4gICAgcHVibGljIGluaXRTdHlsZShmaWVsZDogQUlUYWJsZUZpZWxkLCBzdHlsZVByb3BzOiB7IGZvbnRXZWlnaHQ6IGFueSB9KTogdm9pZCB8IG51bGwge1xuICAgICAgICBjb25zdCB7IHR5cGU6IGZpZWxkVHlwZSB9ID0gZmllbGQ7XG4gICAgICAgIGNvbnN0IHsgZm9udFdlaWdodCA9IERFRkFVTFRfRk9OVF9XRUlHSFQgfSA9IHN0eWxlUHJvcHM7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm1lbWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnk6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNldFN0eWxlKHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFLCBmb250V2VpZ2h0IH0pO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIOWNleWFg+agvOa4suafk1xuICAgIHB1YmxpYyByZW5kZXJDZWxsKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQsIGNvbHVtbldpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgY2VsbFZhbHVlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGNvbnN0IGZpZWxkTWV0aG9kID0gRmllbGRNb2RlbE1hcFtmaWVsZFR5cGVdO1xuICAgICAgICBpZiAoIWZpZWxkTWV0aG9kLmlzVmFsaWQoY2VsbFZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yaWNoVGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubGluazpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsVGV4dChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuc2VsZWN0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsRGF0ZShyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucmF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsUmF0ZShyZW5kZXIsIGN0eCwgY29sdW1uV2lkdGgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnByb2dyZXNzOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxQcm9ncmVzcyhyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbE1lbWJlcihyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuYXR0YWNobWVudDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsQXR0YWNobWVudChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsVGV4dChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBmaWVsZCwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGlmIChpc05pbCh0cmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICBsZXQgcmVuZGVyVGV4dDogc3RyaW5nIHwgbnVsbCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gdHJhbnNmb3JtVmFsdWU/LnRleHQgOiB0cmFuc2Zvcm1WYWx1ZTtcbiAgICAgICAgaWYgKHJlbmRlclRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnN0IGlzU2luZ2xlTGluZSA9ICFjb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3QgaXNTaW5nbGVMaW5lID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNUZXh0RmllbGQgPSBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUudGV4dCB8fCBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUucmljaFRleHQ7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyRmllbGQgPSBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubnVtYmVyO1xuXG4gICAgICAgIGlmIChpc1RleHRGaWVsZCAmJiBpc1NpbmdsZUxpbmUpIHtcbiAgICAgICAgICAgIHJlbmRlclRleHQgPSByZW5kZXJUZXh0LnJlcGxhY2UoL1xccnxcXG4vZywgJyAnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbG9yID0gc3R5bGU/LmNvbG9yIHx8IHRoaXMuY29sb3JzLmdyYXk4MDA7XG4gICAgICAgIGNvbnN0IHRleHRBbGlnbiA9IHN0eWxlPy50ZXh0QWxpZ24gfHwgREVGQVVMVF9URVhUX0FMSUdOX0xFRlQ7XG4gICAgICAgIGNvbnN0IGZvbnRXZWlnaHQgPSBzdHlsZT8uZm9udFdlaWdodDtcbiAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCByZW5kZXJYID0gdGV4dEFsaWduID09PSBERUZBVUxUX1RFWFRfQUxJR05fUklHSFQgPyB4ICsgY29sdW1uV2lkdGggLSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgOiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCByZW5kZXJZID0geSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyO1xuICAgICAgICBjb25zdCB0ZXh0RGVjb3JhdGlvbiA9IERFRkFVTFRfVEVYVF9ERUNPUkFUSU9OO1xuXG4gICAgICAgIGlmIChpc051bWJlckZpZWxkKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0ID0gU3RyaW5nKHJlbmRlclRleHQpO1xuICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgdGV4dDogcmVuZGVyVGV4dCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogY29sdW1uV2lkdGggJiYgdGV4dE1heFdpZHRoLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgICAgIGxldCBwdXJlVGV4dCA9IHRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogcmVuZGVyWCxcbiAgICAgICAgICAgICAgICAgICAgeTogcmVuZGVyWSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogcHVyZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMud3JhcFRleHQoe1xuICAgICAgICAgICAgICAgIHg6IHJlbmRlclgsXG4gICAgICAgICAgICAgICAgeTogcmVuZGVyWSxcbiAgICAgICAgICAgICAgICB0ZXh0OiByZW5kZXJUZXh0LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgbWF4Um93OiBBSV9UQUJMRV9DRUxMX01BWF9ST1dfQ09VTlQsXG4gICAgICAgICAgICAgICAgbGluZUhlaWdodDogREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbixcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLmxpbmsgPyBDb2xvcnMucHJpbWFyeSA6IGNvbG9yLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb24sXG4gICAgICAgICAgICAgICAgZmllbGRUeXBlLFxuICAgICAgICAgICAgICAgIG5lZWREcmF3OiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFNlbGVjdChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IGZpZWxkIH0gPSByZW5kZXI7XG4gICAgICAgIGlmICgoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncz8uaXNfbXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2VsbE11bHRpU2VsZWN0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU2luZ2xlU2VsZWN0Q2VsbChyZW5kZXIsIGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbGlkU2VsZWN0ZWRWYWx1ZShmaWVsZDogQUlUYWJsZUZpZWxkLCB0cmFuc2Zvcm1WYWx1ZTogc3RyaW5nW10pIHtcbiAgICAgICAgY29uc3QgZmllbGRPcHRpb25zTWFwID0gaGVscGVycy5rZXlCeSgoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zIHx8IFtdLCAnX2lkJyk7XG4gICAgICAgIHJldHVybiAodHJhbnNmb3JtVmFsdWUgfHwgW10pLmZpbHRlcigob3B0aW9uSWQ6IHN0cmluZykgPT4gISFmaWVsZE9wdGlvbnNNYXBbb3B0aW9uSWRdKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNdWx0aVNlbGVjdChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIGZpZWxkLCBjb2x1bW5XaWR0aCB9ID0gcmVuZGVyO1xuICAgICAgICBsZXQgdHJhbnNmb3JtVmFsdWUgPSB0aGlzLmdldFZhbGlkU2VsZWN0ZWRWYWx1ZShmaWVsZCwgcmVuZGVyLnRyYW5zZm9ybVZhbHVlKTtcbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBjdXJyZW50WCA9IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG1heENvbnRhaW5lcldpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBvcHRpb25TdHlsZSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbl9zdHlsZTtcbiAgICAgICAgY29uc3QgZm9udFN0eWxlID0gYCR7REVGQVVMVF9GT05UX1dFSUdIVH0gJHtBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkV9cHggJHtERUZBVUxUX0ZPTlRfRkFNSUxZfWA7XG4gICAgICAgIGNvbnN0IGlzRG90T3JQaWVjZSA9IG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90IHx8IG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U7XG5cbiAgICAgICAgbGV0IHRvdGFsV2lkdGggPSAwO1xuICAgICAgICBjb25zdCBjZWxsSXRlbUluZm9NYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGxldCBkcmF3YWJsZUluZGV4ID0gMDtcbiAgICAgICAgdHJhbnNmb3JtVmFsdWUuZm9yRWFjaCgob3B0aW9uSWQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uX2lkID09PSBvcHRpb25JZCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBnZXRUZXh0V2lkdGgoY3R4LCBpdGVtPy50ZXh0IGFzIHN0cmluZywgZm9udFN0eWxlKTtcbiAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gdGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRG90T3JQaWVjZSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGggPCBtYXhDb250YWluZXJXaWR0aCB8fCB0b3RhbFdpZHRoID09PSBtYXhDb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxJdGVtSW5mb01hcC5zZXQob3B0aW9uSWQsIHsgdGV4dFdpZHRoLCBpdGVtLCBvZmZzZXQ6IHRvdGFsV2lkdGggfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IEFJX1RBQkxFX01JTl9URVhUX1dJRFRIICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMjtcbiAgICAgICAgY29uc3QgbWluV2lkdGggPSBpc0RvdE9yUGllY2UgPyBiYXNlV2lkdGggKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgOiBiYXNlV2lkdGg7XG5cbiAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXggKyAxXSkge1xuICAgICAgICAgICAgY29uc3QgeyBvZmZzZXQ6IGN1cnJlbnRPZmZzZXQgfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleF0pO1xuICAgICAgICAgICAgY29uc3QgY2FuRHJhd2VyTmV4dCA9IG1heENvbnRhaW5lcldpZHRoIC0gY3VycmVudE9mZnNldCA+IG1pbldpZHRoO1xuICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGNhbkRyYXdlck5leHQgPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAvLyDkuIrpnaLov4fnqIvmmK8gIOayoeaciSAr5pWw5a2XICDnmoTmg4XlhrXkuIvmnIDlpKfog73mlL7lh6DkuKrvvJtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIGlmIChudW1iZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8g6K+05piO5pyJICvmlbDlrZfvvIzph43mlrDorqHnrpdcbiAgICAgICAgICAgICAgICBjb25zdCBjaXJjbGVXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGAre251bWJlcn1gLCBmb250U3R5bGUpICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBtYXhDb250YWluZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIC0gY2lyY2xlV2lkdGg7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5b2T5YmN5bey57uP6LaF5Ye65LqG77yM55yL5piv5ZCm6IO95a655LiL5b2T5YmN55qE77yM5LiN6IO95bCx5YeP5Y67ICAx77ybXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1IYXNPdmVyID0gY3VycmVudE9mZnNldCA+IG1heDtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEl0ZW1IYXNPdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RPZmZzZXQgPSBkcmF3YWJsZUluZGV4ID09PSAwID8gMCA6IGNlbGxJdGVtSW5mb01hcC5nZXQodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IG1heCAtIGxhc3RPZmZzZXQgPiBtaW5XaWR0aCA/IGRyYXdhYmxlSW5kZXggOiBkcmF3YWJsZUluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyDov5jmnInliankvZnnqbrpl7QsIOeci+aYr+WQpuiDveWkmua4suafk+S4gOS4qlxuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gY3VycmVudE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCArIDEgOiBkcmF3YWJsZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNpcmNsZVRleHQgPSBgKyR7dHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKX1gO1xuICAgICAgICBjb25zdCBjaXJjbGVXaWR0aCA9XG4gICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpID4gMCA/IGdldFRleHRXaWR0aChjdHgsIGNpcmNsZVRleHQsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIDogMDtcbiAgICAgICAgLy8g5Ymp5L2Z56m66Ze0XG4gICAgICAgIGxldCByZW1haW5TcGFjZSA9IG1heENvbnRhaW5lcldpZHRoIC0gY2lyY2xlV2lkdGggLSAoY2lyY2xlV2lkdGggPiAwID8gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgOiAwKTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25JZCA9IHRyYW5zZm9ybVZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGJnQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjb21tb25JdGVtID0gKG9wdGlvblN0eWxlOiBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsIHNoYXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBpc0RvdE9yUGllY2VcbiAgICAgICAgICAgICAgICAgICAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMjtcbiAgICAgICAgICAgICAgICBpZiAocmVtYWluU3BhY2UgPCBtaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dFdpZHRoLCBpdGVtIH0gPSBjZWxsSXRlbUluZm9NYXAuZ2V0KG9wdGlvbklkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZVdpZHRoID0gYmFzZVdpZHRoICsgdGV4dFdpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5TcGFjZSAtPSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYmdXaWR0aCA9IHJlbWFpblNwYWNlID4gY29tcGxldGVXaWR0aCA/IGNvbXBsZXRlV2lkdGggOiByZW1haW5TcGFjZTtcbiAgICAgICAgICAgICAgICBiZ0NvbmZpZy53aWR0aCA9IGJnV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGlzRG90T3JQaWVjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3QoYmdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGUgPT09ICdyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAnYXJjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZULFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBiZ0NvbmZpZy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJnQ29uZmlnLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGJnQ29uZmlnLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcnMud2hpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3QoYmdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1RBR19GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGJnQ29uZmlnLndpZHRoO1xuICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IGN1cnJlbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBjdXJyZW50WCArPSBjdXJyZW50V2lkdGggKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdCwgJ2FyYycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2UsICdyZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZzpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRleHQsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2lyY2xlV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNpcmNsZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2lyY2xlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgZmllbGQsIGNvbHVtbldpZHRoLCBpc0FjdGl2ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1WYWx1ZSA9IHRoaXMuZ2V0VmFsaWRTZWxlY3RlZFZhbHVlKGZpZWxkLCByZW5kZXIudHJhbnNmb3JtVmFsdWUpO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWVbMF0pIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2Fybihgc2luZ2xlIHNlbGVjdCBmaWVsZCB1bmV4cGVjdGVkIHZhbHVlOiAke3RyYW5zZm9ybVZhbHVlWzBdfWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzT3BlcmF0aW5nID0gaXNBY3RpdmU7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5faWQgPT09IHRyYW5zZm9ybVZhbHVlWzBdKTtcbiAgICAgICAgY29uc3QgaXRlbU5hbWUgPSBpdGVtPy50ZXh0IHx8ICcnO1xuICAgICAgICBjb25zdCBnZXRUZXh0RWxsaXBzaXMgPSAobWF4VGV4dFdpZHRoOiBudW1iZXIsIGZvbnRTaXplOiBudW1iZXIgPSBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFKSA9PiB7XG4gICAgICAgICAgICBtYXhUZXh0V2lkdGggLT0gaXNPcGVyYXRpbmcgPyBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFIC0gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRV9PRkZTRVQgOiAwO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtTmFtZSxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogY29sdW1uV2lkdGggJiYgbWF4VGV4dFdpZHRoLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBmb250U2l6ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxO1xuICAgICAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvblN0eWxlID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlO1xuICAgICAgICAgICAgbGV0IGJhY2tncm91bmQgPSBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBjb2xvcnMucHJpbWFyeTtcbiAgICAgICAgICAgIGNvbnN0IGRvdE1heFRleHRXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIIC0gQUlfVEFCTEVfVEVYVF9HQVA7XG4gICAgICAgICAgICBjb25zdCBib3JkZXJXaWR0aCA9IDE7XG4gICAgICAgICAgICBzd2l0Y2ggKG9wdGlvblN0eWxlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90OlxuICAgICAgICAgICAgICAgICAgICAvLyDov5nph4znmoQgQUlfVEFCTEVfT0ZGU0VUIOWBj+enu+S4jeehruWumuaYr+S4uuWVpe+8iOWMheaLrCBwaWVjZSDnmoTvvInvvIzlj6rmmK/kuLrkuobkv53mjIHlkoznvJbovpHnu4Tku7bkuK3nmoTlr7npvZBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCkgLyAyICsgQUlfVEFCTEVfRE9UX1JBRElVUyAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfUElFQ0VfV0lEVEggKyBBSV9UQUJMRV9URVhUX0dBUCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKGRvdE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIKSAvIDIgLSBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX1BJRUNFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX1BJRUNFX1dJRFRIICsgQUlfVEFCTEVfVEVYVF9HQVAgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHRFbGxpcHNpcyhkb3RNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZzpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogKEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX1RBR19QQURESU5HKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0V2lkdGgsIHRleHQgfSA9IGdldFRleHRFbGxpcHNpcyhtYXhUZXh0V2lkdGgsIEFJX1RBQkxFX1RBR19GT05UX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KHRleHRXaWR0aCArIDIgKiBBSV9UQUJMRV9UQUdfUEFERElORywgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnMud2hpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX09QVElPTl9JVEVNX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dE1heFRleHRXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHRFbGxpcHNpcyh0ZXh0TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxEYXRlKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGNvbHVtbldpZHRoLCBzdHlsZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuXG4gICAgICAgIGlmIChpc05pbCh0cmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSB0aGlzLnRleHRFbGxpcHNpcyh7IHRleHQ6IHRyYW5zZm9ybVZhbHVlLCBtYXhXaWR0aDogY29sdW1uV2lkdGggJiYgdGV4dE1heFdpZHRoIH0pO1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjb25zdCBjb2xvciA9IHN0eWxlPy5jb2xvciB8fCBjb2xvcnMuZ3JheTgwMDtcbiAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDIsXG4gICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IHN0eWxlPy5mb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUmF0ZShyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkLCBjb2x1bW5XaWR0aDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgbWF4ID0gQUlfVEFCTEVfUkFURV9NQVg7XG4gICAgICAgIGNvbnN0IHNpemUgPSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkU7XG5cbiAgICAgICAgY29uc3QgcmVuZGVyV2lkdGggPSBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3Qgc3RhcldpZHRoID0gQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFICsgQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HO1xuICAgICAgICBjb25zdCBtYXhTdGFyID0gTWF0aC5taW4obWF4LCBNYXRoLmZsb29yKHJlbmRlcldpZHRoIC8gc3RhcldpZHRoKSk7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXhTdGFyKS5rZXlzKCldLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlIDw9ICh0cmFuc2Zvcm1WYWx1ZSB8fCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGljb25YID0gaW5kZXggKiBzaXplICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkc7XG4gICAgICAgICAgICBjb25zdCBpY29uWSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gc2l6ZSkgLyAyO1xuXG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGljb25YLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgaWNvblksXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDIyLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdGFyRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogY2hlY2tlZCA/IHRoaXMuY29sb3JzLndhcmluZyA6IHRoaXMuY29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMS4xNCxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiAxLjE0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFByb2dyZXNzKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGNvbHVtbldpZHRoLCBzdHlsZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICBsZXQgdmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSA9IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAoaXNOaWwodmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlVHJhbnNmb3JtVmFsdWUgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XSURUSDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVDtcbiAgICAgICAgY29uc3QgdGV4dEhlaWdodCA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkU7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQpIC8gMjtcbiAgICAgICAgY29uc3QgdGV4dE9mZnNldFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIHRleHRIZWlnaHQpIC8gMjtcblxuICAgICAgICAvLyDnu5jliLbog4zmma9cbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYLFxuICAgICAgICAgICAgeTogeSArIG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOiuoeeul+W5tue7mOWItui/m+W6plxuICAgICAgICBjb25zdCBwcm9ncmVzc1dpZHRoID0gKHZhbGlkYXRlVHJhbnNmb3JtVmFsdWUgLyAxMDApICogd2lkdGg7XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGg6IHByb2dyZXNzV2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuc3VjY2Vzc1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFggKyB3aWR0aCArIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgICAgICAgICAgeTogeSArIHRleHRPZmZzZXRZLFxuICAgICAgICAgICAgdGV4dDogYCR7dmFsaWRhdGVUcmFuc2Zvcm1WYWx1ZX0lYCxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTWVtYmVyKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgcmVmZXJlbmNlcywgeCwgeSwgZmllbGQsIHRyYW5zZm9ybVZhbHVlLCByb3dIZWlnaHQsIGNvbHVtbldpZHRoLCBpc0FjdGl2ZSB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlPy5sZW5ndGggfHwgIXJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGZpZWxkLnNldHRpbmdzIGFzIE1lbWJlclNldHRpbmdzO1xuICAgICAgICBjb25zdCBhdmF0YXJTaXplID0gQUlfVEFCTEVfTUVNQkVSX0FWQVRBUl9TSVpFO1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IGlzT3BlcmF0aW5nID0gaXNBY3RpdmU7XG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBzZXR0aW5ncz8uaXNfbXVsdGlwbGU7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBsZXQgY3VycmVudFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIGF2YXRhclNpemUpIC8gMjtcbiAgICAgICAgY29uc3QgaXRlbU90aGVyV2lkdGggPSBhdmF0YXJTaXplICsgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVDtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gaXNBY3RpdmUgPyAxMzAgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QIDogcm93SGVpZ2h0IC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUDtcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gaXNPcGVyYXRpbmdcbiAgICAgICAgICAgID8gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gaXRlbU90aGVyV2lkdGggLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFIC0gMTJcbiAgICAgICAgICAgIDogY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gaXRlbU90aGVyV2lkdGg7XG5cbiAgICAgICAgY29uc3QgbGlzdENvdW50ID0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoO1xuICAgICAgICBsZXQgaXNPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJbmZvID0gcmVmZXJlbmNlcz8ubWVtYmVyc1t0cmFuc2Zvcm1WYWx1ZVtpbmRleF1dO1xuICAgICAgICAgICAgaWYgKCF1c2VySW5mbykgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdWlkLCBkaXNwbGF5X25hbWUsIGF2YXRhciB9ID0gdXNlckluZm87XG4gICAgICAgICAgICBjb25zdCBpdGVtV2lkdGggPSBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQgKyAoaXNNdWx0aXBsZSA/IEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyA6IDApO1xuXG4gICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORyArIGluZGV4ICogaXRlbVdpZHRoO1xuXG4gICAgICAgICAgICBsZXQgcmVhbE1heFRleHRXaWR0aCA9IG1heFRleHRXaWR0aCA8IDAgPyAwIDogbWF4VGV4dFdpZHRoO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzT3BlcmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW5nTWF4V2lkdGggPSBtYXhUZXh0V2lkdGggLSAoQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSArIDQpO1xuICAgICAgICAgICAgICAgIC8vIGl0ZW0gTm8gc3BhY2UgdG8gZGlzcGxheSwgdGhlbiBwZXJmb3JtIGEgbGluZSBmZWVkXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGluZ01heFdpZHRoIDw9IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUFSR0lOX1RPUDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsTWF4VGV4dFdpZHRoID0gb3BlcmF0aW5nTWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaXNNb3JlID0gY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICBpZiAoY29sdW1uV2lkdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIOWcqOmdnua0u+WKqOeKtuaAgeS4i++8jOW9k+i2heWHuuWIl+WuveaXtu+8jOS4jeS8mua4suafk+WQjue7reWGheWuuVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCA+PSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIOWmguaenOS4jeaYr+mdnua0u+WKqOeKtuaAgeeahOacgOWQjuS4gOihjO+8jOWImeaNouihjOa4suafk+a6ouWHuuWGheWuuVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WCA+IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYICsgaXRlbVdpZHRoID4gY29sdW1uV2lkdGggLSBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGl0ZW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WSA+PSBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdmF0YXIoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBhdmF0YXIhLFxuICAgICAgICAgICAgICAgICAgICBpZDogdWlkISxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldEF2YXRhclNob3J0TmFtZShkaXNwbGF5X25hbWUpLFxuICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yOiBnZXRBdmF0YXJCZ0NvbG9yKGRpc3BsYXlfbmFtZSEpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBBSVRhYmxlQXZhdGFyVHlwZS5tZW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5aSa6YCJ5qih5byP5LiL5pi+56S65ZCN56ewXG4gICAgICAgICAgICAgICAgaWYgKCFpc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRYID0geCArIGN1cnJlbnRYICsgQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0ICsgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRleHRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGRpc3BsYXlfbmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogbWF4VGV4dFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiB0aGlzLmNvbG9ycy5ncmF5ODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpc01vcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMC4zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIGN1cnJlbnRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRoaXMuY29sb3JzLmJsYWNrXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYICsgRk9OVF9TSVpFX1NNIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogdGhpcy5jb2xvcnMud2hpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogRk9OVF9TSVpFX1NNLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogYCske2xpc3RDb3VudCAtIGluZGV4IC0gMX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxBdHRhY2htZW50KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgcmVmZXJlbmNlcywgeCwgeSwgZmllbGQsIHRyYW5zZm9ybVZhbHVlLCByb3dIZWlnaHQsIGNvbHVtbldpZHRoLCBpc0FjdGl2ZSB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoaXNOaWwodHJhbnNmb3JtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxlSWNvblNpemUgPSBBSV9UQUJMRV9GSUxFX0lDT05fU0laRTtcbiAgICAgICAgY29uc3QgaXRlbUhlaWdodCA9IEFJX1RBQkxFX0ZJTEVfSUNPTl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gaXRlbUhlaWdodCkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGZpbGVJY29uU2l6ZSArIEFJX1RBQkxFX0ZJRUxEX0lURU1fTUFSR0lOX1JJR0hUO1xuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBpc09wZXJhdGluZ1xuICAgICAgICAgICAgPyBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSAxMlxuICAgICAgICAgICAgOiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBpdGVtT3RoZXJXaWR0aDtcblxuICAgICAgICBjb25zdCBsaXN0Q291bnQgPSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsaXN0Q291bnQ7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRJbmZvID0gcmVmZXJlbmNlcz8uYXR0YWNobWVudHNbdHJhbnNmb3JtVmFsdWVbaW5kZXhdXTtcbiAgICAgICAgICAgIGlmICghYXR0YWNobWVudEluZm8pIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgeyB0aXRsZSwgYWRkaXRpb24gfSA9IGF0dGFjaG1lbnRJbmZvO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlfVEFCTEVfRklMRV9JQ09OX1NJWkUgKyBBSV9UQUJMRV9GSUVMRF9JVEVNX01BUkdJTl9SSUdIVDtcbiAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgaW5kZXggKiBpdGVtV2lkdGg7XG4gICAgICAgICAgICBsZXQgcmVhbE1heFRleHRXaWR0aCA9IG1heFRleHRXaWR0aCA8IDAgPyAwIDogbWF4VGV4dFdpZHRoO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzT3BlcmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW5nTWF4V2lkdGggPSBtYXhUZXh0V2lkdGggLSAoQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSArIDQpO1xuICAgICAgICAgICAgICAgIHJlYWxNYXhUZXh0V2lkdGggPSBvcGVyYXRpbmdNYXhXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjb2x1bW5XaWR0aCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8g5Zyo6Z2e5rS75Yqo54q25oCB5LiL77yM5b2T6LaF5Ye65YiX5a695pe277yM5LiN5Lya5riy5p+T5ZCO57ut5YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdmdTdHJpbmcgPSBnZXRGaWxlVGh1bWJuYWlsU3ZnU3RyaW5nKGFkZGl0aW9uPy5leHQpO1xuICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICBpbWcuc3JjID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZW5jb2RlVVJJQ29tcG9uZW50KHN2Z1N0cmluZyl9YDtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaW1nLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogaW1nLnNyYyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX0ZJTEVfSUNPTl9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBjZWxsRHJhd2VyID0gbmV3IENlbGxEcmF3ZXIoKTtcbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  import { Component } from '@angular/core';
2
2
  export class HoverCellComponent extends Component {
3
3
  }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2ludGVyZmFjZXMvaG92ZXItY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBSXZELE1BQU0sT0FBZ0Isa0JBQW1CLFNBQVEsU0FBUztDQUd6RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXRTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVIb3ZlckNlbGxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBIb3ZlckNlbGxDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgIHN0YXRpYyBmaWVsZFR5cGU6IEFJVGFibGVGaWVsZFR5cGU7XG4gICAgY29uZmlnITogSW5wdXRTaWduYWw8QUlUYWJsZUhvdmVyQ2VsbENvbmZpZyB8IHVuZGVmaW5lZD47XG59XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG92ZXItY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2ludGVyZmFjZXMvaG92ZXItY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBSXZELE1BQU0sT0FBZ0Isa0JBQW1CLFNBQVEsU0FBUztDQUd6RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXRTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVIb3ZlckNlbGxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRUeXBlIH0gZnJvbSAnQGFpLXRhYmxlL3V0aWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEhvdmVyQ2VsbENvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgc3RhdGljIGZpZWxkVHlwZTogQUlUYWJsZUZpZWxkVHlwZTtcbiAgICBjb25maWchOiBJbnB1dFNpZ25hbDxBSVRhYmxlSG92ZXJDZWxsQ29uZmlnIHwgdW5kZWZpbmVkPjtcbn1cbiJdfQ==