@1money/react-ui 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (268) hide show
  1. package/AGENTS.md +393 -0
  2. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
  4. package/es/components/CheckboxGroup/interface.d.ts +21 -15
  5. package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  6. package/es/components/Form/Form.d.ts +29 -0
  7. package/es/components/Form/Form.js +188 -0
  8. package/es/components/Form/FormItem.d.ts +4 -0
  9. package/es/components/Form/FormItem.js +165 -0
  10. package/es/components/Form/FormItemContent.d.ts +18 -0
  11. package/es/components/Form/FormItemContent.js +146 -0
  12. package/es/components/Form/constants.d.ts +46 -0
  13. package/es/components/Form/constants.js +65 -0
  14. package/es/components/Form/helper.d.ts +120 -0
  15. package/es/components/Form/helper.js +284 -0
  16. package/es/components/Form/index.d.ts +20 -0
  17. package/es/components/Form/index.js +21 -0
  18. package/es/components/Form/interface.d.ts +238 -0
  19. package/es/components/Form/interface.js +2 -0
  20. package/es/components/Form/style/Form.css +1 -0
  21. package/es/components/Form/style/Form.scss +167 -0
  22. package/es/components/Form/style/css.js +2 -0
  23. package/es/components/Form/style/index.d.ts +1 -0
  24. package/es/components/Form/style/index.js +2 -0
  25. package/es/components/Form/useFormItemContext.d.ts +32 -0
  26. package/es/components/Form/useFormItemContext.js +55 -0
  27. package/es/components/Form/useFormItemWatch.d.ts +51 -0
  28. package/es/components/Form/useFormItemWatch.js +69 -0
  29. package/es/components/Form/useValidationTrigger.d.ts +40 -0
  30. package/es/components/Form/useValidationTrigger.js +74 -0
  31. package/es/components/Input/Input.js +72 -74
  32. package/es/components/Input/interface.d.ts +9 -9
  33. package/es/components/InputAmount/InputAmount.js +228 -276
  34. package/es/components/InputAmount/helper.d.ts +46 -0
  35. package/es/components/InputAmount/helper.js +115 -0
  36. package/es/components/ProForm/ProForm.d.ts +33 -0
  37. package/es/components/ProForm/ProForm.js +208 -0
  38. package/es/components/ProForm/ProFormDependency.d.ts +12 -0
  39. package/es/components/ProForm/ProFormDependency.js +61 -0
  40. package/es/components/ProForm/ProFormList.d.ts +19 -0
  41. package/es/components/ProForm/ProFormList.js +348 -0
  42. package/es/components/ProForm/Submitter.d.ts +21 -0
  43. package/es/components/ProForm/Submitter.js +76 -0
  44. package/es/components/ProForm/constants.d.ts +34 -0
  45. package/es/components/ProForm/constants.js +40 -0
  46. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  47. package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
  48. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  49. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
  50. package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  51. package/es/components/ProForm/fields/ProFormDigit.js +15 -0
  52. package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  53. package/es/components/ProForm/fields/ProFormMoney.js +10 -0
  54. package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  55. package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
  56. package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  57. package/es/components/ProForm/fields/ProFormPassword.js +16 -0
  58. package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  59. package/es/components/ProForm/fields/ProFormRadio.js +13 -0
  60. package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  61. package/es/components/ProForm/fields/ProFormSelect.js +13 -0
  62. package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  63. package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
  64. package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
  65. package/es/components/ProForm/fields/ProFormText.js +15 -0
  66. package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  67. package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
  68. package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
  69. package/es/components/ProForm/fields/createProFormField.js +200 -0
  70. package/es/components/ProForm/fields/index.d.ts +12 -0
  71. package/es/components/ProForm/fields/index.js +13 -0
  72. package/es/components/ProForm/index.d.ts +7 -0
  73. package/es/components/ProForm/index.js +7 -0
  74. package/es/components/ProForm/interface.d.ts +306 -0
  75. package/es/components/ProForm/interface.js +2 -0
  76. package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  77. package/es/components/ProForm/layouts/DrawerForm.js +79 -0
  78. package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
  79. package/es/components/ProForm/layouts/ModalForm.js +89 -0
  80. package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  81. package/es/components/ProForm/layouts/QueryFilter.js +132 -0
  82. package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
  83. package/es/components/ProForm/layouts/StepsForm.js +295 -0
  84. package/es/components/ProForm/layouts/index.d.ts +4 -0
  85. package/es/components/ProForm/layouts/index.js +5 -0
  86. package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  87. package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
  88. package/es/components/ProForm/style/ProForm.module.css +1 -0
  89. package/es/components/ProForm/style/ProForm.module.scss +59 -0
  90. package/es/components/ProForm/style/css.js +3 -0
  91. package/es/components/ProForm/style/index.d.ts +1 -0
  92. package/es/components/ProForm/style/index.js +3 -0
  93. package/es/components/ProForm/utils.d.ts +72 -0
  94. package/es/components/ProForm/utils.js +206 -0
  95. package/es/components/RadioGroup/RadioGroup.js +46 -23
  96. package/es/components/RadioGroup/interface.d.ts +3 -1
  97. package/es/components/Select/Select.d.ts +1 -1
  98. package/es/components/Select/Select.js +113 -106
  99. package/es/components/Select/constants.d.ts +18 -0
  100. package/es/components/Select/constants.js +19 -0
  101. package/es/components/Sidebar/Sidebar.js +21 -23
  102. package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
  103. package/es/components/Sidebar/SidebarLogo.js +33 -0
  104. package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
  105. package/es/components/Sidebar/SimplySidebar.js +18 -22
  106. package/es/components/Sidebar/Stepper.js +14 -14
  107. package/es/components/Sidebar/constants.d.ts +16 -0
  108. package/es/components/Sidebar/constants.js +17 -0
  109. package/es/components/Sidebar/style/Stepper.css +1 -1
  110. package/es/components/Sidebar/style/Stepper.scss +11 -1
  111. package/es/components/Switch/Switch.js +28 -25
  112. package/es/components/Switch/interface.d.ts +9 -4
  113. package/es/components/useControlledState/index.d.ts +14 -0
  114. package/es/components/useControlledState/index.js +32 -0
  115. package/es/components/useEventCallback/index.d.ts +11 -0
  116. package/es/components/useEventCallback/index.js +17 -0
  117. package/es/components/useLayoutEffect/index.d.ts +11 -0
  118. package/es/components/useLayoutEffect/index.js +17 -0
  119. package/es/components/useLayoutState/index.d.ts +13 -0
  120. package/es/components/useLayoutState/index.js +71 -0
  121. package/es/components/useMemoizedFn/index.d.ts +12 -0
  122. package/es/components/useMemoizedFn/index.js +27 -0
  123. package/es/components/usePrevious/index.d.ts +11 -0
  124. package/es/components/usePrevious/index.js +19 -0
  125. package/es/components/useSafeState/index.d.ts +12 -0
  126. package/es/components/useSafeState/index.js +24 -0
  127. package/es/components/useSyncState/index.d.ts +14 -0
  128. package/es/components/useSyncState/index.js +37 -0
  129. package/es/components/useUpdateEffect/index.d.ts +9 -0
  130. package/es/components/useUpdateEffect/index.js +19 -0
  131. package/es/index.css +1 -1
  132. package/es/index.d.ts +21 -2
  133. package/es/index.js +19 -1
  134. package/jest.setup.d.ts +1 -0
  135. package/jest.setup.ts +1 -0
  136. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  137. package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
  138. package/lib/components/CheckboxGroup/interface.d.ts +21 -15
  139. package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  140. package/lib/components/Form/Form.d.ts +29 -0
  141. package/lib/components/Form/Form.js +199 -0
  142. package/lib/components/Form/FormItem.d.ts +4 -0
  143. package/lib/components/Form/FormItem.js +176 -0
  144. package/lib/components/Form/FormItemContent.d.ts +18 -0
  145. package/lib/components/Form/FormItemContent.js +156 -0
  146. package/lib/components/Form/constants.d.ts +46 -0
  147. package/lib/components/Form/constants.js +71 -0
  148. package/lib/components/Form/helper.d.ts +120 -0
  149. package/lib/components/Form/helper.js +290 -0
  150. package/lib/components/Form/index.d.ts +20 -0
  151. package/lib/components/Form/index.js +45 -0
  152. package/lib/components/Form/interface.d.ts +238 -0
  153. package/lib/components/Form/interface.js +6 -0
  154. package/lib/components/Form/style/Form.css +1 -0
  155. package/lib/components/Form/style/Form.scss +167 -0
  156. package/lib/components/Form/style/css.js +4 -0
  157. package/lib/components/Form/style/index.d.ts +1 -0
  158. package/lib/components/Form/style/index.js +4 -0
  159. package/lib/components/Form/useFormItemContext.d.ts +32 -0
  160. package/lib/components/Form/useFormItemContext.js +62 -0
  161. package/lib/components/Form/useFormItemWatch.d.ts +51 -0
  162. package/lib/components/Form/useFormItemWatch.js +76 -0
  163. package/lib/components/Form/useValidationTrigger.d.ts +40 -0
  164. package/lib/components/Form/useValidationTrigger.js +81 -0
  165. package/lib/components/Input/Input.js +71 -73
  166. package/lib/components/Input/interface.d.ts +9 -9
  167. package/lib/components/InputAmount/InputAmount.js +230 -278
  168. package/lib/components/InputAmount/helper.d.ts +46 -0
  169. package/lib/components/InputAmount/helper.js +122 -0
  170. package/lib/components/ProForm/ProForm.d.ts +33 -0
  171. package/lib/components/ProForm/ProForm.js +216 -0
  172. package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
  173. package/lib/components/ProForm/ProFormDependency.js +67 -0
  174. package/lib/components/ProForm/ProFormList.d.ts +19 -0
  175. package/lib/components/ProForm/ProFormList.js +355 -0
  176. package/lib/components/ProForm/Submitter.d.ts +21 -0
  177. package/lib/components/ProForm/Submitter.js +83 -0
  178. package/lib/components/ProForm/constants.d.ts +34 -0
  179. package/lib/components/ProForm/constants.js +46 -0
  180. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  181. package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
  182. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  183. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
  184. package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  185. package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
  186. package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  187. package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
  188. package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  189. package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
  190. package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  191. package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
  192. package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  193. package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
  194. package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  195. package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
  196. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  197. package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
  198. package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
  199. package/lib/components/ProForm/fields/ProFormText.js +22 -0
  200. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  201. package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
  202. package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
  203. package/lib/components/ProForm/fields/createProFormField.js +208 -0
  204. package/lib/components/ProForm/fields/index.d.ts +12 -0
  205. package/lib/components/ProForm/fields/index.js +90 -0
  206. package/lib/components/ProForm/index.d.ts +7 -0
  207. package/lib/components/ProForm/index.js +73 -0
  208. package/lib/components/ProForm/interface.d.ts +306 -0
  209. package/lib/components/ProForm/interface.js +6 -0
  210. package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  211. package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
  212. package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
  213. package/lib/components/ProForm/layouts/ModalForm.js +96 -0
  214. package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  215. package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
  216. package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
  217. package/lib/components/ProForm/layouts/StepsForm.js +302 -0
  218. package/lib/components/ProForm/layouts/index.d.ts +4 -0
  219. package/lib/components/ProForm/layouts/index.js +40 -0
  220. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  221. package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
  222. package/lib/components/ProForm/style/ProForm.module.css +1 -0
  223. package/lib/components/ProForm/style/ProForm.module.scss +59 -0
  224. package/lib/components/ProForm/style/css.js +4 -0
  225. package/lib/components/ProForm/style/index.d.ts +1 -0
  226. package/lib/components/ProForm/style/index.js +4 -0
  227. package/lib/components/ProForm/utils.d.ts +72 -0
  228. package/lib/components/ProForm/utils.js +213 -0
  229. package/lib/components/RadioGroup/RadioGroup.js +45 -22
  230. package/lib/components/RadioGroup/interface.d.ts +3 -1
  231. package/lib/components/Select/Select.d.ts +1 -1
  232. package/lib/components/Select/Select.js +114 -107
  233. package/lib/components/Select/constants.d.ts +18 -0
  234. package/lib/components/Select/constants.js +25 -0
  235. package/lib/components/Sidebar/Sidebar.js +21 -23
  236. package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
  237. package/lib/components/Sidebar/SidebarLogo.js +39 -0
  238. package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
  239. package/lib/components/Sidebar/SimplySidebar.js +17 -21
  240. package/lib/components/Sidebar/Stepper.js +14 -14
  241. package/lib/components/Sidebar/constants.d.ts +16 -0
  242. package/lib/components/Sidebar/constants.js +23 -0
  243. package/lib/components/Sidebar/style/Stepper.css +1 -1
  244. package/lib/components/Sidebar/style/Stepper.scss +11 -1
  245. package/lib/components/Switch/Switch.js +27 -24
  246. package/lib/components/Switch/interface.d.ts +9 -4
  247. package/lib/components/useControlledState/index.d.ts +14 -0
  248. package/lib/components/useControlledState/index.js +39 -0
  249. package/lib/components/useEventCallback/index.d.ts +11 -0
  250. package/lib/components/useEventCallback/index.js +24 -0
  251. package/lib/components/useLayoutEffect/index.d.ts +11 -0
  252. package/lib/components/useLayoutEffect/index.js +23 -0
  253. package/lib/components/useLayoutState/index.d.ts +13 -0
  254. package/lib/components/useLayoutState/index.js +79 -0
  255. package/lib/components/useMemoizedFn/index.d.ts +12 -0
  256. package/lib/components/useMemoizedFn/index.js +33 -0
  257. package/lib/components/usePrevious/index.d.ts +11 -0
  258. package/lib/components/usePrevious/index.js +25 -0
  259. package/lib/components/useSafeState/index.d.ts +12 -0
  260. package/lib/components/useSafeState/index.js +31 -0
  261. package/lib/components/useSyncState/index.d.ts +14 -0
  262. package/lib/components/useSyncState/index.js +44 -0
  263. package/lib/components/useUpdateEffect/index.d.ts +9 -0
  264. package/lib/components/useUpdateEffect/index.js +25 -0
  265. package/lib/index.css +1 -1
  266. package/lib/index.d.ts +21 -2
  267. package/lib/index.js +213 -1
  268. package/package.json +16 -1
@@ -1,3 +1,4 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
1
2
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
3
  var __rest = this && this.__rest || function (s, e) {
3
4
  var t = {};
@@ -8,90 +9,75 @@ var __rest = this && this.__rest || function (s, e) {
8
9
  return t;
9
10
  };
10
11
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
- import { memo, useMemo, useState, useCallback, useRef, useEffect, useLayoutEffect } from 'react';
12
- import BigNumber from 'bignumber.js';
13
- import { numericFormatter } from 'react-number-format';
12
+ import { memo, useMemo, useState, useRef, useLayoutEffect } from 'react';
14
13
  import { Skeleton } from 'primereact/skeleton';
15
14
  import Spinner from '../Spinner';
15
+ import useLatest from '../useLatest';
16
+ import useEventCallback from '../useEventCallback';
16
17
  import { default as classnames, joinCls } from '../../utils/classnames';
17
- var MIN_INPUT_WIDTH = 33;
18
- var normalizeNumberInput = function normalizeNumberInput(val) {
19
- return val.replace(/[\u3002\uff0e\uff61]/g, '.').replace(/[\uFF0C]/g, ',');
20
- };
21
- var calcValueInRange = function calcValueInRange(val, min, max) {
22
- if (val === '' || val === '-' || isNaN(+val)) return val;
23
- var calcVal = val;
24
- var bnVal = BigNumber(val);
25
- if (typeof min === 'number' || typeof min === 'bigint') {
26
- var minBn = BigNumber(min);
27
- if (bnVal.lt(minBn)) {
28
- calcVal = '' + min;
29
- }
30
- }
31
- if (typeof max === 'number' || typeof max === 'bigint') {
32
- var maxBn = BigNumber(max);
33
- if (bnVal.gt(maxBn)) {
34
- calcVal = '' + max;
35
- }
36
- }
37
- return calcVal;
38
- };
18
+ import { MIN_INPUT_WIDTH, DECIMAL_POINT_OFFSET, SKELETON_LABEL_WIDTH, SKELETON_LABEL_HEIGHT, SPINNER_STROKE_WIDTH, CSS_VAR_INPUT_WIDTH, DEFAULT_TYPE, DEFAULT_SIZE, DEFAULT_PLACEHOLDER, DEFAULT_PREFIX_CLS, CHAR_MINUS, CHAR_COMMA, CHAR_DOT, isNumericType, stripCommas, stripMinus, formatThousands, calcValueInRange, normalizeValue, truncateFractionDigits, calcGapWidth, parseRawInput, absValue } from './helper';
39
19
  export var InputAmount = function InputAmount(props) {
40
- var value = props.value,
41
- _props$type = props.type,
42
- type = _props$type === void 0 ? 'primary' : _props$type,
43
- maxFractionDigits = props.maxFractionDigits,
44
- children = props.children,
45
- _props$placeholder = props.placeholder,
46
- placeholder = _props$placeholder === void 0 ? '0' : _props$placeholder,
47
- min = props.min,
48
- max = props.max,
49
- _props$size = props.size,
50
- size = _props$size === void 0 ? 'large' : _props$size,
51
- footnote = props.footnote,
52
- footnoteCls = props.footnoteCls,
53
- className = props.className,
54
- wrapperCls = props.wrapperCls,
55
- labelCls = props.labelCls,
56
- _props$prefixCls = props.prefixCls,
57
- prefixCls = _props$prefixCls === void 0 ? 'input-amount' : _props$prefixCls,
58
- messageCls = props.messageCls,
59
- prefixEleCls = props.prefixEleCls,
60
- suffixEleCls = props.suffixEleCls,
61
- invalid = props.invalid,
62
- negative = props.negative,
63
- required = props.required,
64
- loading = props.loading,
65
- success = props.success,
66
- disabled = props.disabled,
67
- readOnly = props.readOnly,
68
- label = props.label,
69
- prefix = props.prefix,
70
- suffix = props.suffix,
71
- currency = props.currency,
72
- message = props.message,
73
- onChange = props.onChange,
74
- _onBlur = props.onBlur,
75
- _onFocus = props.onFocus,
76
- rest = __rest(props, ["value", "type", "maxFractionDigits", "children", "placeholder", "min", "max", "size", "footnote", "footnoteCls", "className", "wrapperCls", "labelCls", "prefixCls", "messageCls", "prefixEleCls", "suffixEleCls", "invalid", "negative", "required", "loading", "success", "disabled", "readOnly", "label", "prefix", "suffix", "currency", "message", "onChange", "onBlur", "onFocus"]);
77
- var classes = classnames("".concat(prefixCls, "-").concat(type));
20
+ var _a, _b;
21
+ var type = (_a = props.type) !== null && _a !== void 0 ? _a : DEFAULT_TYPE;
22
+ var size = type === 'normal' ? (_b = props.size) !== null && _b !== void 0 ? _b : DEFAULT_SIZE : DEFAULT_SIZE;
23
+ var footnote = type === 'normal' ? undefined : props.footnote;
24
+ var footnoteCls = type === 'normal' ? undefined : props.footnoteCls;
25
+ var rawBaseProps = Object.assign({}, props);
26
+ delete rawBaseProps.type;
27
+ delete rawBaseProps.size;
28
+ delete rawBaseProps.footnote;
29
+ delete rawBaseProps.footnoteCls;
30
+ var baseProps = rawBaseProps;
31
+ var value = baseProps.value,
32
+ maxFractionDigits = baseProps.maxFractionDigits,
33
+ _baseProps$placeholde = baseProps.placeholder,
34
+ placeholder = _baseProps$placeholde === void 0 ? DEFAULT_PLACEHOLDER : _baseProps$placeholde,
35
+ min = baseProps.min,
36
+ max = baseProps.max,
37
+ className = baseProps.className,
38
+ wrapperCls = baseProps.wrapperCls,
39
+ labelCls = baseProps.labelCls,
40
+ _baseProps$prefixCls = baseProps.prefixCls,
41
+ prefixCls = _baseProps$prefixCls === void 0 ? DEFAULT_PREFIX_CLS : _baseProps$prefixCls,
42
+ messageCls = baseProps.messageCls,
43
+ prefixEleCls = baseProps.prefixEleCls,
44
+ suffixEleCls = baseProps.suffixEleCls,
45
+ invalid = baseProps.invalid,
46
+ negative = baseProps.negative,
47
+ required = baseProps.required,
48
+ loading = baseProps.loading,
49
+ success = baseProps.success,
50
+ disabled = baseProps.disabled,
51
+ readOnly = baseProps.readOnly,
52
+ label = baseProps.label,
53
+ prefix = baseProps.prefix,
54
+ suffix = baseProps.suffix,
55
+ currency = baseProps.currency,
56
+ message = baseProps.message,
57
+ onChange = baseProps.onChange,
58
+ onBlur = baseProps.onBlur,
59
+ onFocus = baseProps.onFocus,
60
+ rest = __rest(baseProps, ["value", "maxFractionDigits", "placeholder", "min", "max", "className", "wrapperCls", "labelCls", "prefixCls", "messageCls", "prefixEleCls", "suffixEleCls", "invalid", "negative", "required", "loading", "success", "disabled", "readOnly", "label", "prefix", "suffix", "currency", "message", "onChange", "onBlur", "onFocus"]);
61
+ var cls = classnames("".concat(prefixCls, "-").concat(type));
62
+ // ── Refs ──
78
63
  var inputRef = useRef(null);
79
64
  var fakeEleRef = useRef(null);
80
65
  var prefixRef = useRef(null);
81
66
  var suffixRef = useRef(null);
82
67
  var currencyRef = useRef(null);
83
68
  var containerRef = useRef(null);
84
- var inputCaretPositionRef = useRef(0);
69
+ var caretPosRef = useRef(0);
85
70
  var ignoreSelectRef = useRef(false);
86
- var onChangeRef = useRef(onChange);
71
+ var onChangeRef = useLatest(onChange);
72
+ // ── State ──
87
73
  var _useState = useState(null),
88
74
  _useState2 = _slicedToArray(_useState, 2),
89
- _value = _useState2[0],
90
- setValue = _useState2[1];
75
+ innerValue = _useState2[0],
76
+ setInnerValue = _useState2[1];
91
77
  var _useState3 = useState(MIN_INPUT_WIDTH),
92
78
  _useState4 = _slicedToArray(_useState3, 2),
93
- _width = _useState4[0],
94
- setWidth = _useState4[1];
79
+ inputWidth = _useState4[0],
80
+ setInputWidth = _useState4[1];
95
81
  var _useState5 = useState(false),
96
82
  _useState6 = _slicedToArray(_useState5, 2),
97
83
  isMaxWidth = _useState6[0],
@@ -100,137 +86,133 @@ export var InputAmount = function InputAmount(props) {
100
86
  _useState8 = _slicedToArray(_useState7, 2),
101
87
  isFocus = _useState8[0],
102
88
  setIsFocus = _useState8[1];
103
- var isFocusRef = useRef(isFocus);
89
+ var isFocusRef = useLatest(isFocus);
90
+ var isUncontrolled = typeof value === 'undefined';
104
91
  var formattedValue = useMemo(function () {
105
- return numericFormatter('' + (_value == null ? '' : _value), {
106
- thousandSeparator: true,
107
- allowNegative: negative
108
- });
109
- }, [_value, negative]);
110
- var valueRef = useRef({
111
- value: value,
112
- _value: _value,
92
+ return formatThousands(innerValue !== null && innerValue !== void 0 ? innerValue : '', negative);
93
+ }, [innerValue, negative]);
94
+ var stateRef = useLatest({
95
+ innerValue: innerValue,
113
96
  formattedValue: formattedValue,
114
97
  min: min,
115
98
  max: max,
116
99
  negative: negative,
117
100
  maxFractionDigits: maxFractionDigits
118
101
  });
119
- var changeFocus = useCallback(function (focus) {
120
- setIsFocus(focus);
121
- isFocusRef.current = focus;
122
- }, []);
123
- var scrollToEnd = useCallback(function () {
102
+ // ── Helpers ──
103
+ var scrollToEnd = useEventCallback(function () {
124
104
  var sticky = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
125
105
  var _a;
126
106
  var input = inputRef.current;
127
107
  if (!input) return;
128
- var len = (_a = input.value) === null || _a === void 0 ? void 0 : _a.length;
129
- var position = input.scrollLeft;
130
- var shouldToEnd = !sticky;
131
- var start = shouldToEnd ? len : inputCaretPositionRef.current;
132
- input.setSelectionRange(start, start);
133
- input.scrollLeft = shouldToEnd ? input.scrollWidth : position;
108
+ if (sticky) {
109
+ input.setSelectionRange(caretPosRef.current, caretPosRef.current);
110
+ } else {
111
+ var len = (_a = input.value) === null || _a === void 0 ? void 0 : _a.length;
112
+ input.setSelectionRange(len, len);
113
+ input.scrollLeft = input.scrollWidth;
114
+ }
134
115
  input.focus();
135
- }, []);
136
- var calcCaretPos = useCallback(function (val) {
116
+ });
117
+ var calcCaretPos = useEventCallback(function (val) {
137
118
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
138
119
  var currPos = arguments.length > 2 ? arguments[2] : undefined;
139
120
  var _a, _b;
140
- if (inputRef.current) {
141
- var _valueRef$current = valueRef.current,
142
- _value2 = _valueRef$current._value,
143
- _negative = _valueRef$current.negative,
144
- _formattedValue = _valueRef$current.formattedValue;
145
- var formattedNewVal = numericFormatter(val, {
146
- thousandSeparator: true,
147
- allowNegative: _negative
148
- });
149
- var originOffset = val.length - ((_a = _value2 === null || _value2 === void 0 ? void 0 : _value2.length) !== null && _a !== void 0 ? _a : 0);
150
- var position = (_b = currPos !== null && currPos !== void 0 ? currPos : inputRef.current.selectionEnd) !== null && _b !== void 0 ? _b : 0;
151
- var oldPosVal = _formattedValue.slice(0, Math.max(position, 0));
152
- position = oldPosVal.split(',').join('').length;
153
- var posVal = val.slice(0, position + originOffset);
154
- formattedNewVal.split('').reduce(function (acc, _char, ind) {
155
- if (_char === ',') return acc;else acc.push(_char);
156
- if (acc.join('') === posVal) {
157
- position = ind + 1;
158
- return acc;
159
- }
160
- return acc;
161
- }, []);
162
- inputCaretPositionRef.current = position + offset;
121
+ var input = inputRef.current;
122
+ if (!input) return;
123
+ var _stateRef$current = stateRef.current,
124
+ prev = _stateRef$current.innerValue,
125
+ negative = _stateRef$current.negative,
126
+ formattedValue = _stateRef$current.formattedValue;
127
+ var formattedNewVal = formatThousands(val, negative);
128
+ var originOffset = val.length - ((_a = prev === null || prev === void 0 ? void 0 : prev.length) !== null && _a !== void 0 ? _a : 0);
129
+ var position = (_b = currPos !== null && currPos !== void 0 ? currPos : input.selectionEnd) !== null && _b !== void 0 ? _b : 0;
130
+ // Map formatted position back to raw position
131
+ position = stripCommas(formattedValue.slice(0, Math.max(position, 0))).length;
132
+ // Map raw position forward to formatted position
133
+ var posVal = val.slice(0, position + originOffset);
134
+ formattedNewVal.split('').reduce(function (acc, _char, ind) {
135
+ if (_char === CHAR_COMMA) return acc;
136
+ acc.push(_char);
137
+ if (acc.join('') === posVal) position = ind + 1;
138
+ return acc;
139
+ }, []);
140
+ caretPosRef.current = position + offset;
141
+ });
142
+ var commitValue = useEventCallback(function (val, hasDecimalPoint, e) {
143
+ var _a;
144
+ if (isUncontrolled) {
145
+ setInnerValue(val === '' ? null : val);
146
+ calcCaretPos(val, hasDecimalPoint ? DECIMAL_POINT_OFFSET : 0, Math.max(caretPosRef.current, 0));
147
+ ignoreSelectRef.current = true;
163
148
  }
164
- }, []);
165
- var handleChange = useCallback(function (e) {
166
- var _a, _b, _c, _d;
149
+ if (e) (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, e, val);
150
+ });
151
+ // ── Event Handlers ──
152
+ var handleChange = useEventCallback(function (e) {
153
+ var _a;
167
154
  if (disabled || readOnly) return;
168
- var _valueRef$current2 = valueRef.current,
169
- value = _valueRef$current2.value,
170
- _value = _valueRef$current2._value,
171
- formattedValue = _valueRef$current2.formattedValue,
172
- min = _valueRef$current2.min,
173
- max = _valueRef$current2.max,
174
- negative = _valueRef$current2.negative,
175
- maxFractionDigits = _valueRef$current2.maxFractionDigits;
176
- var val = e.target.value;
177
- if (val != null) val = normalizeNumberInput(val).split(',').join('');
178
- var hasDecimalPoint = !!val && val.endsWith('.');
179
- if (hasDecimalPoint) val = val.slice(0, -1);
180
- if (!negative && (val === null || val === void 0 ? void 0 : val.includes('-'))) return;
181
- var isStandaloneMinus = negative && val === '-';
182
- if (!isStandaloneMinus && isNaN(+val)) return;
183
- if (val === _value && !hasDecimalPoint) return;
184
- if (typeof maxFractionDigits === 'number' || typeof maxFractionDigits === 'bigint') {
185
- var _val$split = val.split('.'),
186
- _val$split2 = _slicedToArray(_val$split, 2),
187
- _int = _val$split2[0],
188
- decimal = _val$split2[1];
189
- var maxDecimals = Number(maxFractionDigits);
190
- if (decimal != null && decimal.length > maxDecimals) {
191
- var truncatedDecimals = decimal.slice(0, maxDecimals);
192
- var _formattedValue$split = formattedValue.split('.'),
155
+ var _stateRef$current2 = stateRef.current,
156
+ innerValue = _stateRef$current2.innerValue,
157
+ formattedValue = _stateRef$current2.formattedValue,
158
+ min = _stateRef$current2.min,
159
+ max = _stateRef$current2.max,
160
+ negative = _stateRef$current2.negative,
161
+ maxFractionDigits = _stateRef$current2.maxFractionDigits;
162
+ var parsed = parseRawInput((_a = e.target.value) !== null && _a !== void 0 ? _a : '', negative);
163
+ if (!parsed) return;
164
+ var val = parsed.val;
165
+ var hasDecimalPoint = parsed.hasDecimalPoint,
166
+ isStandaloneMinus = parsed.isStandaloneMinus;
167
+ if (val === innerValue && !hasDecimalPoint) return;
168
+ // Enforce fraction digit limit
169
+ if (isNumericType(maxFractionDigits)) {
170
+ var _truncateFractionDigi = truncateFractionDigits(val, Number(maxFractionDigits)),
171
+ _int = _truncateFractionDigi["int"],
172
+ truncated = _truncateFractionDigi.truncated,
173
+ overflow = _truncateFractionDigi.overflow;
174
+ if (overflow) {
175
+ var _formattedValue$split = formattedValue.split(CHAR_DOT),
193
176
  _formattedValue$split2 = _slicedToArray(_formattedValue$split, 1),
194
177
  oldInt = _formattedValue$split2[0];
195
- if (oldInt.split(',').join('') == _int) return;
196
- val = "".concat(_int, ".").concat(truncatedDecimals);
178
+ if (stripCommas(oldInt) === _int) return;
179
+ val = truncated;
197
180
  }
198
181
  }
199
- if (typeof min === 'number' || typeof min === 'bigint' || typeof max === 'number' || typeof max === 'bigint') {
182
+ // Clamp to min/max range
183
+ if (isNumericType(min) || isNumericType(max)) {
200
184
  val = calcValueInRange(val, min, max);
201
185
  }
186
+ // Normalize the final value
202
187
  if (val !== '') {
203
- if (isStandaloneMinus) {
204
- val = '-';
205
- } else {
206
- var decimals = (_c = (_b = (_a = val.match(/\.(\d+)$/)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0;
207
- var bn = BigNumber(val);
208
- var normalized = bn.toFixed(decimals);
209
- if (negative && val.trim().startsWith('-') && bn.isZero()) {
210
- normalized = normalized.startsWith('-') ? normalized : "-".concat(normalized);
211
- }
212
- val = "".concat(normalized).concat(hasDecimalPoint ? '.' : '').trim();
213
- }
188
+ val = isStandaloneMinus ? CHAR_MINUS : normalizeValue(val, hasDecimalPoint, negative);
214
189
  }
215
- if (typeof value === 'undefined') {
216
- setValue(val === '' ? null : val);
217
- calcCaretPos(val, hasDecimalPoint ? 2 : 0, Math.max(inputCaretPositionRef.current, 0));
218
- ignoreSelectRef.current = true;
219
- } else {
220
- e.preventDefault();
221
- e.stopPropagation();
222
- }
223
- (_d = onChangeRef.current) === null || _d === void 0 ? void 0 : _d.call(onChangeRef, e, val);
224
- }, [disabled, readOnly]);
225
- var handleSelect = useCallback(function () {
190
+ commitValue(val, hasDecimalPoint, e);
191
+ });
192
+ var handleSelect = useEventCallback(function () {
226
193
  var _a;
227
194
  if (ignoreSelectRef.current) {
228
195
  ignoreSelectRef.current = false;
229
196
  return;
230
197
  }
231
198
  var currPos = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.selectionEnd;
232
- if (typeof currPos === 'number') inputCaretPositionRef.current = currPos;
233
- }, []);
199
+ if (typeof currPos === 'number') caretPosRef.current = currPos;
200
+ });
201
+ var handleFocus = useEventCallback(function (e) {
202
+ setIsFocus(true);
203
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
204
+ });
205
+ var handleBlur = useEventCallback(function (e) {
206
+ setIsFocus(false);
207
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
208
+ });
209
+ var handleContainerClick = useEventCallback(function (e) {
210
+ var _a;
211
+ if (e.target instanceof HTMLInputElement) return;
212
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
213
+ if (isMaxWidth) scrollToEnd();
214
+ });
215
+ // ── Layout Effects ──
234
216
  useLayoutEffect(function () {
235
217
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
236
218
  var containerWidth = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : MIN_INPUT_WIDTH;
@@ -238,167 +220,137 @@ export var InputAmount = function InputAmount(props) {
238
220
  var suffixWidth = (_f = (_e = suffixRef.current) === null || _e === void 0 ? void 0 : _e.offsetWidth) !== null && _f !== void 0 ? _f : 0;
239
221
  var currencyWidth = (_h = (_g = currencyRef.current) === null || _g === void 0 ? void 0 : _g.offsetWidth) !== null && _h !== void 0 ? _h : 0;
240
222
  var fakeWidth = (_k = (_j = fakeEleRef.current) === null || _j === void 0 ? void 0 : _j.offsetWidth) !== null && _k !== void 0 ? _k : 0;
241
- var gapWidth = prefixWidth && suffixWidth && currencyWidth ? 24 : prefixWidth && suffixWidth || prefixWidth && currencyWidth || suffixWidth && currencyWidth ? 16 : prefixWidth || suffixWidth || currencyWidth ? 8 : 0;
223
+ var gapWidth = calcGapWidth(!!prefixWidth, !!suffixWidth, !!currencyWidth);
242
224
  var maxWidth = containerWidth - prefixWidth - suffixWidth - currencyWidth - gapWidth;
243
- var isMax = fakeWidth >= maxWidth;
244
- setWidth(Math.min(maxWidth, Math.max(fakeWidth, MIN_INPUT_WIDTH)));
245
- setIsMaxWidth(isMax);
225
+ setInputWidth(Math.min(maxWidth, Math.max(fakeWidth, MIN_INPUT_WIDTH)));
226
+ setIsMaxWidth(fakeWidth >= maxWidth);
246
227
  if (isFocusRef.current) scrollToEnd(true);
247
- }, [_value, prefix, suffix, currency]);
228
+ }, [innerValue, prefix, suffix, currency, loading]);
248
229
  useLayoutEffect(function () {
249
- var _a, _b, _c, _d;
250
- var val = typeof value === 'undefined' ? _value : value;
230
+ var _a;
231
+ var val = isUncontrolled ? innerValue : value;
251
232
  var hasDecimalPoint = false;
252
233
  var isStandaloneMinus = false;
253
234
  if (typeof val === 'string') {
254
235
  if (val === '') {
255
236
  val = null;
256
237
  } else {
257
- val = normalizeNumberInput(val).split(',').join('');
258
- hasDecimalPoint = !!val && val.endsWith('.');
259
- if (hasDecimalPoint) val = val.slice(0, -1);
260
- if (!negative) val = val.replace(/-/g, '');
261
- isStandaloneMinus = !!negative && val === '-';
262
- if (!isStandaloneMinus && isNaN(+val)) return;
263
- }
264
- } else if (val !== null && typeof val !== 'number' && typeof val !== 'bigint') return;
265
- if (!negative) {
266
- if (typeof val === 'number') {
267
- val = Math.abs(val);
268
- } else if (typeof val === 'bigint') {
269
- var zero = BigInt(0);
270
- val = val < zero ? -val : val;
238
+ var parsed = parseRawInput(val, negative);
239
+ if (!parsed) return;
240
+ val = parsed.val;
241
+ hasDecimalPoint = parsed.hasDecimalPoint;
242
+ isStandaloneMinus = parsed.isStandaloneMinus;
243
+ if (!negative) val = stripMinus(val);
271
244
  }
245
+ } else if (val !== null && !isNumericType(val)) return;
246
+ // Ensure non-negative when negative is not allowed
247
+ if (!negative && isNumericType(val)) {
248
+ val = absValue(val);
272
249
  }
273
- if ((typeof val === 'string' || typeof val === 'number') && (typeof maxFractionDigits === 'number' || typeof maxFractionDigits === 'bigint')) {
274
- var _split = ('' + val).split('.'),
275
- _split2 = _slicedToArray(_split, 2),
276
- _int2 = _split2[0],
277
- decimal = _split2[1];
278
- var maxDecimals = Number(maxFractionDigits);
279
- if (decimal != null && decimal.length > maxDecimals) {
280
- var truncatedDecimals = decimal.slice(0, maxDecimals);
281
- val = "".concat(_int2, ".").concat(truncatedDecimals);
282
- if (typeof value === 'undefined') {
283
- setValue(val);
250
+ // Enforce fraction digit limit
251
+ if ((typeof val === 'string' || typeof val === 'number') && isNumericType(maxFractionDigits)) {
252
+ var _truncateFractionDigi2 = truncateFractionDigits("".concat(val), Number(maxFractionDigits)),
253
+ truncated = _truncateFractionDigi2.truncated,
254
+ overflow = _truncateFractionDigi2.overflow;
255
+ if (overflow) {
256
+ if (isUncontrolled) {
257
+ setInnerValue(truncated);
284
258
  } else {
285
- var syntheticEvent = {
259
+ (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, {
286
260
  target: inputRef.current
287
- };
288
- (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, syntheticEvent, val !== null && val !== void 0 ? val : '');
261
+ }, truncated !== null && truncated !== void 0 ? truncated : '');
289
262
  }
290
263
  return;
291
264
  }
292
265
  }
293
- if (typeof val === 'string' || typeof val === 'number' || typeof val === 'bigint') {
294
- val = calcValueInRange('' + val, min, max);
266
+ // Clamp to min/max range
267
+ if (isNumericType(val) || typeof val === 'string') {
268
+ val = calcValueInRange("".concat(val), min, max);
295
269
  }
296
270
  if (val === '' || val == null) {
297
- setValue(null);
271
+ setInnerValue(null);
298
272
  } else {
299
- if (isStandaloneMinus) {
300
- val = '-';
301
- } else {
302
- var strVal = '' + val;
303
- var decimals = (_d = (_c = (_b = strVal.match(/\.(\d+)$/)) === null || _b === void 0 ? void 0 : _b[1]) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0;
304
- var bn = BigNumber(strVal);
305
- var normalized = bn.toFixed(decimals);
306
- if (negative && strVal.trim().startsWith('-') && bn.isZero()) {
307
- normalized = normalized.startsWith('-') ? normalized : "-".concat(normalized);
308
- }
309
- val = "".concat(normalized).concat(hasDecimalPoint ? '.' : '').trim();
310
- }
311
- setValue(val);
273
+ val = isStandaloneMinus ? CHAR_MINUS : normalizeValue("".concat(val), hasDecimalPoint, negative);
274
+ setInnerValue(val);
312
275
  }
313
- calcCaretPos(val !== null && val !== void 0 ? val : '', hasDecimalPoint ? 2 : 0, Math.max(inputCaretPositionRef.current, 0));
276
+ calcCaretPos(val !== null && val !== void 0 ? val : '', hasDecimalPoint ? DECIMAL_POINT_OFFSET : 0, Math.max(caretPosRef.current, 0));
314
277
  ignoreSelectRef.current = true;
315
278
  }, [value, maxFractionDigits, min, max, negative]);
316
- useEffect(function () {
317
- onChangeRef.current = onChange;
318
- valueRef.current = {
319
- value: value,
320
- _value: _value,
321
- formattedValue: formattedValue,
322
- min: min,
323
- max: max,
324
- negative: negative,
325
- maxFractionDigits: maxFractionDigits
326
- };
327
- }, [_value, value, formattedValue, min, max, negative, maxFractionDigits, onChange]);
328
- return _jsxs("div", {
329
- className: classes('wrapper', joinCls(wrapperCls, classes(size), invalid && classes('invalid'), success && classes('success'), disabled && classes('disabled'), readOnly && classes('readonly'), _value && classes('filled'))),
330
- children: [label ? loading ? _jsx(Skeleton, {
331
- width: '72px',
332
- height: '18px',
333
- className: classes('label-loading')
334
- }) : _jsx("span", {
335
- className: classes('label', joinCls(required && classes('label-required'), labelCls)),
279
+ // ── Render ──
280
+ var wrapperClassName = cls('wrapper', joinCls(wrapperCls, cls(size), invalid && cls('invalid'), success && cls('success'), disabled && cls('disabled'), readOnly && cls('readonly'), innerValue && cls('filled')));
281
+ var renderLabel = function renderLabel() {
282
+ if (!label) return null;
283
+ if (loading) {
284
+ return _jsx(Skeleton, {
285
+ width: SKELETON_LABEL_WIDTH,
286
+ height: SKELETON_LABEL_HEIGHT,
287
+ className: cls('label-loading')
288
+ });
289
+ }
290
+ return _jsx("span", {
291
+ className: cls('label', joinCls(required && cls('label-required'), labelCls)),
336
292
  children: label
337
- }) : null, _jsxs("div", {
293
+ });
294
+ };
295
+ var renderSuffix = function renderSuffix() {
296
+ if (loading) return _jsx(Spinner, {
297
+ className: cls('suffix-loading'),
298
+ strokeWidth: SPINNER_STROKE_WIDTH
299
+ });
300
+ if (suffix) return _jsx("span", {
301
+ ref: suffixRef,
302
+ className: cls('suffix', suffixEleCls),
303
+ children: suffix
304
+ });
305
+ return null;
306
+ };
307
+ return _jsxs("div", {
308
+ className: wrapperClassName,
309
+ children: [renderLabel(), _jsxs("div", {
338
310
  ref: containerRef,
339
- className: classes(void 0, joinCls(className, isFocus && classes('focus'))),
340
- onClick: function onClick(e) {
341
- var _a;
342
- if (e.target instanceof HTMLInputElement) return;
343
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
344
- if (isMaxWidth) scrollToEnd();
345
- },
311
+ className: cls(void 0, joinCls(className, isFocus && cls('focus'))),
312
+ onClick: handleContainerClick,
346
313
  children: [prefix && _jsx("span", {
347
314
  ref: prefixRef,
348
- className: classes('prefix', prefixEleCls),
315
+ className: cls('prefix', prefixEleCls),
349
316
  children: prefix
350
317
  }), _jsx("div", {
351
- className: classes('element', !isFocus && isMaxWidth ? classes('element-max') : ''),
318
+ className: cls('element', !isFocus && isMaxWidth ? cls('element-max') : ''),
352
319
  children: _jsx("input", Object.assign({}, rest, {
353
320
  ref: inputRef,
354
321
  value: formattedValue,
355
322
  placeholder: placeholder,
356
323
  readOnly: readOnly,
357
324
  disabled: disabled,
358
- style: {
359
- '--input-width': "".concat(_width, "px")
360
- },
325
+ style: _defineProperty({}, CSS_VAR_INPUT_WIDTH, "".concat(inputWidth, "px")),
361
326
  onChange: handleChange,
362
327
  onSelect: handleSelect,
363
- onFocus: function onFocus(e) {
364
- changeFocus(true);
365
- _onFocus === null || _onFocus === void 0 ? void 0 : _onFocus(e);
366
- },
367
- onBlur: function onBlur(e) {
368
- changeFocus(false);
369
- _onBlur === null || _onBlur === void 0 ? void 0 : _onBlur(e);
370
- }
328
+ onFocus: handleFocus,
329
+ onBlur: handleBlur
371
330
  }))
372
331
  }), currency && _jsx("span", {
373
332
  ref: currencyRef,
374
- className: classes('currency'),
333
+ className: cls('currency'),
375
334
  children: currency
376
- }), loading ? _jsx(Spinner, {
377
- className: classes('suffix-loading'),
378
- strokeWidth: '4'
379
- }) : suffix ? _jsx("span", {
380
- ref: suffixRef,
381
- className: classes('suffix', suffixEleCls),
382
- children: suffix
383
- }) : null, _jsx("span", {
335
+ }), renderSuffix(), _jsx("span", {
384
336
  ref: fakeEleRef,
385
- className: classes('fake'),
337
+ className: cls('fake'),
386
338
  onClick: function onClick(e) {
387
339
  return e.stopPropagation();
388
340
  },
389
341
  children: formattedValue
390
342
  })]
391
343
  }), (message || footnote) && _jsxs("div", {
392
- className: classes('extra'),
344
+ className: cls('extra'),
393
345
  children: [message && _jsx("div", {
394
- className: classes('message', messageCls),
346
+ className: cls('message', messageCls),
395
347
  children: message
396
348
  }), footnote && _jsx("div", {
397
- className: classes('footnote', footnoteCls),
349
+ className: cls('footnote', footnoteCls),
398
350
  children: footnote
399
351
  })]
400
352
  })]
401
353
  });
402
354
  };
403
355
  export default /*#__PURE__*/memo(InputAmount);
404
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvSW5wdXRBbW91bnQvSW5wdXRBbW91bnQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJtZW1vIiwidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlQ2FsbGJhY2siLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJCaWdOdW1iZXIiLCJudW1lcmljRm9ybWF0dGVyIiwiU2tlbGV0b24iLCJTcGlubmVyIiwiZGVmYXVsdCIsImNsYXNzbmFtZXMiLCJqb2luQ2xzIiwiTUlOX0lOUFVUX1dJRFRIIiwibm9ybWFsaXplTnVtYmVySW5wdXQiLCJ2YWwiLCJyZXBsYWNlIiwiY2FsY1ZhbHVlSW5SYW5nZSIsIm1pbiIsIm1heCIsImlzTmFOIiwiY2FsY1ZhbCIsImJuVmFsIiwibWluQm4iLCJsdCIsIm1heEJuIiwiZ3QiLCJJbnB1dEFtb3VudCIsInByb3BzIiwidmFsdWUiLCJfcHJvcHMkdHlwZSIsInR5cGUiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsImNoaWxkcmVuIiwiX3Byb3BzJHBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiLCJfcHJvcHMkc2l6ZSIsInNpemUiLCJmb290bm90ZSIsImZvb3Rub3RlQ2xzIiwiY2xhc3NOYW1lIiwid3JhcHBlckNscyIsImxhYmVsQ2xzIiwiX3Byb3BzJHByZWZpeENscyIsInByZWZpeENscyIsIm1lc3NhZ2VDbHMiLCJwcmVmaXhFbGVDbHMiLCJzdWZmaXhFbGVDbHMiLCJpbnZhbGlkIiwibmVnYXRpdmUiLCJyZXF1aXJlZCIsImxvYWRpbmciLCJzdWNjZXNzIiwiZGlzYWJsZWQiLCJyZWFkT25seSIsImxhYmVsIiwicHJlZml4Iiwic3VmZml4IiwiY3VycmVuY3kiLCJtZXNzYWdlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJvbkZvY3VzIiwicmVzdCIsImNsYXNzZXMiLCJjb25jYXQiLCJpbnB1dFJlZiIsImZha2VFbGVSZWYiLCJwcmVmaXhSZWYiLCJzdWZmaXhSZWYiLCJjdXJyZW5jeVJlZiIsImNvbnRhaW5lclJlZiIsImlucHV0Q2FyZXRQb3NpdGlvblJlZiIsImlnbm9yZVNlbGVjdFJlZiIsIm9uQ2hhbmdlUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiX3ZhbHVlIiwic2V0VmFsdWUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsIl93aWR0aCIsInNldFdpZHRoIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc01heFdpZHRoIiwic2V0SXNNYXhXaWR0aCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNGb2N1cyIsInNldElzRm9jdXMiLCJpc0ZvY3VzUmVmIiwiZm9ybWF0dGVkVmFsdWUiLCJ0aG91c2FuZFNlcGFyYXRvciIsImFsbG93TmVnYXRpdmUiLCJ2YWx1ZVJlZiIsImNoYW5nZUZvY3VzIiwiZm9jdXMiLCJjdXJyZW50Iiwic2Nyb2xsVG9FbmQiLCJzdGlja3kiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfYSIsImlucHV0IiwibGVuIiwicG9zaXRpb24iLCJzY3JvbGxMZWZ0Iiwic2hvdWxkVG9FbmQiLCJzdGFydCIsInNldFNlbGVjdGlvblJhbmdlIiwic2Nyb2xsV2lkdGgiLCJjYWxjQ2FyZXRQb3MiLCJvZmZzZXQiLCJjdXJyUG9zIiwiX2IiLCJfdmFsdWVSZWYkY3VycmVudCIsImZvcm1hdHRlZE5ld1ZhbCIsIm9yaWdpbk9mZnNldCIsInNlbGVjdGlvbkVuZCIsIm9sZFBvc1ZhbCIsInNsaWNlIiwiTWF0aCIsInNwbGl0Iiwiam9pbiIsInBvc1ZhbCIsInJlZHVjZSIsImFjYyIsImNoYXIiLCJpbmQiLCJwdXNoIiwiaGFuZGxlQ2hhbmdlIiwiX2MiLCJfZCIsIl92YWx1ZVJlZiRjdXJyZW50MiIsInRhcmdldCIsImhhc0RlY2ltYWxQb2ludCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJpc1N0YW5kYWxvbmVNaW51cyIsIl92YWwkc3BsaXQiLCJfdmFsJHNwbGl0MiIsImludCIsImRlY2ltYWwiLCJtYXhEZWNpbWFscyIsIk51bWJlciIsInRydW5jYXRlZERlY2ltYWxzIiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0IiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0MiIsIm9sZEludCIsImRlY2ltYWxzIiwibWF0Y2giLCJibiIsIm5vcm1hbGl6ZWQiLCJ0b0ZpeGVkIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJpc1plcm8iLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVNlbGVjdCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsImNvbnRhaW5lcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJwcmVmaXhXaWR0aCIsInN1ZmZpeFdpZHRoIiwiY3VycmVuY3lXaWR0aCIsImZha2VXaWR0aCIsImdhcFdpZHRoIiwibWF4V2lkdGgiLCJpc01heCIsImFicyIsInplcm8iLCJCaWdJbnQiLCJfc3BsaXQiLCJfc3BsaXQyIiwic3ludGhldGljRXZlbnQiLCJzdHJWYWwiLCJ3aWR0aCIsImhlaWdodCIsInJlZiIsIm9uQ2xpY2siLCJIVE1MSW5wdXRFbGVtZW50IiwiYXNzaWduIiwic3R5bGUiLCJvblNlbGVjdCIsInN0cm9rZVdpZHRoIl0sIm1hcHBpbmdzIjoiO0FBQUEsSUFBSUEsTUFBTSxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLE1BQU0sSUFBSyxVQUFVQyxDQUFDLEVBQUVDLENBQUMsRUFBRTtFQUNsRCxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsS0FBSyxJQUFJQyxDQUFDLElBQUlILENBQUMsRUFB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QUFBLEVBQUE7UUFBSzRDLFNBQVMsRUFBRXdCLE9BQU8sQ0FBQyxVQUFVLEVBQUV6QixXQUFXLENBQUM7UUFBQU4sUUFBQSxFQUFHSztNQUFRLENBQUEsQ0FBTztJQUFBLENBQUEsQ0FDM0U7RUFBQSxDQUFBLENBRUo7QUFDUixDQUFDO0FBRUQsNEJBQWV2QyxJQUFJLENBQUM0QixXQUFXLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9JbnB1dEFtb3VudC9JbnB1dEFtb3VudC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBudW1lcmljRm9ybWF0dGVyIH0gZnJvbSAncmVhY3QtbnVtYmVyLWZvcm1hdCc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJ3ByaW1lcmVhY3Qvc2tlbGV0b24nO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi4vU3Bpbm5lcic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMsIGpvaW5DbHMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmNvbnN0IE1JTl9JTlBVVF9XSURUSCA9IDMzO1xuY29uc3Qgbm9ybWFsaXplTnVtYmVySW5wdXQgPSAodmFsKSA9PiB2YWxcbiAgICAucmVwbGFjZSgvW1xcdTMwMDJcXHVmZjBlXFx1ZmY2MV0vZywgJy4nKVxuICAgIC5yZXBsYWNlKC9bXFx1RkYwQ10vZywgJywnKTtcbmNvbnN0IGNhbGNWYWx1ZUluUmFuZ2UgPSAodmFsLCBtaW4sIG1heCkgPT4ge1xuICAgIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PT0gJy0nIHx8IGlzTmFOKCt2YWwpKVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIGxldCBjYWxjVmFsID0gdmFsO1xuICAgIGNvbnN0IGJuVmFsID0gQmlnTnVtYmVyKHZhbCk7XG4gICAgaWYgKHR5cGVvZiBtaW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIGNvbnN0IG1pbkJuID0gQmlnTnVtYmVyKG1pbik7XG4gICAgICAgIGlmIChiblZhbC5sdChtaW5CbikpIHtcbiAgICAgICAgICAgIGNhbGNWYWwgPSAnJyArIG1pbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgY29uc3QgbWF4Qm4gPSBCaWdOdW1iZXIobWF4KTtcbiAgICAgICAgaWYgKGJuVmFsLmd0KG1heEJuKSkge1xuICAgICAgICAgICAgY2FsY1ZhbCA9ICcnICsgbWF4O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYWxjVmFsO1xufTtcbmV4cG9ydCBjb25zdCBJbnB1dEFtb3VudCA9IHByb3BzID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCB0eXBlID0gJ3ByaW1hcnknLCBtYXhGcmFjdGlvbkRpZ2l0cywgY2hpbGRyZW4sIHBsYWNlaG9sZGVyID0gJzAnLCBtaW4sIG1heCwgXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHNpemUgPSAnbGFyZ2UnLCBmb290bm90ZSwgZm9vdG5vdGVDbHMsIGNsYXNzTmFtZSwgd3JhcHBlckNscywgbGFiZWxDbHMsIHByZWZpeENscyA9ICdpbnB1dC1hbW91bnQnLCBtZXNzYWdlQ2xzLCBwcmVmaXhFbGVDbHMsIHN1ZmZpeEVsZUNscywgaW52YWxpZCwgbmVnYXRpdmUsIHJlcXVpcmVkLCBsb2FkaW5nLCBzdWNjZXNzLCBkaXNhYmxlZCwgcmVhZE9ubHksIGxhYmVsLCBwcmVmaXgsIHN1ZmZpeCwgY3VycmVuY3ksIG1lc3NhZ2UsIG9uQ2hhbmdlLCBvbkJsdXIsIG9uRm9jdXMgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJ2YWx1ZVwiLCBcInR5cGVcIiwgXCJtYXhGcmFjdGlvbkRpZ2l0c1wiLCBcImNoaWxkcmVuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJzaXplXCIsIFwiZm9vdG5vdGVcIiwgXCJmb290bm90ZUNsc1wiLCBcImNsYXNzTmFtZVwiLCBcIndyYXBwZXJDbHNcIiwgXCJsYWJlbENsc1wiLCBcInByZWZpeENsc1wiLCBcIm1lc3NhZ2VDbHNcIiwgXCJwcmVmaXhFbGVDbHNcIiwgXCJzdWZmaXhFbGVDbHNcIiwgXCJpbnZhbGlkXCIsIFwibmVnYXRpdmVcIiwgXCJyZXF1aXJlZFwiLCBcImxvYWRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcImxhYmVsXCIsIFwicHJlZml4XCIsIFwic3VmZml4XCIsIFwiY3VycmVuY3lcIiwgXCJtZXNzYWdlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCJdKTtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhgJHtwcmVmaXhDbHN9LSR7dHlwZX1gKTtcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmYWtlRWxlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHByZWZpeFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzdWZmaXhSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY3VycmVuY3lSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGlucHV0Q2FyZXRQb3NpdGlvblJlZiA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBpZ25vcmVTZWxlY3RSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IG9uQ2hhbmdlUmVmID0gdXNlUmVmKG9uQ2hhbmdlKTtcbiAgICBjb25zdCBbX3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbX3dpZHRoLCBzZXRXaWR0aF0gPSB1c2VTdGF0ZShNSU5fSU5QVVRfV0lEVEgpO1xuICAgIGNvbnN0IFtpc01heFdpZHRoLCBzZXRJc01heFdpZHRoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNGb2N1cywgc2V0SXNGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaXNGb2N1c1JlZiA9IHVzZVJlZihpc0ZvY3VzKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gbnVtZXJpY0Zvcm1hdHRlcignJyArIChfdmFsdWUgPT0gbnVsbCA/ICcnIDogX3ZhbHVlKSwge1xuICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiBuZWdhdGl2ZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW192YWx1ZSwgbmVnYXRpdmVdKTtcbiAgICBjb25zdCB2YWx1ZVJlZiA9IHVzZVJlZih7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBfdmFsdWUsXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgbmVnYXRpdmUsXG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzLFxuICAgIH0pO1xuICAgIGNvbnN0IGNoYW5nZUZvY3VzID0gdXNlQ2FsbGJhY2soKGZvY3VzKSA9PiB7XG4gICAgICAgIHNldElzRm9jdXMoZm9jdXMpO1xuICAgICAgICBpc0ZvY3VzUmVmLmN1cnJlbnQgPSBmb2N1cztcbiAgICB9LCBbXSk7XG4gICAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VDYWxsYmFjaygoc3RpY2t5ID0gZmFsc2UpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxlbiA9IChfYSA9IGlucHV0LnZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGlucHV0LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IHNob3VsZFRvRW5kID0gIXN0aWNreTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBzaG91bGRUb0VuZCA/IGxlbiA6IGlucHV0Q2FyZXRQb3NpdGlvblJlZi5jdXJyZW50O1xuICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgc3RhcnQpO1xuICAgICAgICBpbnB1dC5zY3JvbGxMZWZ0ID0gc2hvdWxkVG9FbmQgPyBpbnB1dC5zY3JvbGxXaWR0aCA6IHBvc2l0aW9uO1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBjYWxjQ2FyZXRQb3MgPSB1c2VDYWxsYmFjaygodmFsLCBvZmZzZXQgPSAwLCBjdXJyUG9zKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IF92YWx1ZSwgbmVnYXRpdmUsIGZvcm1hdHRlZFZhbHVlIH0gPSB2YWx1ZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTmV3VmFsID0gbnVtZXJpY0Zvcm1hdHRlcih2YWwsIHtcbiAgICAgICAgICAgICAgICB0aG91c2FuZFNlcGFyYXRvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiBuZWdhdGl2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luT2Zmc2V0ID0gdmFsLmxlbmd0aCAtICgoX2EgPSBfdmFsdWUgPT09IG51bGwgfHwgX3ZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdmFsdWUubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKTtcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IChfYiA9IGN1cnJQb3MgIT09IG51bGwgJiYgY3VyclBvcyAhPT0gdm9pZCAwID8gY3VyclBvcyA6IGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xuICAgICAgICAgICAgY29uc3Qgb2xkUG9zVmFsID0gZm9ybWF0dGVkVmFsdWUuc2xpY2UoMCwgTWF0aC5tYXgocG9zaXRpb24sIDApKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2xkUG9zVmFsLnNwbGl0KCcsJykuam9pbignJykubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcG9zVmFsID0gdmFsLnNsaWNlKDAsIChwb3NpdGlvbiArIG9yaWdpbk9mZnNldCkpO1xuICAgICAgICAgICAgZm9ybWF0dGVkTmV3VmFsLnNwbGl0KCcnKS5yZWR1Y2UoKGFjYywgY2hhciwgaW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcsJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFjYy5wdXNoKGNoYXIpO1xuICAgICAgICAgICAgICAgIGlmIChhY2Muam9pbignJykgPT09IHBvc1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGluZCArIDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICBpbnB1dENhcmV0UG9zaXRpb25SZWYuY3VycmVudCA9IHBvc2l0aW9uICsgb2Zmc2V0O1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgaWYgKGRpc2FibGVkIHx8IHJlYWRPbmx5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBfdmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzIH0gPSB2YWx1ZVJlZi5jdXJyZW50O1xuICAgICAgICBsZXQgdmFsID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgIGlmICh2YWwgIT0gbnVsbClcbiAgICAgICAgICAgIHZhbCA9IG5vcm1hbGl6ZU51bWJlcklucHV0KHZhbCkuc3BsaXQoJywnKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgaGFzRGVjaW1hbFBvaW50ID0gISF2YWwgJiYgdmFsLmVuZHNXaXRoKCcuJyk7XG4gICAgICAgIGlmIChoYXNEZWNpbWFsUG9pbnQpXG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICBpZiAoIW5lZ2F0aXZlICYmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWwuaW5jbHVkZXMoJy0nKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzU3RhbmRhbG9uZU1pbnVzID0gbmVnYXRpdmUgJiYgdmFsID09PSAnLSc7XG4gICAgICAgIGlmICghaXNTdGFuZGFsb25lTWludXMgJiYgaXNOYU4oK3ZhbCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh2YWwgPT09IF92YWx1ZSAmJiAhaGFzRGVjaW1hbFBvaW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIG1heEZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4RnJhY3Rpb25EaWdpdHMgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBbaW50LCBkZWNpbWFsXSA9IHZhbC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgbWF4RGVjaW1hbHMgPSBOdW1iZXIobWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWwgIT0gbnVsbCAmJiBkZWNpbWFsLmxlbmd0aCA+IG1heERlY2ltYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkRGVjaW1hbHMgPSBkZWNpbWFsLnNsaWNlKDAsIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBbb2xkSW50LF0gPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmIChvbGRJbnQuc3BsaXQoJywnKS5qb2luKCcnKSA9PSBpbnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YWwgPSBgJHtpbnR9LiR7dHJ1bmNhdGVkRGVjaW1hbHN9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKHR5cGVvZiBtaW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnKSB8fCAodHlwZW9mIG1heCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCA9PT0gJ2JpZ2ludCcpKSB7XG4gICAgICAgICAgICB2YWwgPSBjYWxjVmFsdWVJblJhbmdlKHZhbCwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFsb25lTWludXMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IChfYyA9IChfYiA9IChfYSA9IHZhbC5tYXRjaCgvXFwuKFxcZCspJC8pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYm4gPSBCaWdOdW1iZXIodmFsKTtcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplZCA9IGJuLnRvRml4ZWQoZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSAmJiB2YWwudHJpbSgpLnN0YXJ0c1dpdGgoJy0nKSAmJiBibi5pc1plcm8oKSkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdGFydHNXaXRoKCctJykgPyBub3JtYWxpemVkIDogYC0ke25vcm1hbGl6ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsID0gYCR7bm9ybWFsaXplZH0ke2hhc0RlY2ltYWxQb2ludCA/ICcuJyA6ICcnfWAudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZSh2YWwgPT09ICcnID8gbnVsbCA6IHZhbCk7XG4gICAgICAgICAgICBjYWxjQ2FyZXRQb3ModmFsLCBoYXNEZWNpbWFsUG9pbnQgPyAyIDogMCwgTWF0aC5tYXgoaW5wdXRDYXJldFBvc2l0aW9uUmVmLmN1cnJlbnQsIDApKTtcbiAgICAgICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgKF9kID0gb25DaGFuZ2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmNhbGwob25DaGFuZ2VSZWYsIGUsIHZhbCk7XG4gICAgfSwgW2Rpc2FibGVkLCByZWFkT25seV0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaWdub3JlU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclBvcyA9IChfYSA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIGlmICh0eXBlb2YgY3VyclBvcyA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICBpbnB1dENhcmV0UG9zaXRpb25SZWYuY3VycmVudCA9IGN1cnJQb3M7XG4gICAgfSwgW10pO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaztcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSAoX2IgPSAoX2EgPSBjb250YWluZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBNSU5fSU5QVVRfV0lEVEg7XG4gICAgICAgIGNvbnN0IHByZWZpeFdpZHRoID0gKF9kID0gKF9jID0gcHJlZml4UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMDtcbiAgICAgICAgY29uc3Qgc3VmZml4V2lkdGggPSAoX2YgPSAoX2UgPSBzdWZmaXhSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAwO1xuICAgICAgICBjb25zdCBjdXJyZW5jeVdpZHRoID0gKF9oID0gKF9nID0gY3VycmVuY3lSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAwO1xuICAgICAgICBjb25zdCBmYWtlV2lkdGggPSAoX2sgPSAoX2ogPSBmYWtlRWxlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogMDtcbiAgICAgICAgY29uc3QgZ2FwV2lkdGggPSBwcmVmaXhXaWR0aCAmJiBzdWZmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoXG4gICAgICAgICAgICA/IDI0XG4gICAgICAgICAgICA6IChwcmVmaXhXaWR0aCAmJiBzdWZmaXhXaWR0aCkgfHwgKHByZWZpeFdpZHRoICYmIGN1cnJlbmN5V2lkdGgpIHx8IChzdWZmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoKVxuICAgICAgICAgICAgICAgID8gMTZcbiAgICAgICAgICAgICAgICA6IHByZWZpeFdpZHRoIHx8IHN1ZmZpeFdpZHRoIHx8IGN1cnJlbmN5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBjb250YWluZXJXaWR0aCAtIHByZWZpeFdpZHRoIC0gc3VmZml4V2lkdGggLSBjdXJyZW5jeVdpZHRoIC0gZ2FwV2lkdGg7XG4gICAgICAgIGNvbnN0IGlzTWF4ID0gZmFrZVdpZHRoID49IG1heFdpZHRoO1xuICAgICAgICBzZXRXaWR0aChNYXRoLm1pbihtYXhXaWR0aCwgTWF0aC5tYXgoZmFrZVdpZHRoLCBNSU5fSU5QVVRfV0lEVEgpKSk7XG4gICAgICAgIHNldElzTWF4V2lkdGgoaXNNYXgpO1xuICAgICAgICBpZiAoaXNGb2N1c1JlZi5jdXJyZW50KVxuICAgICAgICAgICAgc2Nyb2xsVG9FbmQodHJ1ZSk7XG4gICAgfSwgW192YWx1ZSwgcHJlZml4LCBzdWZmaXgsIGN1cnJlbmN5XSk7XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBsZXQgdmFsID0gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/IF92YWx1ZSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGFzRGVjaW1hbFBvaW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBpc1N0YW5kYWxvbmVNaW51cyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbCA9IG5vcm1hbGl6ZU51bWJlcklucHV0KHZhbCkuc3BsaXQoJywnKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBoYXNEZWNpbWFsUG9pbnQgPSAhIXZhbCAmJiB2YWwuZW5kc1dpdGgoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRGVjaW1hbFBvaW50KVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgIGlmICghbmVnYXRpdmUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8tL2csICcnKTtcbiAgICAgICAgICAgICAgICBpc1N0YW5kYWxvbmVNaW51cyA9ICEhbmVnYXRpdmUgJiYgdmFsID09PSAnLSc7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVNaW51cyAmJiBpc05hTigrdmFsKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsICE9PSAnYmlnaW50JylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFuZWdhdGl2ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gTWF0aC5hYnModmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgemVybyA9IEJpZ0ludCgwKTtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwgPCB6ZXJvID8gLXZhbCA6IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiBtYXhGcmFjdGlvbkRpZ2l0cyA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heEZyYWN0aW9uRGlnaXRzID09PSAnYmlnaW50JykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtpbnQsIGRlY2ltYWxdID0gKCcnICsgdmFsKS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgbWF4RGVjaW1hbHMgPSBOdW1iZXIobWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWwgIT0gbnVsbCAmJiBkZWNpbWFsLmxlbmd0aCA+IG1heERlY2ltYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkRGVjaW1hbHMgPSBkZWNpbWFsLnNsaWNlKDAsIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICB2YWwgPSBgJHtpbnR9LiR7dHJ1bmNhdGVkRGVjaW1hbHN9YDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ludGhldGljRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IG9uQ2hhbmdlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9uQ2hhbmdlUmVmLCBzeW50aGV0aWNFdmVudCwgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdm9pZCAwID8gdmFsIDogJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICB2YWwgPSBjYWxjVmFsdWVJblJhbmdlKCcnICsgdmFsLCBtaW4sIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09IG51bGwpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzU3RhbmRhbG9uZU1pbnVzKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyVmFsID0gJycgKyB2YWw7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoX2QgPSAoX2MgPSAoX2IgPSBzdHJWYWwubWF0Y2goL1xcLihcXGQrKSQvKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzFdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJuID0gQmlnTnVtYmVyKHN0clZhbCk7XG4gICAgICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBibi50b0ZpeGVkKGRlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUgJiYgc3RyVmFsLnRyaW0oKS5zdGFydHNXaXRoKCctJykgJiYgYm4uaXNaZXJvKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLScpID8gbm9ybWFsaXplZCA6IGAtJHtub3JtYWxpemVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbCA9IGAke25vcm1hbGl6ZWR9JHtoYXNEZWNpbWFsUG9pbnQgPyAnLicgOiAnJ31gLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsY0NhcmV0UG9zKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHZvaWQgMCA/IHZhbCA6ICcnLCBoYXNEZWNpbWFsUG9pbnQgPyAyIDogMCwgTWF0aC5tYXgoaW5wdXRDYXJldFBvc2l0aW9uUmVmLmN1cnJlbnQsIDApKTtcbiAgICAgICAgaWdub3JlU2VsZWN0UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH0sIFt2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMsIG1pbiwgbWF4LCBuZWdhdGl2ZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlUmVmLmN1cnJlbnQgPSBvbkNoYW5nZTtcbiAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgX3ZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBuZWdhdGl2ZSxcbiAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzXG4gICAgICAgIH07XG4gICAgfSwgW192YWx1ZSwgdmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzLCBvbkNoYW5nZV0pO1xuICAgIHJldHVybiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygnd3JhcHBlcicsIGpvaW5DbHMod3JhcHBlckNscywgY2xhc3NlcyhzaXplKSwgaW52YWxpZCAmJiBjbGFzc2VzKCdpbnZhbGlkJyksIHN1Y2Nlc3MgJiYgY2xhc3Nlcygnc3VjY2VzcycpLCBkaXNhYmxlZCAmJiBjbGFzc2VzKCdkaXNhYmxlZCcpLCByZWFkT25seSAmJiBjbGFzc2VzKCdyZWFkb25seScpLCBfdmFsdWUgJiYgY2xhc3NlcygnZmlsbGVkJykpKSwgY2hpbGRyZW46IFtsYWJlbFxuICAgICAgICAgICAgICAgID8gbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICA/IF9qc3goU2tlbGV0b24sIHsgd2lkdGg6ICc3MnB4JywgaGVpZ2h0OiAnMThweCcsIGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtbG9hZGluZycpIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJywgam9pbkNscyhyZXF1aXJlZCAmJiBjbGFzc2VzKCdsYWJlbC1yZXF1aXJlZCcpLCBsYWJlbENscykpLCBjaGlsZHJlbjogbGFiZWwgfSlcbiAgICAgICAgICAgICAgICA6IG51bGwsIF9qc3hzKFwiZGl2XCIsIHsgcmVmOiBjb250YWluZXJSZWYsIGNsYXNzTmFtZTogY2xhc3Nlcyh2b2lkIDAsIGpvaW5DbHMoY2xhc3NOYW1lLCBpc0ZvY3VzICYmIGNsYXNzZXMoJ2ZvY3VzJykpKSwgb25DbGljazogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF4V2lkdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb0VuZCgpO1xuICAgICAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBbcHJlZml4ICYmIF9qc3goXCJzcGFuXCIsIHsgcmVmOiBwcmVmaXhSZWYsIGNsYXNzTmFtZTogY2xhc3NlcygncHJlZml4JywgcHJlZml4RWxlQ2xzKSwgY2hpbGRyZW46IHByZWZpeCB9KSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZWxlbWVudCcsICghaXNGb2N1cyAmJiBpc01heFdpZHRoKSA/IGNsYXNzZXMoJ2VsZW1lbnQtbWF4JykgOiAnJyksIGNoaWxkcmVuOiBfanN4KFwiaW5wdXRcIiwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyByZWY6IGlucHV0UmVmLCB2YWx1ZTogZm9ybWF0dGVkVmFsdWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgcmVhZE9ubHk6IHJlYWRPbmx5LCBkaXNhYmxlZDogZGlzYWJsZWQsIHN0eWxlOiB7ICctLWlucHV0LXdpZHRoJzogYCR7X3dpZHRofXB4YCB9LCBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBvblNlbGVjdDogaGFuZGxlU2VsZWN0LCBvbkZvY3VzOiBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkJsdXI6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGb2N1cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0pKSB9KSwgY3VycmVuY3kgJiYgX2pzeChcInNwYW5cIiwgeyByZWY6IGN1cnJlbmN5UmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2N1cnJlbmN5JyksIGNoaWxkcmVuOiBjdXJyZW5jeSB9KSwgbG9hZGluZyA/IF9qc3goU3Bpbm5lciwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3N1ZmZpeC1sb2FkaW5nJyksIHN0cm9rZVdpZHRoOiAnNCcgfSkgOiBzdWZmaXggPyBfanN4KFwic3BhblwiLCB7IHJlZjogc3VmZml4UmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ3N1ZmZpeCcsIHN1ZmZpeEVsZUNscyksIGNoaWxkcmVuOiBzdWZmaXggfSkgOiBudWxsLCBfanN4KFwic3BhblwiLCB7IHJlZjogZmFrZUVsZVJlZiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdmYWtlJyksIG9uQ2xpY2s6IGUgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSwgY2hpbGRyZW46IGZvcm1hdHRlZFZhbHVlIH0pXSB9KSwgKG1lc3NhZ2UgfHwgZm9vdG5vdGUpICYmIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdleHRyYScpLCBjaGlsZHJlbjogW21lc3NhZ2UgJiYgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbWVzc2FnZScsIG1lc3NhZ2VDbHMpLCBjaGlsZHJlbjogbWVzc2FnZSB9KSwgZm9vdG5vdGUgJiYgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZm9vdG5vdGUnLCBmb290bm90ZUNscyksIGNoaWxkcmVuOiBmb290bm90ZSB9KV0gfSldIH0pO1xufTtcbmV4cG9ydCBkZWZhdWx0IG1lbW8oSW5wdXRBbW91bnQpOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
356
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvSW5wdXRBbW91bnQvSW5wdXRBbW91bnQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LnRzeCJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJtZW1vIiwidXNlTWVtbyIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlTGF5b3V0RWZmZWN0IiwiU2tlbGV0b24iLCJTcGlubmVyIiwidXNlTGF0ZXN0IiwidXNlRXZlbnRDYWxsYmFjayIsImRlZmF1bHQiLCJjbGFzc25hbWVzIiwiam9pbkNscyIsIk1JTl9JTlBVVF9XSURUSCIsIkRFQ0lNQUxfUE9JTlRfT0ZGU0VUIiwiU0tFTEVUT05fTEFCRUxfV0lEVEgiLCJTS0VMRVRPTl9MQUJFTF9IRUlHSFQiLCJTUElOTkVSX1NUUk9LRV9XSURUSCIsIkNTU19WQVJfSU5QVVRfV0lEVEgiLCJERUZBVUxUX1RZUEUiLCJERUZBVUxUX1NJWkUiLCJERUZBVUxUX1BMQUNFSE9MREVSIiwiREVGQVVMVF9QUkVGSVhfQ0xTIiwiQ0hBUl9NSU5VUyIsIkNIQVJfQ09NTUEiLCJDSEFSX0RPVCIsImlzTnVtZXJpY1R5cGUiLCJzdHJpcENvbW1hcyIsInN0cmlwTWludXMiLCJmb3JtYXRUaG91c2FuZHMiLCJjYWxjVmFsdWVJblJhbmdlIiwibm9ybWFsaXplVmFsdWUiLCJ0cnVuY2F0ZUZyYWN0aW9uRGlnaXRzIiwiY2FsY0dhcFdpZHRoIiwicGFyc2VSYXdJbnB1dCIsImFic1ZhbHVlIiwiSW5wdXRBbW91bnQiLCJwcm9wcyIsIl9hIiwiX2IiLCJ0eXBlIiwic2l6ZSIsImZvb3Rub3RlIiwidW5kZWZpbmVkIiwiZm9vdG5vdGVDbHMiLCJyYXdCYXNlUHJvcHMiLCJhc3NpZ24iLCJiYXNlUHJvcHMiLCJ2YWx1ZSIsIm1heEZyYWN0aW9uRGlnaXRzIiwiX2Jhc2VQcm9wcyRwbGFjZWhvbGRlIiwicGxhY2Vob2xkZXIiLCJtaW4iLCJtYXgiLCJjbGFzc05hbWUiLCJ3cmFwcGVyQ2xzIiwibGFiZWxDbHMiLCJfYmFzZVByb3BzJHByZWZpeENscyIsInByZWZpeENscyIsIm1lc3NhZ2VDbHMiLCJwcmVmaXhFbGVDbHMiLCJzdWZmaXhFbGVDbHMiLCJpbnZhbGlkIiwibmVnYXRpdmUiLCJyZXF1aXJlZCIsImxvYWRpbmciLCJzdWNjZXNzIiwiZGlzYWJsZWQiLCJyZWFkT25seSIsImxhYmVsIiwicHJlZml4Iiwic3VmZml4IiwiY3VycmVuY3kiLCJtZXNzYWdlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJvbkZvY3VzIiwicmVzdCIsImNscyIsImNvbmNhdCIsImlucHV0UmVmIiwiZmFrZUVsZVJlZiIsInByZWZpeFJlZiIsInN1ZmZpeFJlZiIsImN1cnJlbmN5UmVmIiwiY29udGFpbmVyUmVmIiwiY2FyZXRQb3NSZWYiLCJpZ25vcmVTZWxlY3RSZWYiLCJvbkNoYW5nZVJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlubmVyVmFsdWUiLCJzZXRJbm5lclZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpbnB1dFdpZHRoIiwic2V0SW5wdXRXaWR0aCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNNYXhXaWR0aCIsInNldElzTWF4V2lkdGgiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRm9jdXMiLCJzZXRJc0ZvY3VzIiwiaXNGb2N1c1JlZiIsImlzVW5jb250cm9sbGVkIiwiZm9ybWF0dGVkVmFsdWUiLCJzdGF0ZVJlZiIsInNjcm9sbFRvRW5kIiwic3RpY2t5IiwiYXJndW1lbnRzIiwiaW5wdXQiLCJjdXJyZW50Iiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJsZW4iLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsV2lkdGgiLCJmb2N1cyIsImNhbGNDYXJldFBvcyIsInZhbCIsIm9mZnNldCIsImN1cnJQb3MiLCJfc3RhdGVSZWYkY3VycmVudCIsInByZXYiLCJmb3JtYXR0ZWROZXdWYWwiLCJvcmlnaW5PZmZzZXQiLCJwb3NpdGlvbiIsInNlbGVjdGlvbkVuZCIsInNsaWNlIiwiTWF0aCIsInBvc1ZhbCIsInNwbGl0IiwicmVkdWNlIiwiYWNjIiwiY2hhciIsImluZCIsInB1c2giLCJqb2luIiwiY29tbWl0VmFsdWUiLCJoYXNEZWNpbWFsUG9pbnQiLCJoYW5kbGVDaGFuZ2UiLCJfc3RhdGVSZWYkY3VycmVudDIiLCJwYXJzZWQiLCJ0YXJnZXQiLCJpc1N0YW5kYWxvbmVNaW51cyIsIl90cnVuY2F0ZUZyYWN0aW9uRGlnaSIsIk51bWJlciIsImludCIsInRydW5jYXRlZCIsIm92ZXJmbG93IiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0IiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0MiIsIm9sZEludCIsImhhbmRsZVNlbGVjdCIsImhhbmRsZUZvY3VzIiwiaGFuZGxlQmx1ciIsImhhbmRsZUNvbnRhaW5lckNsaWNrIiwiSFRNTElucHV0RWxlbWVudCIsIl9jIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJjb250YWluZXJXaWR0aCIsIm9mZnNldFdpZHRoIiwicHJlZml4V2lkdGgiLCJzdWZmaXhXaWR0aCIsImN1cnJlbmN5V2lkdGgiLCJmYWtlV2lkdGgiLCJnYXBXaWR0aCIsIm1heFdpZHRoIiwiX3RydW5jYXRlRnJhY3Rpb25EaWdpMiIsIndyYXBwZXJDbGFzc05hbWUiLCJyZW5kZXJMYWJlbCIsIndpZHRoIiwiaGVpZ2h0IiwiY2hpbGRyZW4iLCJyZW5kZXJTdWZmaXgiLCJzdHJva2VXaWR0aCIsInJlZiIsIm9uQ2xpY2siLCJzdHlsZSIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9uU2VsZWN0Iiwic3RvcFByb3BhZ2F0aW9uIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUlBLE1BQU0sR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxNQUFNLElBQUssVUFBVUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUU7RUFDbEQsSUFBSUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUNWLEtBQUssSUFBSUMsQ0FBQyxJQUFJSCxDQUFDLEVBQUUsSUFBSUksTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDUCxDQUFDLEVBQUVHLENBQUMsQ0FBQyxJQUFJRixDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUMvRUQsQ0FBQyxDQUFDQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDRyxDQUFDLENBQUM7RUFDZixJQUFJSCxDQUFDLElBQUksSUFBSSxJQUFJLE9BQU9JLE1BQU0sQ0FBQ0sscUJBQXFCLEtBQUssVUFBVSxFQUMvRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFDLEVBQUVQLENBQUMsR0FBR0MsTUFBTSxDQUFDSyxxQkFBcUIsQ0FBQ1QsQ0FBQyxDQUFDLEVBQUVVLENBQUMsR0FBR1AsQ0FBQyxDQUFDUSxNQUFNLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ3BFLElBQUlULENBQUMsQ0FBQ08sT0FBTyxDQUFDTCxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNDLFNBQVMsQ0FBQ08sb0JBQW9CLENBQUNMLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDLEVBQzFFUixDQUFDLENBQUNDLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUMsR0FBR1YsQ0FBQyxDQUFDRyxDQUFDLENBQUNPLENBQUMsQ0FBQyxDQUFDO0VBQ3pCO0VBQ0osT0FBT1IsQ0FBQztBQUNaLENBQUM7QUFDRCxTQUFTVyxHQUFHLElBQUlDLElBQUksRUFBRUMsSUFBSSxJQUFJQyxLQUFLLFFBQVEsbUJBQW1CO0FDWDlELFNBQVNDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsZUFBZSxRQUFRLE9BQU87QUFDeEUsU0FBU0MsUUFBUSxRQUFRLHFCQUFxQjtBQUM5QyxPQUFPQyxPQUFPLE1BQU0sWUFBWTtBQUNoQyxPQUFPQyxTQUFTLE1BQU0sY0FBYztBQUNwQyxPQUFPQyxnQkFBZ0IsTUFBTSxxQkFBcUI7QUFDbEQsU0FBU0MsT0FBTyxJQUFJQyxVQUFVLEVBQUVDLE9BQU8sUUFBUSx3QkFBd0I7QUFDdkUsU0FDRUMsZUFBZSxFQUNmQyxvQkFBb0IsRUFDcEJDLG9CQUFvQixFQUNwQkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLG1CQUFtQixFQUNuQkMsWUFBWSxFQUNaQyxZQUFZLEVBQ1pDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxVQUFVLEVBQ1ZDLFVBQVUsRUFDVkMsUUFBUSxFQUNSQyxhQUFhLEVBQ2JDLFdBQVcsRUFDWEMsVUFBVSxFQUNWQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsY0FBYyxFQUNkQyxzQkFBc0IsRUFDdEJDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxRQUFRLFFBQ0gsVUFBVTtBQUtqQixPQUFPLElBQU1DLFdBQVcsR0FBNEMsU0FBdkRBLFdBQVdBLENBQTRDQyxLQUFLLEVBQUc7RURmeEUsSUFBSUMsRUFBRSxFQUFFQyxFQUFFO0VDZ0JaLElBQU1DLElBQUksR0FBRyxDQUFBRixFQUFBLEdBQUFELEtBQUssQ0FBQ0csSUFBSSxNQUFBLElBQUEsSUFBQUYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUluQixZQUFZO0VBQ3ZDLElBQU1zQixJQUFJLEdBQUdELElBQUksS0FBSyxRQUFRLEdBQzFCLENBQUFELEVBQUEsR0FBQ0YsS0FBZ0MsQ0FBQ0ksSUFBSSxNQUFBLElBQUEsSUFBQUYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUluQixZQUFZLEdBQ3REQSxZQUFZO0VBQ2hCLElBQU1zQixRQUFRLEdBQUdGLElBQUksS0FBSyxRQUFRLEdBQUdHLFNBQVMsR0FBSU4sS0FBaUMsQ0FBQ0ssUUFBUTtFQUM1RixJQUFNRSxXQUFXLEdBQUdKLElBQUksS0FBSyxRQUFRLEdBQUdHLFNBQVMsR0FBSU4sS0FBaUMsQ0FBQ08sV0FBVztFQUVsRyxJQUFNQyxZQUFZLEdBQUd6RCxNQUFBLENBQUEwRCxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQUtULEtBQUssQ0FLOUI7RUFDRCxPQUFPUSxZQUFZLENBQUNMLElBQUk7RUFDeEIsT0FBT0ssWUFBWSxDQUFDSixJQUFJO0VBQ3hCLE9BQU9JLFlBQVksQ0FBQ0gsUUFBUTtFQUM1QixPQUFPRyxZQUFZLENBQUNELFdBQVc7RUFDL0IsSUFBTUcsU0FBUyxHQUFHRixZQUFvQztFQUV0RCxJQUNFRyxLQUFLLEdBU0hELFNBQVMsQ0FUWEMsS0FBSztJQUNMQyxpQkFBaUIsR0FRZkYsU0FBUyxDQVJYRSxpQkFBaUI7SUFBQUMscUJBQUEsR0FRZkgsU0FBUyxDQVBYSSxXQUFXO0lBQVhBLFdBQVcsR0FBQUQscUJBQUEsY0FBRzdCLG1CQUFtQixHQUFBNkIscUJBQUE7SUFDakNFLEdBQUcsR0FNREwsU0FBUyxDQU5YSyxHQUFHO0lBQUVDLEdBQUcsR0FNTk4sU0FBUyxDQU5OTSxHQUFHO0lBQ1JDLFNBQVMsR0FLUFAsU0FBUyxDQUxYTyxTQUFTO0lBQUVDLFVBQVUsR0FLbkJSLFNBQVMsQ0FMQVEsVUFBVTtJQUFFQyxRQUFRLEdBSzdCVCxTQUFTLENBTFlTLFFBQVE7SUFBQUMsb0JBQUEsR0FLN0JWLFNBQVMsQ0FMc0JXLFNBQVM7SUFBVEEsU0FBUyxHQUFBRCxvQkFBQSxjQUFHbkMsa0JBQWtCLEdBQUFtQyxvQkFBQTtJQUFFRSxVQUFVLEdBS3pFWixTQUFTLENBTHNEWSxVQUFVO0lBQUVDLFlBQVksR0FLdkZiLFNBQVMsQ0FMa0VhLFlBQVk7SUFBRUMsWUFBWSxHQUtyR2QsU0FBUyxDQUxnRmMsWUFBWTtJQUN2R0MsT0FBTyxHQUlMZixTQUFTLENBSlhlLE9BQU87SUFBRUMsUUFBUSxHQUlmaEIsU0FBUyxDQUpGZ0IsUUFBUTtJQUFFQyxRQUFRLEdBSXpCakIsU0FBUyxDQUpRaUIsUUFBUTtJQUFFQyxPQUFPLEdBSWxDbEIsU0FBUyxDQUprQmtCLE9BQU87SUFBRUMsT0FBTyxHQUkzQ25CLFNBQVMsQ0FKMkJtQixPQUFPO0lBQUVDLFFBQVEsR0FJckRwQixTQUFTLENBSm9Db0IsUUFBUTtJQUFFQyxRQUFRLEdBSS9EckIsU0FBUyxDQUo4Q3FCLFFBQVE7SUFDakVDLEtBQUssR0FHSHRCLFNBQVMsQ0FIWHNCLEtBQUs7SUFBRUMsTUFBTSxHQUdYdkIsU0FBUyxDQUhKdUIsTUFBTTtJQUFFQyxNQUFNLEdBR25CeEIsU0FBUyxDQUhJd0IsTUFBTTtJQUFFQyxRQUFRLEdBRzdCekIsU0FBUyxDQUhZeUIsUUFBUTtJQUFFQyxPQUFPLEdBR3RDMUIsU0FBUyxDQUhzQjBCLE9BQU87SUFDeENDLFFBQVEsR0FFTjNCLFNBQVMsQ0FGWDJCLFFBQVE7SUFBRUMsTUFBTSxHQUVkNUIsU0FBUyxDQUZENEIsTUFBTTtJQUFFQyxPQUFPLEdBRXZCN0IsU0FBUyxDQUZPNkIsT0FBTztJQUN0QkMsSUFBSSxHQUFBOUYsTUFBQSxDQUNMZ0UsU0FBUyxFQVZQLENBQUEsT0FBQSxFQUFBLG1CQUFBLEVBQUEsYUFBQSxFQUFBLEtBQUEsRUFBQSxLQUFBLEVBQUEsV0FBQSxFQUFBLFlBQUEsRUFBQSxVQUFBLEVBQUEsV0FBQSxFQUFBLFlBQUEsRUFBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLEVBQUEsVUFBQSxFQUFBLFNBQUEsRUFBQSxTQUFBLEVBQUEsVUFBQSxFQUFBLFVBQUEsRUFBQSxPQUFBLEVBQUEsUUFBQSxFQUFBLFFBQUEsRUFBQSxVQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsRUFBQSxRQUFBLEVBQUEsU0FBQSxDQVVMLENBQVk7RUFFYixJQUFNK0IsR0FBRyxHQUFHbkUsVUFBVSxJQUFBb0UsTUFBQSxDQUFJckIsU0FBUyxPQUFBcUIsTUFBQSxDQUFJdkMsSUFBSSxDQUFFLENBQUM7RUFFOUM7RUFDQSxJQUFNd0MsUUFBUSxHQUFHNUUsTUFBTSxDQUFtQixJQUFJLENBQUM7RUFDL0MsSUFBTTZFLFVBQVUsR0FBRzdFLE1BQU0sQ0FBa0IsSUFBSSxDQUFDO0VBQ2hELElBQU04RSxTQUFTLEdBQUc5RSxNQUFNLENBQWtCLElBQUksQ0FBQztFQUMvQyxJQUFNK0UsU0FBUyxHQUFHL0UsTUFBTSxDQUFrQixJQUFJLENBQUM7RUFDL0MsSUFBTWdGLFdBQVcsR0FBR2hGLE1BQU0sQ0FBa0IsSUFBSSxDQUFDO0VBQ2pELElBQU1pRixZQUFZLEdBQUdqRixNQUFNLENBQWlCLElBQUksQ0FBQztFQUNqRCxJQUFNa0YsV0FBVyxHQUFHbEYsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUM3QixJQUFNbUYsZUFBZSxHQUFHbkYsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFNb0YsV0FBVyxHQUFHaEYsU0FBUyxDQUFDa0UsUUFBUSxDQUFDO0VBRXZDO0VBQ0EsSUFBQWUsU0FBQSxHQUFvQ3RGLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDO0lBQUF1RixVQUFBLEdBQUFDLGNBQUEsQ0FBQUYsU0FBQTtJQUExREcsVUFBVSxHQUFBRixVQUFBO0lBQUVHLGFBQWEsR0FBQUgsVUFBQTtFQUNoQyxJQUFBSSxVQUFBLEdBQW9DM0YsUUFBUSxDQUFDVSxlQUFlLENBQUM7SUFBQWtGLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBQXRERSxVQUFVLEdBQUFELFVBQUE7SUFBRUUsYUFBYSxHQUFBRixVQUFBO0VBQ2hDLElBQUFHLFVBQUEsR0FBb0MvRixRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFnRyxVQUFBLEdBQUFSLGNBQUEsQ0FBQU8sVUFBQTtJQUE1Q0UsVUFBVSxHQUFBRCxVQUFBO0lBQUVFLGFBQWEsR0FBQUYsVUFBQTtFQUNoQyxJQUFBRyxVQUFBLEdBQThCbkcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBb0csVUFBQSxHQUFBWixjQUFBLENBQUFXLFVBQUE7SUFBdENFLE9BQU8sR0FBQUQsVUFBQTtJQUFFRSxVQUFVLEdBQUFGLFVBQUE7RUFDMUIsSUFBTUcsVUFBVSxHQUFHbEcsU0FBUyxDQUFDZ0csT0FBTyxDQUFDO0VBRXJDLElBQU1HLGNBQWMsR0FBRyxPQUFPM0QsS0FBSyxLQUFLLFdBQVc7RUFFbkQsSUFBTTRELGNBQWMsR0FBRzFHLE9BQU8sQ0FDNUI7SUFBQSxPQUFNMkIsZUFBZSxDQUFDK0QsVUFBVSxLQUFBLElBQUEsSUFBVkEsVUFBVSxLQUFBLEtBQUEsQ0FBQSxHQUFWQSxVQUFVLEdBQUksRUFBRSxFQUFFN0IsUUFBUSxDQUFDO0VBQUEsR0FDakQsQ0FBQzZCLFVBQVUsRUFBRTdCLFFBQVEsQ0FBQyxDQUN2QjtFQUVELElBQU04QyxRQUFRLEdBQUdyRyxTQUFTLENBQUM7SUFDekJvRixVQUFVLEVBQVZBLFVBQVU7SUFBRWdCLGNBQWMsRUFBZEEsY0FBYztJQUMxQnhELEdBQUcsRUFBSEEsR0FBRztJQUFFQyxHQUFHLEVBQUhBLEdBQUc7SUFBRVUsUUFBUSxFQUFSQSxRQUFRO0lBQUVkLGlCQUFpQixFQUFqQkE7RUR4Q3BCLENDeUNELENBQUM7RUFFRjtFQUNBLElBQU02RCxXQUFXLEdBQUdyRyxnQkFBZ0IsQ0FBQyxZQUFtQjtJQUFBLElBQWxCc0csTUFBTSxHQUFBQyxTQUFBLENBQUFySCxNQUFBLFFBQUFxSCxTQUFBLFFBQUFyRSxTQUFBLEdBQUFxRSxTQUFBLE1BQUcsS0FBSztJRHpDOUMsSUFBSTFFLEVBQUU7SUMwQ1YsSUFBTTJFLEtBQUssR0FBR2pDLFFBQVEsQ0FBQ2tDLE9BQU87SUFDOUIsSUFBSSxDQUFDRCxLQUFLLEVBQUU7SUFFWixJQUFJRixNQUFNLEVBQUU7TUFDVkUsS0FBSyxDQUFDRSxpQkFBaUIsQ0FBQzdCLFdBQVcsQ0FBQzRCLE9BQU8sRUFBRTVCLFdBQVcsQ0FBQzRCLE9BQU8sQ0FBQztJQUNuRSxDQUFDLE1BQU07TUFDTCxJQUFNRSxHQUFHLEdBQUcsQ0FBQTlFLEVBQUEsR0FBQTJFLEtBQUssQ0FBQ2pFLEtBQUssTUFBQSxJQUFBLElBQUFWLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFM0MsTUFBTTtNQUMvQnNILEtBQUssQ0FBQ0UsaUJBQWlCLENBQUNDLEdBQUcsRUFBRUEsR0FBRyxDQUFDO01BQ2pDSCxLQUFLLENBQUNJLFVBQVUsR0FBR0osS0FBSyxDQUFDSyxXQUFXO0lBQ3RDO0lBQ0FMLEtBQUssQ0FBQ00sS0FBSyxDQUFBLENBQUU7RUFDZixDQUFDLENBQUM7RUFFRixJQUFNQyxZQUFZLEdBQUcvRyxnQkFBZ0IsQ0FBQyxVQUNwQ2dILEdBQVcsRUFHVDtJQUFBLElBRkZDLE1BQUEsR0FBQVYsU0FBQSxDQUFBckgsTUFBQSxRQUFBcUgsU0FBQSxRQUFBckUsU0FBQSxHQUFBcUUsU0FBQSxNQUFpQixDQUFDO0lBQUEsSUFDbEJXLE9BQWdCLEdBQUFYLFNBQUEsQ0FBQXJILE1BQUEsT0FBQXFILFNBQUEsTUFBQXJFLFNBQUE7SUQzQ1osSUFBSUwsRUFBRSxFQUFFQyxFQUFFO0lDNkNkLElBQU0wRSxLQUFLLEdBQUdqQyxRQUFRLENBQUNrQyxPQUFPO0lBQzlCLElBQUksQ0FBQ0QsS0FBSyxFQUFFO0lBRVosSUFBQVcsaUJBQUEsR0FBdURmLFFBQVEsQ0FBQ0ssT0FBTztNQUFuRFcsSUFBSSxHQUFBRCxpQkFBQSxDQUFoQmhDLFVBQVU7TUFBUTdCLFFBQVEsR0FBQTZELGlCQUFBLENBQVI3RCxRQUFRO01BQUU2QyxjQUFjLEdBQUFnQixpQkFBQSxDQUFkaEIsY0FBYztJQUNsRCxJQUFNa0IsZUFBZSxHQUFHakcsZUFBZSxDQUFDNEYsR0FBRyxFQUFFMUQsUUFBUSxDQUFDO0lBQ3RELElBQU1nRSxZQUFZLEdBQUdOLEdBQUcsQ0FBQzlILE1BQU0sSUFBSSxDQUFBMkMsRUFBQSxHQUFBdUYsSUFBSSxLQUFBLElBQUEsSUFBSkEsSUFBSSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFKQSxJQUFJLENBQUVsSSxNQUFNLE1BQUEsSUFBQSxJQUFBMkMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQyxDQUFDO0lBQ3JELElBQUkwRixRQUFRLEdBQUcsQ0FBQXpGLEVBQUEsR0FBQW9GLE9BQU8sS0FBQSxJQUFBLElBQVBBLE9BQU8sS0FBQSxLQUFBLENBQUEsR0FBUEEsT0FBTyxHQUFJVixLQUFLLENBQUNnQixZQUFZLE1BQUEsSUFBQSxJQUFBMUYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQztJQUVqRDtJQUNBeUYsUUFBUSxHQUFHckcsV0FBVyxDQUFDaUYsY0FBYyxDQUFDc0IsS0FBSyxDQUFDLENBQUMsRUFBRUMsSUFBSSxDQUFDOUUsR0FBRyxDQUFDMkUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JJLE1BQU07SUFFN0U7SUFDQSxJQUFNeUksTUFBTSxHQUFHWCxHQUFHLENBQUNTLEtBQUssQ0FBQyxDQUFDLEVBQUVGLFFBQVEsR0FBR0QsWUFBWSxDQUFDO0lBQ3BERCxlQUFlLENBQUNPLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQ0MsTUFBTSxDQUFXLFVBQUNDLEdBQUcsRUFBRUMsS0FBSSxFQUFFQyxHQUFHLEVBQUk7TUFDNUQsSUFBSUQsS0FBSSxLQUFLaEgsVUFBVSxFQUFFLE9BQU8rRyxHQUFHO01BQ25DQSxHQUFHLENBQUNHLElBQUksQ0FBQ0YsS0FBSSxDQUFDO01BQ2QsSUFBSUQsR0FBRyxDQUFDSSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUtQLE1BQU0sRUFBRUosUUFBUSxHQUFHUyxHQUFHLEdBQUcsQ0FBQztNQUMvQyxPQUFPRixHQUFHO0lBQ1osQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUVOakQsV0FBVyxDQUFDNEIsT0FBTyxHQUFHYyxRQUFRLEdBQUdOLE1BQU07RUFDekMsQ0FBQyxDQUFDO0VBRUYsSUFBTWtCLFdBQVcsR0FBR25JLGdCQUFnQixDQUFDLFVBQ25DZ0gsR0FBVyxFQUNYb0IsZUFBd0IsRUFDeEI1SixDQUFpQyxFQUMvQjtJRGpERSxJQUFJcUQsRUFBRTtJQ2tEVixJQUFJcUUsY0FBYyxFQUFFO01BQ2xCZCxhQUFhLENBQUM0QixHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksR0FBR0EsR0FBRyxDQUFDO01BQ3RDRCxZQUFZLENBQUNDLEdBQUcsRUFBRW9CLGVBQWUsR0FBRy9ILG9CQUFvQixHQUFHLENBQUMsRUFBRXFILElBQUksQ0FBQzlFLEdBQUcsQ0FBQ2lDLFdBQVcsQ0FBQzRCLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztNQUMvRjNCLGVBQWUsQ0FBQzJCLE9BQU8sR0FBRyxJQUFJO0lBQ2hDO0lBQ0EsSUFBSWpJLENBQUMsRUFBRSxDQUFBcUQsRUFBQSxHQUFBa0QsV0FBVyxDQUFDMEIsT0FBTyxNQUFBLElBQUEsSUFBQTVFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBL0MsSUFBQSxDQUFBaUcsV0FBQSxFQUFHdkcsQ0FBQyxFQUFFd0ksR0FBRyxDQUFDO0VBQ3RDLENBQUMsQ0FBQztFQUVGO0VBQ0EsSUFBTXFCLFlBQVksR0FBR3JJLGdCQUFnQixDQUFDLFVBQUN4QixDQUFnQyxFQUFJO0lEaERyRSxJQUFJcUQsRUFBRTtJQ2lEVixJQUFJNkIsUUFBUSxJQUFJQyxRQUFRLEVBQUU7SUFFMUIsSUFBQTJFLGtCQUFBLEdBQThFbEMsUUFBUSxDQUFDSyxPQUFPO01BQXRGdEIsVUFBVSxHQUFBbUQsa0JBQUEsQ0FBVm5ELFVBQVU7TUFBRWdCLGNBQWMsR0FBQW1DLGtCQUFBLENBQWRuQyxjQUFjO01BQUV4RCxHQUFHLEdBQUEyRixrQkFBQSxDQUFIM0YsR0FBRztNQUFFQyxHQUFHLEdBQUEwRixrQkFBQSxDQUFIMUYsR0FBRztNQUFFVSxRQUFRLEdBQUFnRixrQkFBQSxDQUFSaEYsUUFBUTtNQUFFZCxpQkFBaUIsR0FBQThGLGtCQUFBLENBQWpCOUYsaUJBQWlCO0lBQ3pFLElBQU0rRixNQUFNLEdBQUc5RyxhQUFhLENBQUMsQ0FBQUksRUFBQSxHQUFBckQsQ0FBQyxDQUFDZ0ssTUFBTSxDQUFDakcsS0FBSyxNQUFBLElBQUEsSUFBQVYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksRUFBRSxFQUFFeUIsUUFBUSxDQUFDO0lBQzVELElBQUksQ0FBQ2lGLE1BQU0sRUFBRTtJQUViLElBQU12QixHQUFHLEdBQUt1QixNQUFNLENBQWR2QixHQUFHO0lBQ1QsSUFBUW9CLGVBQWUsR0FBd0JHLE1BQU0sQ0FBN0NILGVBQWU7TUFBRUssaUJBQWlCLEdBQUtGLE1BQU0sQ0FBNUJFLGlCQUFpQjtJQUUxQyxJQUFJekIsR0FBRyxLQUFLN0IsVUFBVSxJQUFJLENBQUNpRCxlQUFlLEVBQUU7SUFFNUM7SUFDQSxJQUFJbkgsYUFBYSxDQUFDdUIsaUJBQWlCLENBQUMsRUFBRTtNQUNwQyxJQUFBa0cscUJBQUEsR0FBcUNuSCxzQkFBc0IsQ0FBQ3lGLEdBQUcsRUFBRTJCLE1BQU0sQ0FBQ25HLGlCQUFpQixDQUFDLENBQUM7UUFBbkZvRyxJQUFHLEdBQUFGLHFCQUFBO1FBQUVHLFNBQVMsR0FBQUgscUJBQUEsQ0FBVEcsU0FBUztRQUFFQyxRQUFRLEdBQUFKLHFCQUFBLENBQVJJLFFBQVE7TUFDaEMsSUFBSUEsUUFBUSxFQUFFO1FBQ1osSUFBQUMscUJBQUEsR0FBaUI1QyxjQUFjLENBQUN5QixLQUFLLENBQUM1RyxRQUFRLENBQUM7VUFBQWdJLHNCQUFBLEdBQUE5RCxjQUFBLENBQUE2RCxxQkFBQTtVQUF4Q0UsTUFBTSxHQUFBRCxzQkFBQTtRQUNiLElBQUk5SCxXQUFXLENBQUMrSCxNQUFNLENBQUMsS0FBS0wsSUFBRyxFQUFFO1FBQ2pDNUIsR0FBRyxHQUFHNkIsU0FBUztNQUNqQjtJQUNGO0lBRUE7SUFDQSxJQUFJNUgsYUFBYSxDQUFDMEIsR0FBRyxDQUFDLElBQUkxQixhQUFhLENBQUMyQixHQUFHLENBQUMsRUFBRTtNQUM1Q29FLEdBQUcsR0FBRzNGLGdCQUFnQixDQUFDMkYsR0FBRyxFQUFFckUsR0FBRyxFQUFFQyxHQUFHLENBQUM7SUFDdkM7SUFFQTtJQUNBLElBQUlvRSxHQUFHLEtBQUssRUFBRSxFQUFFO01BQ2RBLEdBQUcsR0FBR3lCLGlCQUFpQixHQUFHM0gsVUFBVSxHQUFHUSxjQUFjLENBQUMwRixHQUFHLEVBQUVvQixlQUFlLEVBQUU5RSxRQUFRLENBQUM7SUFDdkY7SUFFQTZFLFdBQVcsQ0FBQ25CLEdBQUcsRUFBRW9CLGVBQWUsRUFBRTVKLENBQUMsQ0FBQztFQUN0QyxDQUFDLENBQUM7RUFFRixJQUFNMEssWUFBWSxHQUFHbEosZ0JBQWdCLENBQUMsWUFBSztJRG5EckMsSUFBSTZCLEVBQUU7SUNvRFYsSUFBSWlELGVBQWUsQ0FBQzJCLE9BQU8sRUFBRTtNQUMzQjNCLGVBQWUsQ0FBQzJCLE9BQU8sR0FBRyxLQUFLO01BQy9CO0lBQ0Y7SUFDQSxJQUFNUyxPQUFPLEdBQUcsQ0FBQXJGLEVBQUEsR0FBQTBDLFFBQVEsQ0FBQ2tDLE9BQU8sTUFBQSxJQUFBLElBQUE1RSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRTJGLFlBQVk7SUFDOUMsSUFBSSxPQUFPTixPQUFPLEtBQUssUUFBUSxFQUFFckMsV0FBVyxDQUFDNEIsT0FBTyxHQUFHUyxPQUFPO0VBQ2hFLENBQUMsQ0FBQztFQUVGLElBQU1pQyxXQUFXLEdBQUduSixnQkFBZ0IsQ0FBQyxVQUFDeEIsQ0FBK0IsRUFBSTtJQUN2RXdILFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDaEI3QixPQUFPLEtBQUEsSUFBQSxJQUFQQSxPQUFPLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVBBLE9BQU8sQ0FBRzNGLENBQUMsQ0FBQztFQUNkLENBQUMsQ0FBQztFQUVGLElBQU00SyxVQUFVLEdBQUdwSixnQkFBZ0IsQ0FBQyxVQUFDeEIsQ0FBK0IsRUFBSTtJQUN0RXdILFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDakI5QixNQUFNLEtBQUEsSUFBQSxJQUFOQSxNQUFNLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQU5BLE1BQU0sQ0FBRzFGLENBQUMsQ0FBQztFQUNiLENBQUMsQ0FBQztFQUVGLElBQU02SyxvQkFBb0IsR0FBR3JKLGdCQUFnQixDQUFDLFVBQUN4QixDQUE2QixFQUFJO0lEcEQxRSxJQUFJcUQsRUFBRTtJQ3FEVixJQUFJckQsQ0FBQyxDQUFDZ0ssTUFBTSxZQUFZYyxnQkFBZ0IsRUFBRTtJQUMxQyxDQUFBekgsRUFBQSxHQUFBMEMsUUFBUSxDQUFDa0MsT0FBTyxNQUFBLElBQUEsSUFBQTVFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFaUYsS0FBSyxDQUFBLENBQUU7SUFDekIsSUFBSW5CLFVBQVUsRUFBRVUsV0FBVyxDQUFBLENBQUU7RUFDL0IsQ0FBQyxDQUFDO0VBRUY7RUFDQXpHLGVBQWUsQ0FBQyxZQUFLO0lEbERmLElBQUlpQyxFQUFFLEVBQUVDLEVBQUUsRUFBRXlILEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFLEVBQUVDLEVBQUUsRUFBRUMsRUFBRTtJQ21EOUMsSUFBTUMsY0FBYyxHQUFHLENBQUFqSSxFQUFBLEdBQUEsQ0FBQUQsRUFBQSxHQUFBK0MsWUFBWSxDQUFDNkIsT0FBTyxNQUFBLElBQUEsSUFBQTVFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFbUksV0FBVyxNQUFBLElBQUEsSUFBQWxJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJMUIsZUFBZTtJQUMzRSxJQUFNNkosV0FBVyxHQUFHLENBQUFULEVBQUEsR0FBQSxDQUFBRCxFQUFBLEdBQUE5RSxTQUFTLENBQUNnQyxPQUFPLE1BQUEsSUFBQSxJQUFBOEMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVTLFdBQVcsTUFBQSxJQUFBLElBQUFSLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLENBQUM7SUFDdkQsSUFBTVUsV0FBVyxHQUFHLENBQUFSLEVBQUEsR0FBQSxDQUFBRCxFQUFBLEdBQUEvRSxTQUFTLENBQUMrQixPQUFPLE1BQUEsSUFBQSxJQUFBZ0QsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVPLFdBQVcsTUFBQSxJQUFBLElBQUFOLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLENBQUM7SUFDdkQsSUFBTVMsYUFBYSxHQUFHLENBQUFQLEVBQUEsR0FBQSxDQUFBRCxFQUFBLEdBQUFoRixXQUFXLENBQUM4QixPQUFPLE1BQUEsSUFBQSxJQUFBa0QsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVLLFdBQVcsTUFBQSxJQUFBLElBQUFKLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLENBQUM7SUFDM0QsSUFBTVEsU0FBUyxHQUFHLENBQUFOLEVBQUEsR0FBQSxDQUFBRCxFQUFBLEdBQUFyRixVQUFVLENBQUNpQyxPQUFPLE1BQUEsSUFBQSxJQUFBb0QsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVHLFdBQVcsTUFBQSxJQUFBLElBQUFGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLENBQUM7SUFDdEQsSUFBTU8sUUFBUSxHQUFHN0ksWUFBWSxDQUFDLENBQUMsQ0FBQ3lJLFdBQVcsRUFBRSxDQUFDLENBQUNDLFdBQVcsRUFBRSxDQUFDLENBQUNDLGFBQWEsQ0FBQztJQUU1RSxJQUFNRyxRQUFRLEdBQUdQLGNBQWMsR0FBR0UsV0FBVyxHQUFHQyxXQUFXLEdBQUdDLGFBQWEsR0FBR0UsUUFBUTtJQUN0RjdFLGFBQWEsQ0FBQ2tDLElBQUksQ0FBQy9FLEdBQUcsQ0FBQzJILFFBQVEsRUFBRTVDLElBQUksQ0FBQzlFLEdBQUcsQ0FBQ3dILFNBQVMsRUFBRWhLLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDdkV3RixhQUFhLENBQUN3RSxTQUFTLElBQUlFLFFBQVEsQ0FBQztJQUNwQyxJQUFJckUsVUFBVSxDQUFDUSxPQUFPLEVBQUVKLFdBQVcsQ0FBQyxJQUFJLENBQUM7RUFDM0MsQ0FBQyxFQUFFLENBQUNsQixVQUFVLEVBQUV0QixNQUFNLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFUCxPQUFPLENBQUMsQ0FBQztFQUVuRDVELGVBQWUsQ0FBQyxZQUFLO0lEbERmLElBQUlpQyxFQUFFO0lDbURWLElBQUltRixHQUFHLEdBQUdkLGNBQWMsR0FBR2YsVUFBVSxHQUFHNUMsS0FBSztJQUM3QyxJQUFJNkYsZUFBZSxHQUFHLEtBQUs7SUFDM0IsSUFBSUssaUJBQWlCLEdBQUcsS0FBSztJQUU3QixJQUFJLE9BQU96QixHQUFHLEtBQUssUUFBUSxFQUFFO01BQzNCLElBQUlBLEdBQUcsS0FBSyxFQUFFLEVBQUU7UUFDZEEsR0FBRyxHQUFHLElBQUk7TUFDWixDQUFDLE1BQU07UUFDTCxJQUFNdUIsTUFBTSxHQUFHOUcsYUFBYSxDQUFDdUYsR0FBRyxFQUFFMUQsUUFBUSxDQUFDO1FBQzNDLElBQUksQ0FBQ2lGLE1BQU0sRUFBRTtRQUNidkIsR0FBRyxHQUFHdUIsTUFBTSxDQUFDdkIsR0FBRztRQUNoQm9CLGVBQWUsR0FBR0csTUFBTSxDQUFDSCxlQUFlO1FBQ3hDSyxpQkFBaUIsR0FBR0YsTUFBTSxDQUFDRSxpQkFBaUI7UUFDNUMsSUFBSSxDQUFDbkYsUUFBUSxFQUFFMEQsR0FBRyxHQUFHN0YsVUFBVSxDQUFDNkYsR0FBRyxDQUFDO01BQ3RDO0lBQ0YsQ0FBQyxNQUFNLElBQUlBLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQy9GLGFBQWEsQ0FBQytGLEdBQUcsQ0FBQyxFQUFFO0lBRWhEO0lBQ0EsSUFBSSxDQUFDMUQsUUFBUSxJQUFJckMsYUFBYSxDQUFDK0YsR0FBRyxDQUFDLEVBQUU7TUFDbkNBLEdBQUcsR0FBR3RGLFFBQVEsQ0FBQ3NGLEdBQUcsQ0FBQztJQUNyQjtJQUVBO0lBQ0EsSUFDRSxDQUFDLE9BQU9BLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsS0FDbkQvRixhQUFhLENBQUN1QixpQkFBaUIsQ0FBQyxFQUNoQztNQUNBLElBQUErSCxzQkFBQSxHQUFnQ2hKLHNCQUFzQixJQUFBK0MsTUFBQSxDQUFJMEMsR0FBRyxHQUFJMkIsTUFBTSxDQUFDbkcsaUJBQWlCLENBQUMsQ0FBQztRQUFuRnFHLFNBQVMsR0FBQTBCLHNCQUFBLENBQVQxQixTQUFTO1FBQUVDLFFBQVEsR0FBQXlCLHNCQUFBLENBQVJ6QixRQUFRO01BQzNCLElBQUlBLFFBQVEsRUFBRTtRQUNaLElBQUk1QyxjQUFjLEVBQUU7VUFDbEJkLGFBQWEsQ0FBQ3lELFNBQVMsQ0FBQztRQUMxQixDQUFDLE1BQU07VUFDTCxDQUFBaEgsRUFBQSxHQUFBa0QsV0FBVyxDQUFDMEIsT0FBTyxNQUFBLElBQUEsSUFBQTVFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBL0MsSUFBQSxDQUFBaUcsV0FBQSxFQUNqQjtZQUFFeUQsTUFBTSxFQUFFakUsUUFBUSxDQUFDa0M7VUFBTyxDQUE4QyxFQUN4RW9DLFNBQVMsS0FBQSxJQUFBLElBQVRBLFNBQVMsS0FBQSxLQUFBLENBQUEsR0FBVEEsU0FBUyxHQUFJLEVBQUUsQ0FDaEI7UUFDSDtRQUNBO01BQ0Y7SUFDRjtJQUVBO0lBQ0EsSUFBSTVILGFBQWEsQ0FBQytGLEdBQUcsQ0FBQyxJQUFJLE9BQU9BLEdBQUcsS0FBSyxRQUFRLEVBQUU7TUFDakRBLEdBQUcsR0FBRzNGLGdCQUFnQixJQUFBaUQsTUFBQSxDQUFJMEMsR0FBRyxHQUFJckUsR0FBRyxFQUFFQyxHQUFHLENBQUM7SUFDNUM7SUFFQSxJQUFJb0UsR0FBRyxLQUFLLEVBQUUsSUFBSUEsR0FBRyxJQUFJLElBQUksRUFBRTtNQUM3QjVCLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQyxNQUFNO01BQ0w0QixHQUFHLEdBQUd5QixpQkFBaUIsR0FBRzNILFVBQVUsR0FBR1EsY0FBYyxJQUFBZ0QsTUFBQSxDQUFJMEMsR0FBRyxHQUFJb0IsZUFBZSxFQUFFOUUsUUFBUSxDQUFDO01BQzFGOEIsYUFBYSxDQUFDNEIsR0FBRyxDQUFDO0lBQ3BCO0lBRUFELFlBQVksQ0FBQ0MsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLEdBQUksRUFBRSxFQUFFb0IsZUFBZSxHQUFHL0gsb0JBQW9CLEdBQUcsQ0FBQyxFQUFFcUgsSUFBSSxDQUFDOUUsR0FBRyxDQUFDaUMsV0FBVyxDQUFDNEIsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JHM0IsZUFBZSxDQUFDMkIsT0FBTyxHQUFHLElBQUk7RUFDaEMsQ0FBQyxFQUFFLENBQUNsRSxLQUFLLEVBQUVDLGlCQUFpQixFQUFFRyxHQUFHLEVBQUVDLEdBQUcsRUFBRVUsUUFBUSxDQUFDLENBQUM7RUFFbEQ7RUFDQSxJQUFNa0gsZ0JBQWdCLEdBQUduRyxHQUFHLENBQUMsU0FBUyxFQUFFbEUsT0FBTyxDQUM3QzJDLFVBQVUsRUFDVnVCLEdBQUcsQ0FBQ3JDLElBQUksQ0FBQyxFQUNUcUIsT0FBTyxJQUFJZ0IsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUN6QlosT0FBTyxJQUFJWSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQ3pCWCxRQUFRLElBQUlXLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFDM0JWLFFBQVEsSUFBSVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUMzQmMsVUFBVSxJQUFJZCxHQUFHLENBQUMsUUFBUSxDQUFDLENBQzVCLENBQUM7RUFFRixJQUFNb0csV0FBVyxHQUFHLFNBQWRBLFdBQVdBLENBQUEsRUFBUTtJQUN2QixJQUFJLENBQUM3RyxLQUFLLEVBQUUsT0FBTyxJQUFJO0lBQ3ZCLElBQUlKLE9BQU8sRUFBRTtNQUNYLE9BQU9uRSxJQUFBLENBQUNRLFFBQVEsRUFBQTtRQUFDNkssS0FBSyxFQUFFcEssb0JBQW9CO1FBQUVxSyxNQUFNLEVBQUVwSyxxQkFBcUI7UUFBRXNDLFNBQVMsRUFBRXdCLEdBQUcsQ0FBQyxlQUFlO01BQUMsQ0FBQSxDQUFJO0lBQ2xIO0lBQ0EsT0FBT2hGLElBQUEsQ0FBQSxNQUFBLEVBQUE7TUFBTXdELFNBQVMsRUFBRXdCLEdBQUcsQ0FBQyxPQUFPLEVBQUVsRSxPQUFPLENBQUNvRCxRQUFRLElBQUljLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFdEIsUUFBUSxDQUFDLENBQUM7TUFBQTZILFFBQUEsRUFBR2hIO0lBQUssQ0FBQSxDQUFRO0VBQzVHLENBQUM7RUFFRCxJQUFNaUgsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUEsRUFBUTtJQUN4QixJQUFJckgsT0FBTyxFQUFFLE9BQU9uRSxJQUFBLENBQUNTLE9BQU8sRUFBQTtNQUFDK0MsU0FBUyxFQUFFd0IsR0FBRyxDQUFDLGdCQUFnQixDQUFDO01BQUV5RyxXQUFXLEVBQUV0SztJQUFvQixDQUFBLENBQUk7SUFDcEcsSUFBSXNELE1BQU0sRUFBRSxPQUFPekUsSUFBQSxDQUFBLE1BQUEsRUFBQTtNQUFNMEwsR0FBRyxFQUFFckcsU0FBUztNQUFFN0IsU0FBUyxFQUFFd0IsR0FBRyxDQUFDLFFBQVEsRUFBRWpCLFlBQVksQ0FBQztNQUFBd0gsUUFBQSxFQUFHOUc7SUFBTSxDQUFBLENBQVE7SUFDaEcsT0FBTyxJQUFJO0VBQ2IsQ0FBQztFQUVELE9BQ0V2RSxLQUFBLENBQUEsS0FBQSxFQUFBO0lBQUtzRCxTQUFTLEVBQUUySCxnQkFBZ0I7SUFBQUksUUFBQSxFQUFBLENBQzdCSCxXQUFXLENBQUEsQ0FBRSxFQUVkbEwsS0FBQSxDQUFBLEtBQUEsRUFBQTtNQUNFd0wsR0FBRyxFQUFFbkcsWUFBWTtNQUNqQi9CLFNBQVMsRUFBRXdCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRWxFLE9BQU8sQ0FBQzBDLFNBQVMsRUFBRWtELE9BQU8sSUFBSTFCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQ25FMkcsT0FBTyxFQUFFM0Isb0JBQW9CO01BQUF1QixRQUFBLEVBQUEsQ0FFNUIvRyxNQUFNLElBQ0x4RSxJQUFBLENBQUEsTUFBQSxFQUFBO1FBQU0wTCxHQUFHLEVBQUV0RyxTQUFTO1FBQUU1QixTQUFTLEVBQUV3QixHQUFHLENBQUMsUUFBUSxFQUFFbEIsWUFBWSxDQUFDO1FBQUF5SCxRQUFBLEVBQ3pEL0c7TUFBTSxDQUFBLENBRVYsRUFFRHhFLElBQUEsQ0FBQSxLQUFBLEVBQUE7UUFBS3dELFNBQVMsRUFBRXdCLEdBQUcsQ0FBQyxTQUFTLEVBQUcsQ0FBQzBCLE9BQU8sSUFBSUosVUFBVSxHQUFJdEIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUFBdUcsUUFBQSxFQUNoRnZMLElBQUEsQ0FBQSxPQUFBLEVBQUFWLE1BQUEsQ0FBQTBELE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDTStCLElBQUksRUFBQTtVQUNSMkcsR0FBRyxFQUFFeEcsUUFBUTtVQUNiaEMsS0FBSyxFQUFFNEQsY0FBYztVQUNyQnpELFdBQVcsRUFBRUEsV0FBVztVQUN4QmlCLFFBQVEsRUFBRUEsUUFBUTtVQUNsQkQsUUFBUSxFQUFFQSxRQUFRO1VBQ2xCdUgsS0FBSyxFQUFBQyxlQUFBLEtBQUt6SyxtQkFBbUIsS0FBQTZELE1BQUEsQ0FBTWlCLFVBQVUsUUFBdUI7VUFDcEV0QixRQUFRLEVBQUVvRSxZQUFZO1VBQ3RCOEMsUUFBUSxFQUFFakMsWUFBWTtVQUN0Qi9FLE9BQU8sRUFBRWdGLFdBQVc7VUFDcEJqRixNQUFNLEVBQUVrRjtRQUFVLENBQUEsQ0FBQTtNQUNsQixDQUFBLENBQ0UsRUFFTHJGLFFBQVEsSUFDUDFFLElBQUEsQ0FBQSxNQUFBLEVBQUE7UUFBTTBMLEdBQUcsRUFBRXBHLFdBQVc7UUFBRTlCLFNBQVMsRUFBRXdCLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFBQXVHLFFBQUEsRUFDL0M3RztNQUFRLENBQUEsQ0FFWixFQUVBOEcsWUFBWSxDQUFBLENBQUUsRUFFZnhMLElBQUEsQ0FBQSxNQUFBLEVBQUE7UUFDRTBMLEdBQUcsRUFBRXZHLFVBQVU7UUFDZjNCLFNBQVMsRUFBRXdCLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDdEIyRyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRXhNLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUM0TSxlQUFlLENBQUEsQ0FBRTtRQUFBO1FBQUFSLFFBQUEsRUFFaEN6RTtNQUFjLENBQUEsQ0FDVjtJQUFBLENBQUEsQ0FDSCxFQUVMLENBQUNuQyxPQUFPLElBQUkvQixRQUFRLEtBQ25CMUMsS0FBQSxDQUFBLEtBQUEsRUFBQTtNQUFLc0QsU0FBUyxFQUFFd0IsR0FBRyxDQUFDLE9BQU8sQ0FBQztNQUFBdUcsUUFBQSxFQUFBLENBQ3pCNUcsT0FBTyxJQUFJM0UsSUFBQSxDQUFBLEtBQUEsRUFBQTtRQUFLd0QsU0FBUyxFQUFFd0IsR0FBRyxDQUFDLFNBQVMsRUFBRW5CLFVBQVUsQ0FBQztRQUFBMEgsUUFBQSxFQUFHNUc7TUFBTyxDQUFBLENBQU8sRUFDdEUvQixRQUFRLElBQUk1QyxJQUFBLENBQUEsS0FBQSxFQUFBO1FBQUt3RCxTQUFTLEVBQUV3QixHQUFHLENBQUMsVUFBVSxFQUFFbEMsV0FBVyxDQUFDO1FBQUF5SSxRQUFBLEVBQUczSTtNQUFRLENBQUEsQ0FBTztJQUFBLENBQUEsQ0FFOUU7RUFBQSxDQUFBLENBQ0c7QUFFVixDQUFDO0FBRUQsNEJBQWV6QyxJQUFJLENBQUNtQyxXQUFXLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9JbnB1dEFtb3VudC9JbnB1dEFtb3VudC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJ3ByaW1lcmVhY3Qvc2tlbGV0b24nO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi4vU3Bpbm5lcic7XG5pbXBvcnQgdXNlTGF0ZXN0IGZyb20gJy4uL3VzZUxhdGVzdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTUlOX0lOUFVUX1dJRFRILCBERUNJTUFMX1BPSU5UX09GRlNFVCwgU0tFTEVUT05fTEFCRUxfV0lEVEgsIFNLRUxFVE9OX0xBQkVMX0hFSUdIVCwgU1BJTk5FUl9TVFJPS0VfV0lEVEgsIENTU19WQVJfSU5QVVRfV0lEVEgsIERFRkFVTFRfVFlQRSwgREVGQVVMVF9TSVpFLCBERUZBVUxUX1BMQUNFSE9MREVSLCBERUZBVUxUX1BSRUZJWF9DTFMsIENIQVJfTUlOVVMsIENIQVJfQ09NTUEsIENIQVJfRE9ULCBpc051bWVyaWNUeXBlLCBzdHJpcENvbW1hcywgc3RyaXBNaW51cywgZm9ybWF0VGhvdXNhbmRzLCBjYWxjVmFsdWVJblJhbmdlLCBub3JtYWxpemVWYWx1ZSwgdHJ1bmNhdGVGcmFjdGlvbkRpZ2l0cywgY2FsY0dhcFdpZHRoLCBwYXJzZVJhd0lucHV0LCBhYnNWYWx1ZSwgfSBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgY29uc3QgSW5wdXRBbW91bnQgPSBwcm9wcyA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB0eXBlID0gKF9hID0gcHJvcHMudHlwZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UWVBFO1xuICAgIGNvbnN0IHNpemUgPSB0eXBlID09PSAnbm9ybWFsJ1xuICAgICAgICA/IChfYiA9IHByb3BzLnNpemUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfU0laRVxuICAgICAgICA6IERFRkFVTFRfU0laRTtcbiAgICBjb25zdCBmb290bm90ZSA9IHR5cGUgPT09ICdub3JtYWwnID8gdW5kZWZpbmVkIDogcHJvcHMuZm9vdG5vdGU7XG4gICAgY29uc3QgZm9vdG5vdGVDbHMgPSB0eXBlID09PSAnbm9ybWFsJyA/IHVuZGVmaW5lZCA6IHByb3BzLmZvb3Rub3RlQ2xzO1xuICAgIGNvbnN0IHJhd0Jhc2VQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BzKTtcbiAgICBkZWxldGUgcmF3QmFzZVByb3BzLnR5cGU7XG4gICAgZGVsZXRlIHJhd0Jhc2VQcm9wcy5zaXplO1xuICAgIGRlbGV0ZSByYXdCYXNlUHJvcHMuZm9vdG5vdGU7XG4gICAgZGVsZXRlIHJhd0Jhc2VQcm9wcy5mb290bm90ZUNscztcbiAgICBjb25zdCBiYXNlUHJvcHMgPSByYXdCYXNlUHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMsIHBsYWNlaG9sZGVyID0gREVGQVVMVF9QTEFDRUhPTERFUiwgbWluLCBtYXgsIGNsYXNzTmFtZSwgd3JhcHBlckNscywgbGFiZWxDbHMsIHByZWZpeENscyA9IERFRkFVTFRfUFJFRklYX0NMUywgbWVzc2FnZUNscywgcHJlZml4RWxlQ2xzLCBzdWZmaXhFbGVDbHMsIGludmFsaWQsIG5lZ2F0aXZlLCByZXF1aXJlZCwgbG9hZGluZywgc3VjY2VzcywgZGlzYWJsZWQsIHJlYWRPbmx5LCBsYWJlbCwgcHJlZml4LCBzdWZmaXgsIGN1cnJlbmN5LCBtZXNzYWdlLCBvbkNoYW5nZSwgb25CbHVyLCBvbkZvY3VzIH0gPSBiYXNlUHJvcHMsIHJlc3QgPSBfX3Jlc3QoYmFzZVByb3BzLCBbXCJ2YWx1ZVwiLCBcIm1heEZyYWN0aW9uRGlnaXRzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJjbGFzc05hbWVcIiwgXCJ3cmFwcGVyQ2xzXCIsIFwibGFiZWxDbHNcIiwgXCJwcmVmaXhDbHNcIiwgXCJtZXNzYWdlQ2xzXCIsIFwicHJlZml4RWxlQ2xzXCIsIFwic3VmZml4RWxlQ2xzXCIsIFwiaW52YWxpZFwiLCBcIm5lZ2F0aXZlXCIsIFwicmVxdWlyZWRcIiwgXCJsb2FkaW5nXCIsIFwic3VjY2Vzc1wiLCBcImRpc2FibGVkXCIsIFwicmVhZE9ubHlcIiwgXCJsYWJlbFwiLCBcInByZWZpeFwiLCBcInN1ZmZpeFwiLCBcImN1cnJlbmN5XCIsIFwibWVzc2FnZVwiLCBcIm9uQ2hhbmdlXCIsIFwib25CbHVyXCIsIFwib25Gb2N1c1wiXSk7XG4gICAgY29uc3QgY2xzID0gY2xhc3NuYW1lcyhgJHtwcmVmaXhDbHN9LSR7dHlwZX1gKTtcbiAgICAvLyDilIDilIAgUmVmcyDilIDilIBcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmYWtlRWxlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHByZWZpeFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzdWZmaXhSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY3VycmVuY3lSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGNhcmV0UG9zUmVmID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IGlnbm9yZVNlbGVjdFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgb25DaGFuZ2VSZWYgPSB1c2VMYXRlc3Qob25DaGFuZ2UpO1xuICAgIC8vIOKUgOKUgCBTdGF0ZSDilIDilIBcbiAgICBjb25zdCBbaW5uZXJWYWx1ZSwgc2V0SW5uZXJWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaW5wdXRXaWR0aCwgc2V0SW5wdXRXaWR0aF0gPSB1c2VTdGF0ZShNSU5fSU5QVVRfV0lEVEgpO1xuICAgIGNvbnN0IFtpc01heFdpZHRoLCBzZXRJc01heFdpZHRoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNGb2N1cywgc2V0SXNGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaXNGb2N1c1JlZiA9IHVzZUxhdGVzdChpc0ZvY3VzKTtcbiAgICBjb25zdCBpc1VuY29udHJvbGxlZCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB1c2VNZW1vKCgpID0+IGZvcm1hdFRob3VzYW5kcyhpbm5lclZhbHVlICE9PSBudWxsICYmIGlubmVyVmFsdWUgIT09IHZvaWQgMCA/IGlubmVyVmFsdWUgOiAnJywgbmVnYXRpdmUpLCBbaW5uZXJWYWx1ZSwgbmVnYXRpdmVdKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZUxhdGVzdCh7XG4gICAgICAgIGlubmVyVmFsdWUsIGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzLFxuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBIZWxwZXJzIOKUgOKUgFxuICAgIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlRXZlbnRDYWxsYmFjaygoc3RpY2t5ID0gZmFsc2UpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChzdGlja3kpIHtcbiAgICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zUmVmLmN1cnJlbnQsIGNhcmV0UG9zUmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gKF9hID0gaW5wdXQudmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGg7XG4gICAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgICAgICBpbnB1dC5zY3JvbGxMZWZ0ID0gaW5wdXQuc2Nyb2xsV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjYWxjQ2FyZXRQb3MgPSB1c2VFdmVudENhbGxiYWNrKCh2YWwsIG9mZnNldCA9IDAsIGN1cnJQb3MpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWlucHV0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGlubmVyVmFsdWU6IHByZXYsIG5lZ2F0aXZlLCBmb3JtYXR0ZWRWYWx1ZSB9ID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkTmV3VmFsID0gZm9ybWF0VGhvdXNhbmRzKHZhbCwgbmVnYXRpdmUpO1xuICAgICAgICBjb25zdCBvcmlnaW5PZmZzZXQgPSB2YWwubGVuZ3RoIC0gKChfYSA9IHByZXYgPT09IG51bGwgfHwgcHJldiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJldi5sZW5ndGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApO1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAoX2IgPSBjdXJyUG9zICE9PSBudWxsICYmIGN1cnJQb3MgIT09IHZvaWQgMCA/IGN1cnJQb3MgOiBpbnB1dC5zZWxlY3Rpb25FbmQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG4gICAgICAgIC8vIE1hcCBmb3JtYXR0ZWQgcG9zaXRpb24gYmFjayB0byByYXcgcG9zaXRpb25cbiAgICAgICAgcG9zaXRpb24gPSBzdHJpcENvbW1hcyhmb3JtYXR0ZWRWYWx1ZS5zbGljZSgwLCBNYXRoLm1heChwb3NpdGlvbiwgMCkpKS5sZW5ndGg7XG4gICAgICAgIC8vIE1hcCByYXcgcG9zaXRpb24gZm9yd2FyZCB0byBmb3JtYXR0ZWQgcG9zaXRpb25cbiAgICAgICAgY29uc3QgcG9zVmFsID0gdmFsLnNsaWNlKDAsIHBvc2l0aW9uICsgb3JpZ2luT2Zmc2V0KTtcbiAgICAgICAgZm9ybWF0dGVkTmV3VmFsLnNwbGl0KCcnKS5yZWR1Y2UoKGFjYywgY2hhciwgaW5kKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gQ0hBUl9DT01NQSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgYWNjLnB1c2goY2hhcik7XG4gICAgICAgICAgICBpZiAoYWNjLmpvaW4oJycpID09PSBwb3NWYWwpXG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBpbmQgKyAxO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjYXJldFBvc1JlZi5jdXJyZW50ID0gcG9zaXRpb24gKyBvZmZzZXQ7XG4gICAgfSk7XG4gICAgY29uc3QgY29tbWl0VmFsdWUgPSB1c2VFdmVudENhbGxiYWNrKCh2YWwsIGhhc0RlY2ltYWxQb2ludCwgZSkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpc1VuY29udHJvbGxlZCkge1xuICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh2YWwgPT09ICcnID8gbnVsbCA6IHZhbCk7XG4gICAgICAgICAgICBjYWxjQ2FyZXRQb3ModmFsLCBoYXNEZWNpbWFsUG9pbnQgPyBERUNJTUFMX1BPSU5UX09GRlNFVCA6IDAsIE1hdGgubWF4KGNhcmV0UG9zUmVmLmN1cnJlbnQsIDApKTtcbiAgICAgICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgIChfYSA9IG9uQ2hhbmdlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9uQ2hhbmdlUmVmLCBlLCB2YWwpO1xuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBFdmVudCBIYW5kbGVycyDilIDilIBcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRpc2FibGVkIHx8IHJlYWRPbmx5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGlubmVyVmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzIH0gPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVJhd0lucHV0KChfYSA9IGUudGFyZ2V0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJywgbmVnYXRpdmUpO1xuICAgICAgICBpZiAoIXBhcnNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHsgdmFsIH0gPSBwYXJzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGFzRGVjaW1hbFBvaW50LCBpc1N0YW5kYWxvbmVNaW51cyB9ID0gcGFyc2VkO1xuICAgICAgICBpZiAodmFsID09PSBpbm5lclZhbHVlICYmICFoYXNEZWNpbWFsUG9pbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIEVuZm9yY2UgZnJhY3Rpb24gZGlnaXQgbGltaXRcbiAgICAgICAgaWYgKGlzTnVtZXJpY1R5cGUobWF4RnJhY3Rpb25EaWdpdHMpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGludCwgdHJ1bmNhdGVkLCBvdmVyZmxvdyB9ID0gdHJ1bmNhdGVGcmFjdGlvbkRpZ2l0cyh2YWwsIE51bWJlcihtYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICAgICAgaWYgKG92ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW29sZEludF0gPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdChDSEFSX0RPVCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwQ29tbWFzKG9sZEludCkgPT09IGludClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHZhbCA9IHRydW5jYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDbGFtcCB0byBtaW4vbWF4IHJhbmdlXG4gICAgICAgIGlmIChpc051bWVyaWNUeXBlKG1pbikgfHwgaXNOdW1lcmljVHlwZShtYXgpKSB7XG4gICAgICAgICAgICB2YWwgPSBjYWxjVmFsdWVJblJhbmdlKHZhbCwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgZmluYWwgdmFsdWVcbiAgICAgICAgaWYgKHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgIHZhbCA9IGlzU3RhbmRhbG9uZU1pbnVzID8gQ0hBUl9NSU5VUyA6IG5vcm1hbGl6ZVZhbHVlKHZhbCwgaGFzRGVjaW1hbFBvaW50LCBuZWdhdGl2ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0VmFsdWUodmFsLCBoYXNEZWNpbWFsUG9pbnQsIGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpZ25vcmVTZWxlY3RSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgaWdub3JlU2VsZWN0UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyUG9zID0gKF9hID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNlbGVjdGlvbkVuZDtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyUG9zID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIGNhcmV0UG9zUmVmLmN1cnJlbnQgPSBjdXJyUG9zO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBzZXRJc0ZvY3VzKHRydWUpO1xuICAgICAgICBvbkZvY3VzID09PSBudWxsIHx8IG9uRm9jdXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRm9jdXMoZSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgc2V0SXNGb2N1cyhmYWxzZSk7XG4gICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cihlKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAoX2EgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgaWYgKGlzTWF4V2lkdGgpXG4gICAgICAgICAgICBzY3JvbGxUb0VuZCgpO1xuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBMYXlvdXQgRWZmZWN0cyDilIDilIBcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2s7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gKF9iID0gKF9hID0gY29udGFpbmVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogTUlOX0lOUFVUX1dJRFRIO1xuICAgICAgICBjb25zdCBwcmVmaXhXaWR0aCA9IChfZCA9IChfYyA9IHByZWZpeFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Mub2Zmc2V0V2lkdGgpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDA7XG4gICAgICAgIGNvbnN0IHN1ZmZpeFdpZHRoID0gKF9mID0gKF9lID0gc3VmZml4UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogMDtcbiAgICAgICAgY29uc3QgY3VycmVuY3lXaWR0aCA9IChfaCA9IChfZyA9IGN1cnJlbmN5UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogMDtcbiAgICAgICAgY29uc3QgZmFrZVdpZHRoID0gKF9rID0gKF9qID0gZmFrZUVsZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oub2Zmc2V0V2lkdGgpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IDA7XG4gICAgICAgIGNvbnN0IGdhcFdpZHRoID0gY2FsY0dhcFdpZHRoKCEhcHJlZml4V2lkdGgsICEhc3VmZml4V2lkdGgsICEhY3VycmVuY3lXaWR0aCk7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gY29udGFpbmVyV2lkdGggLSBwcmVmaXhXaWR0aCAtIHN1ZmZpeFdpZHRoIC0gY3VycmVuY3lXaWR0aCAtIGdhcFdpZHRoO1xuICAgICAgICBzZXRJbnB1dFdpZHRoKE1hdGgubWluKG1heFdpZHRoLCBNYXRoLm1heChmYWtlV2lkdGgsIE1JTl9JTlBVVF9XSURUSCkpKTtcbiAgICAgICAgc2V0SXNNYXhXaWR0aChmYWtlV2lkdGggPj0gbWF4V2lkdGgpO1xuICAgICAgICBpZiAoaXNGb2N1c1JlZi5jdXJyZW50KVxuICAgICAgICAgICAgc2Nyb2xsVG9FbmQodHJ1ZSk7XG4gICAgfSwgW2lubmVyVmFsdWUsIHByZWZpeCwgc3VmZml4LCBjdXJyZW5jeSwgbG9hZGluZ10pO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgbGV0IHZhbCA9IGlzVW5jb250cm9sbGVkID8gaW5uZXJWYWx1ZSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGFzRGVjaW1hbFBvaW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBpc1N0YW5kYWxvbmVNaW51cyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmF3SW5wdXQodmFsLCBuZWdhdGl2ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZWQudmFsO1xuICAgICAgICAgICAgICAgIGhhc0RlY2ltYWxQb2ludCA9IHBhcnNlZC5oYXNEZWNpbWFsUG9pbnQ7XG4gICAgICAgICAgICAgICAgaXNTdGFuZGFsb25lTWludXMgPSBwYXJzZWQuaXNTdGFuZGFsb25lTWludXM7XG4gICAgICAgICAgICAgICAgaWYgKCFuZWdhdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gc3RyaXBNaW51cyh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiAhaXNOdW1lcmljVHlwZSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBFbnN1cmUgbm9uLW5lZ2F0aXZlIHdoZW4gbmVnYXRpdmUgaXMgbm90IGFsbG93ZWRcbiAgICAgICAgaWYgKCFuZWdhdGl2ZSAmJiBpc051bWVyaWNUeXBlKHZhbCkpIHtcbiAgICAgICAgICAgIHZhbCA9IGFic1ZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5mb3JjZSBmcmFjdGlvbiBkaWdpdCBsaW1pdFxuICAgICAgICBpZiAoKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAgICAgaXNOdW1lcmljVHlwZShtYXhGcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHJ1bmNhdGVkLCBvdmVyZmxvdyB9ID0gdHJ1bmNhdGVGcmFjdGlvbkRpZ2l0cyhgJHt2YWx9YCwgTnVtYmVyKG1heEZyYWN0aW9uRGlnaXRzKSk7XG4gICAgICAgICAgICBpZiAob3ZlcmZsb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmNvbnRyb2xsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh0cnVuY2F0ZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gb25DaGFuZ2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob25DaGFuZ2VSZWYsIHsgdGFyZ2V0OiBpbnB1dFJlZi5jdXJyZW50IH0sIHRydW5jYXRlZCAhPT0gbnVsbCAmJiB0cnVuY2F0ZWQgIT09IHZvaWQgMCA/IHRydW5jYXRlZCA6ICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENsYW1wIHRvIG1pbi9tYXggcmFuZ2VcbiAgICAgICAgaWYgKGlzTnVtZXJpY1R5cGUodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsID0gY2FsY1ZhbHVlSW5SYW5nZShgJHt2YWx9YCwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRJbm5lclZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gaXNTdGFuZGFsb25lTWludXMgPyBDSEFSX01JTlVTIDogbm9ybWFsaXplVmFsdWUoYCR7dmFsfWAsIGhhc0RlY2ltYWxQb2ludCwgbmVnYXRpdmUpO1xuICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGNDYXJldFBvcyh2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDAgPyB2YWwgOiAnJywgaGFzRGVjaW1hbFBvaW50ID8gREVDSU1BTF9QT0lOVF9PRkZTRVQgOiAwLCBNYXRoLm1heChjYXJldFBvc1JlZi5jdXJyZW50LCAwKSk7XG4gICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9LCBbdmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzLCBtaW4sIG1heCwgbmVnYXRpdmVdKTtcbiAgICAvLyDilIDilIAgUmVuZGVyIOKUgOKUgFxuICAgIGNvbnN0IHdyYXBwZXJDbGFzc05hbWUgPSBjbHMoJ3dyYXBwZXInLCBqb2luQ2xzKHdyYXBwZXJDbHMsIGNscyhzaXplKSwgaW52YWxpZCAmJiBjbHMoJ2ludmFsaWQnKSwgc3VjY2VzcyAmJiBjbHMoJ3N1Y2Nlc3MnKSwgZGlzYWJsZWQgJiYgY2xzKCdkaXNhYmxlZCcpLCByZWFkT25seSAmJiBjbHMoJ3JlYWRvbmx5JyksIGlubmVyVmFsdWUgJiYgY2xzKCdmaWxsZWQnKSkpO1xuICAgIGNvbnN0IHJlbmRlckxhYmVsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWxhYmVsKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gX2pzeChTa2VsZXRvbiwgeyB3aWR0aDogU0tFTEVUT05fTEFCRUxfV0lEVEgsIGhlaWdodDogU0tFTEVUT05fTEFCRUxfSEVJR0hULCBjbGFzc05hbWU6IGNscygnbGFiZWwtbG9hZGluZycpIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xzKCdsYWJlbCcsIGpvaW5DbHMocmVxdWlyZWQgJiYgY2xzKCdsYWJlbC1yZXF1aXJlZCcpLCBsYWJlbENscykpLCBjaGlsZHJlbjogbGFiZWwgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJTdWZmaXggPSAoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkaW5nKVxuICAgICAgICAgICAgcmV0dXJuIF9qc3goU3Bpbm5lciwgeyBjbGFzc05hbWU6IGNscygnc3VmZml4LWxvYWRpbmcnKSwgc3Ryb2tlV2lkdGg6IFNQSU5ORVJfU1RST0tFX1dJRFRIIH0pO1xuICAgICAgICBpZiAoc3VmZml4KVxuICAgICAgICAgICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgcmVmOiBzdWZmaXhSZWYsIGNsYXNzTmFtZTogY2xzKCdzdWZmaXgnLCBzdWZmaXhFbGVDbHMpLCBjaGlsZHJlbjogc3VmZml4IH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiAoX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHdyYXBwZXJDbGFzc05hbWUsIGNoaWxkcmVuOiBbcmVuZGVyTGFiZWwoKSwgX2pzeHMoXCJkaXZcIiwgeyByZWY6IGNvbnRhaW5lclJlZiwgY2xhc3NOYW1lOiBjbHModm9pZCAwLCBqb2luQ2xzKGNsYXNzTmFtZSwgaXNGb2N1cyAmJiBjbHMoJ2ZvY3VzJykpKSwgb25DbGljazogaGFuZGxlQ29udGFpbmVyQ2xpY2ssIGNoaWxkcmVuOiBbcHJlZml4ICYmIChfanN4KFwic3BhblwiLCB7IHJlZjogcHJlZml4UmVmLCBjbGFzc05hbWU6IGNscygncHJlZml4JywgcHJlZml4RWxlQ2xzKSwgY2hpbGRyZW46IHByZWZpeCB9KSksIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNscygnZWxlbWVudCcsICghaXNGb2N1cyAmJiBpc01heFdpZHRoKSA/IGNscygnZWxlbWVudC1tYXgnKSA6ICcnKSwgY2hpbGRyZW46IF9qc3goXCJpbnB1dFwiLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IHJlZjogaW5wdXRSZWYsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCByZWFkT25seTogcmVhZE9ubHksIGRpc2FibGVkOiBkaXNhYmxlZCwgc3R5bGU6IHsgW0NTU19WQVJfSU5QVVRfV0lEVEhdOiBgJHtpbnB1dFdpZHRofXB4YCB9LCBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBvblNlbGVjdDogaGFuZGxlU2VsZWN0LCBvbkZvY3VzOiBoYW5kbGVGb2N1cywgb25CbHVyOiBoYW5kbGVCbHVyIH0pKSB9KSwgY3VycmVuY3kgJiYgKF9qc3goXCJzcGFuXCIsIHsgcmVmOiBjdXJyZW5jeVJlZiwgY2xhc3NOYW1lOiBjbHMoJ2N1cnJlbmN5JyksIGNoaWxkcmVuOiBjdXJyZW5jeSB9KSksIHJlbmRlclN1ZmZpeCgpLCBfanN4KFwic3BhblwiLCB7IHJlZjogZmFrZUVsZVJlZiwgY2xhc3NOYW1lOiBjbHMoJ2Zha2UnKSwgb25DbGljazogZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpLCBjaGlsZHJlbjogZm9ybWF0dGVkVmFsdWUgfSldIH0pLCAobWVzc2FnZSB8fCBmb290bm90ZSkgJiYgKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbHMoJ2V4dHJhJyksIGNoaWxkcmVuOiBbbWVzc2FnZSAmJiBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbHMoJ21lc3NhZ2UnLCBtZXNzYWdlQ2xzKSwgY2hpbGRyZW46IG1lc3NhZ2UgfSksIGZvb3Rub3RlICYmIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNscygnZm9vdG5vdGUnLCBmb290bm90ZUNscyksIGNoaWxkcmVuOiBmb290bm90ZSB9KV0gfSkpXSB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgbWVtbyhJbnB1dEFtb3VudCk7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9