@merchi/checkout 1.3.5

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 (122) hide show
  1. package/README.md +196 -0
  2. package/lib/actions/confirm.d.ts +2 -0
  3. package/lib/actions/confirm.js +85 -0
  4. package/lib/actions/customer.d.ts +2 -0
  5. package/lib/actions/customer.js +53 -0
  6. package/lib/actions/domain.d.ts +2 -0
  7. package/lib/actions/domain.js +65 -0
  8. package/lib/actions/files.d.ts +1 -0
  9. package/lib/actions/files.js +35 -0
  10. package/lib/actions/helpers.d.ts +19 -0
  11. package/lib/actions/helpers.js +125 -0
  12. package/lib/actions/invoice.d.ts +3 -0
  13. package/lib/actions/invoice.js +113 -0
  14. package/lib/area.d.ts +77 -0
  15. package/lib/area.js +298 -0
  16. package/lib/assets/merchi-monster-loader.gif +0 -0
  17. package/lib/checkoutSession.d.ts +32 -0
  18. package/lib/checkoutSession.js +151 -0
  19. package/lib/components/Alerts.d.ts +3 -0
  20. package/lib/components/Alerts.js +88 -0
  21. package/lib/components/CancelOrderConfirmModal.d.ts +10 -0
  22. package/lib/components/CancelOrderConfirmModal.js +50 -0
  23. package/lib/components/CheckoutSummaryFields.d.ts +11 -0
  24. package/lib/components/CheckoutSummaryFields.js +38 -0
  25. package/lib/components/Collapse.d.ts +3 -0
  26. package/lib/components/Collapse.js +34 -0
  27. package/lib/components/CustomerCheckoutMethodTabs.d.ts +6 -0
  28. package/lib/components/CustomerCheckoutMethodTabs.js +90 -0
  29. package/lib/components/DiscountInputGroup.d.ts +2 -0
  30. package/lib/components/DiscountInputGroup.js +256 -0
  31. package/lib/components/DraftImageUploaded.d.ts +8 -0
  32. package/lib/components/DraftImageUploaded.js +53 -0
  33. package/lib/components/FooterButtons.d.ts +11 -0
  34. package/lib/components/FooterButtons.js +28 -0
  35. package/lib/components/InvoiceInfo.d.ts +6 -0
  36. package/lib/components/InvoiceInfo.js +37 -0
  37. package/lib/components/JobInfoContent.d.ts +2 -0
  38. package/lib/components/JobInfoContent.js +728 -0
  39. package/lib/components/MerchiCheckout.d.ts +46 -0
  40. package/lib/components/MerchiCheckout.js +49 -0
  41. package/lib/components/MerchiCheckoutProvider.d.ts +167 -0
  42. package/lib/components/MerchiCheckoutProvider.js +569 -0
  43. package/lib/components/MerchiCheckoutTabs.d.ts +2 -0
  44. package/lib/components/MerchiCheckoutTabs.js +50 -0
  45. package/lib/components/TabPane.d.ts +7 -0
  46. package/lib/components/TabPane.js +21 -0
  47. package/lib/components/TabPaneAddress.d.ts +3 -0
  48. package/lib/components/TabPaneAddress.js +28 -0
  49. package/lib/components/TabPaneConfirm.d.ts +11 -0
  50. package/lib/components/TabPaneConfirm.js +288 -0
  51. package/lib/components/TabPaneContainer.d.ts +6 -0
  52. package/lib/components/TabPaneContainer.js +13 -0
  53. package/lib/components/TabPaneCustomer.d.ts +5 -0
  54. package/lib/components/TabPaneCustomer.js +93 -0
  55. package/lib/components/TabPaneNewDomain.d.ts +3 -0
  56. package/lib/components/TabPaneNewDomain.js +39 -0
  57. package/lib/components/TabPanePayment.d.ts +3 -0
  58. package/lib/components/TabPanePayment.js +99 -0
  59. package/lib/components/TabPaneSubmitted.d.ts +3 -0
  60. package/lib/components/TabPaneSubmitted.js +90 -0
  61. package/lib/components/TitleStep.d.ts +6 -0
  62. package/lib/components/TitleStep.js +24 -0
  63. package/lib/components/buttons/ButtonInvoiceDownload.d.ts +3 -0
  64. package/lib/components/buttons/ButtonInvoiceDownload.js +91 -0
  65. package/lib/components/buttons/ButtonNext.d.ts +10 -0
  66. package/lib/components/buttons/ButtonNext.js +48 -0
  67. package/lib/components/buttons/ButtonPrevious.d.ts +7 -0
  68. package/lib/components/buttons/ButtonPrevious.js +36 -0
  69. package/lib/components/buttons/index.d.ts +3 -0
  70. package/lib/components/buttons/index.js +4 -0
  71. package/lib/components/currency.d.ts +5 -0
  72. package/lib/components/currency.js +223 -0
  73. package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.d.ts +7 -0
  74. package/lib/components/forms/CheckboxBillingAddressSameAsShippingAddress.js +22 -0
  75. package/lib/components/forms/FormAddresses.d.ts +6 -0
  76. package/lib/components/forms/FormAddresses.js +251 -0
  77. package/lib/components/forms/FormCustomerNew.d.ts +4 -0
  78. package/lib/components/forms/FormCustomerNew.js +197 -0
  79. package/lib/components/forms/FormCustomerReturning.d.ts +3 -0
  80. package/lib/components/forms/FormCustomerReturning.js +147 -0
  81. package/lib/components/forms/FormDomainNew.d.ts +2 -0
  82. package/lib/components/forms/FormDomainNew.js +152 -0
  83. package/lib/components/forms/FormWhatsappCustomer.d.ts +4 -0
  84. package/lib/components/forms/FormWhatsappCustomer.js +217 -0
  85. package/lib/components/forms/InputAcceptUserTermsAndConditions.d.ts +7 -0
  86. package/lib/components/forms/InputAcceptUserTermsAndConditions.js +38 -0
  87. package/lib/components/forms/InputCheckStoreName.d.ts +7 -0
  88. package/lib/components/forms/InputCheckStoreName.js +168 -0
  89. package/lib/components/forms/InputError.d.ts +8 -0
  90. package/lib/components/forms/InputError.js +19 -0
  91. package/lib/components/forms/InputFileUpload.d.ts +12 -0
  92. package/lib/components/forms/InputFileUpload.js +191 -0
  93. package/lib/components/forms/InputSelect.d.ts +14 -0
  94. package/lib/components/forms/InputSelect.js +52 -0
  95. package/lib/components/forms/InputText.d.ts +12 -0
  96. package/lib/components/forms/InputText.js +59 -0
  97. package/lib/components/forms/InputsAddress.d.ts +12 -0
  98. package/lib/components/forms/InputsAddress.js +533 -0
  99. package/lib/components/forms/index.d.ts +5 -0
  100. package/lib/components/forms/index.js +6 -0
  101. package/lib/components/lists/ListShipmentQuoteOptions.d.ts +9 -0
  102. package/lib/components/lists/ListShipmentQuoteOptions.js +145 -0
  103. package/lib/components/lists/index.d.ts +2 -0
  104. package/lib/components/lists/index.js +3 -0
  105. package/lib/fonts/nunito-bold-webfont.woff +0 -0
  106. package/lib/fonts/nunito-bold-webfont.woff2 +0 -0
  107. package/lib/fonts/nunito-regular-webfont.woff +0 -0
  108. package/lib/fonts/nunito-regular-webfont.woff2 +0 -0
  109. package/lib/index.d.ts +3 -0
  110. package/lib/index.js +4 -0
  111. package/lib/merchi_source.d.ts +2 -0
  112. package/lib/merchi_source.js +31 -0
  113. package/lib/styles/globals.css +2546 -0
  114. package/lib/styles/globals.css.map +1 -0
  115. package/lib/styles/globals.scss +2763 -0
  116. package/lib/tabs_utils.d.ts +31 -0
  117. package/lib/tabs_utils.js +104 -0
  118. package/lib/types.d.ts +43 -0
  119. package/lib/types.js +40 -0
  120. package/lib/utils.d.ts +68 -0
  121. package/lib/utils.js +560 -0
  122. package/package.json +96 -0
@@ -0,0 +1,533 @@
1
+ 'use client';
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
5
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
6
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
7
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
8
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
9
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
10
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
11
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
12
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
13
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
14
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
16
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
17
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
18
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
19
+ import React from 'react';
20
+ import { useEffect } from 'react';
21
+ import { debounce } from 'lodash';
22
+ import { Merchi } from '@merchi/sdk';
23
+ import { CountryDropdown, RegionDropdown } from 'react-country-region-selector';
24
+ import { Controller } from 'react-hook-form';
25
+ import InputText from './InputText';
26
+ import { useMerchiCheckboutContext } from '../MerchiCheckoutProvider';
27
+ import { addressInOneLine, googlePlacesResultAsNewAddress } from '../../utils';
28
+ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
29
+ import { faSpinner, faTimes, faEdit, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
30
+ import { useState } from 'react';
31
+ import Collapse from '../Collapse';
32
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
33
+ var merchi = new Merchi();
34
+ export function InputsAddress(_ref) {
35
+ var _addressLocal$lineOne;
36
+ var _ref$defaultAddress = _ref.defaultAddress,
37
+ defaultAddress = _ref$defaultAddress === void 0 ? {} : _ref$defaultAddress,
38
+ _ref$labelGeoSuggest = _ref.labelGeoSuggest,
39
+ labelGeoSuggest = _ref$labelGeoSuggest === void 0 ? 'Address' : _ref$labelGeoSuggest,
40
+ hookForm = _ref.hookForm,
41
+ name = _ref.name,
42
+ _ref$placeholder = _ref.placeholder,
43
+ placeholder = _ref$placeholder === void 0 ? 'Search your address' : _ref$placeholder,
44
+ recommendedAddress = _ref.recommendedAddress,
45
+ updateAddress = _ref.updateAddress;
46
+ var _useMerchiCheckboutCo = useMerchiCheckboutContext(),
47
+ classNameMerchiCheckoutFormGroup = _useMerchiCheckboutCo.classNameMerchiCheckoutFormGroup,
48
+ classNameMerchiCheckoutFormInput = _useMerchiCheckboutCo.classNameMerchiCheckoutFormInput,
49
+ classNameMerchiCheckoutFormSelect = _useMerchiCheckboutCo.classNameMerchiCheckoutFormSelect,
50
+ classNameMerchiCheckoutRow = _useMerchiCheckboutCo.classNameMerchiCheckoutRow,
51
+ classNameMerchiCheckoutRowColumn = _useMerchiCheckboutCo.classNameMerchiCheckoutRowColumn,
52
+ classNameMerchiCheckoutGoogleSuggestList = _useMerchiCheckboutCo.classNameMerchiCheckoutGoogleSuggestList,
53
+ classNameMerchiCheckoutGoogleSuggestListItem = _useMerchiCheckboutCo.classNameMerchiCheckoutGoogleSuggestListItem;
54
+ var _React$useState = React.useState(''),
55
+ _React$useState2 = _slicedToArray(_React$useState, 2),
56
+ inputValue = _React$useState2[0],
57
+ setInputValue = _React$useState2[1];
58
+ var _React$useState3 = React.useState([]),
59
+ _React$useState4 = _slicedToArray(_React$useState3, 2),
60
+ suggestions = _React$useState4[0],
61
+ setSuggestions = _React$useState4[1];
62
+ var _React$useState5 = React.useState(false),
63
+ _React$useState6 = _slicedToArray(_React$useState5, 2),
64
+ showSuggestions = _React$useState6[0],
65
+ setShowSuggestions = _React$useState6[1];
66
+ var _React$useState7 = React.useState(false),
67
+ _React$useState8 = _slicedToArray(_React$useState7, 2),
68
+ loading = _React$useState8[0],
69
+ setLoading = _React$useState8[1];
70
+ var _React$useState9 = React.useState(-1),
71
+ _React$useState0 = _slicedToArray(_React$useState9, 2),
72
+ selectedIndex = _React$useState0[0],
73
+ setSelectedIndex = _React$useState0[1];
74
+ var _React$useState1 = React.useState(_objectSpread({}, defaultAddress)),
75
+ _React$useState10 = _slicedToArray(_React$useState1, 2),
76
+ addressLocal = _React$useState10[0],
77
+ setAddressLocal = _React$useState10[1];
78
+ var inputRef = React.useRef(null);
79
+ var suggestionsRef = React.useRef(null);
80
+ var control = hookForm.control,
81
+ _hookForm$formState = hookForm.formState,
82
+ errors = _hookForm$formState.errors,
83
+ isValid = _hookForm$formState.isValid,
84
+ submitCount = _hookForm$formState.submitCount,
85
+ setValue = hookForm.setValue,
86
+ getValues = hookForm.getValues,
87
+ reset = hookForm.reset,
88
+ watch = hookForm.watch;
89
+ var inputName = function inputName(_name) {
90
+ return "".concat(name ? "".concat(name, ".") : '').concat(_name);
91
+ };
92
+ var selectedCountry = watch(inputName('country'));
93
+ function onChangeCountryState() {
94
+ // Parent updateAddress expects a single address object (see FormAddresses).
95
+ updateAddress(getValues()[name]);
96
+ }
97
+ var _useState = useState(false),
98
+ _useState2 = _slicedToArray(_useState, 2),
99
+ addressFieldsOpen = _useState2[0],
100
+ setAddressFieldsOpen = _useState2[1];
101
+ var toggleAddressFieldsOpen = function toggleAddressFieldsOpen() {
102
+ return setAddressFieldsOpen(!addressFieldsOpen);
103
+ };
104
+ useEffect(function () {
105
+ if (!isValid && !addressFieldsOpen && submitCount > 0) {
106
+ toggleAddressFieldsOpen();
107
+ }
108
+ }, [isValid, submitCount]);
109
+ useEffect(function () {
110
+ if (!(defaultAddress !== null && defaultAddress !== void 0 && defaultAddress.lineOne)) return;
111
+ var nextAddress = _objectSpread({}, defaultAddress);
112
+ setAddressLocal(nextAddress);
113
+ setInputValue(addressInOneLine(nextAddress));
114
+ reset(_objectSpread(_objectSpread({}, getValues()), {}, _defineProperty({}, name, nextAddress)));
115
+ }, [defaultAddress === null || defaultAddress === void 0 ? void 0 : defaultAddress.lineOne, defaultAddress === null || defaultAddress === void 0 ? void 0 : defaultAddress.city, defaultAddress === null || defaultAddress === void 0 ? void 0 : defaultAddress.postcode]);
116
+ function searchAddresses(_x) {
117
+ return _searchAddresses.apply(this, arguments);
118
+ } // Debounced search function
119
+ function _searchAddresses() {
120
+ _searchAddresses = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(query) {
121
+ var response, _t;
122
+ return _regenerator().w(function (_context) {
123
+ while (1) switch (_context.p = _context.n) {
124
+ case 0:
125
+ if (query.trim()) {
126
+ _context.n = 1;
127
+ break;
128
+ }
129
+ setSuggestions([]);
130
+ setShowSuggestions(false);
131
+ return _context.a(2);
132
+ case 1:
133
+ setLoading(true);
134
+ _context.p = 2;
135
+ _context.n = 3;
136
+ return merchi.authenticatedFetch('/addresses/place-search/', {
137
+ method: 'GET',
138
+ query: [['q', query]]
139
+ });
140
+ case 3:
141
+ response = _context.v;
142
+ if (response.status === 'success') {
143
+ setSuggestions(response.results || []);
144
+ setShowSuggestions(true);
145
+ setSelectedIndex(-1);
146
+ }
147
+ _context.n = 5;
148
+ break;
149
+ case 4:
150
+ _context.p = 4;
151
+ _t = _context.v;
152
+ console.error('Error searching addresses:', _t);
153
+ setSuggestions([]);
154
+ setShowSuggestions(false);
155
+ case 5:
156
+ _context.p = 5;
157
+ setLoading(false);
158
+ return _context.f(5);
159
+ case 6:
160
+ return _context.a(2);
161
+ }
162
+ }, _callee, null, [[2, 4, 5, 6]]);
163
+ }));
164
+ return _searchAddresses.apply(this, arguments);
165
+ }
166
+ var debouncedSearch = React.useMemo(function () {
167
+ return debounce(searchAddresses, 500);
168
+ }, []);
169
+ function handleInputChange(event) {
170
+ var value = event.target.value;
171
+ setInputValue(value);
172
+ debouncedSearch(value);
173
+ }
174
+ function handleSuggestionSelect(_x2) {
175
+ return _handleSuggestionSelect.apply(this, arguments);
176
+ }
177
+ function _handleSuggestionSelect() {
178
+ _handleSuggestionSelect = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(suggestion) {
179
+ var response, parsedAddress, fallbackAddress, _fallbackAddress, _fallbackAddress2, _t2;
180
+ return _regenerator().w(function (_context2) {
181
+ while (1) switch (_context2.p = _context2.n) {
182
+ case 0:
183
+ setLoading(true);
184
+ _context2.p = 1;
185
+ _context2.n = 2;
186
+ return merchi.authenticatedFetch('/addresses/place-details/', {
187
+ method: 'GET',
188
+ query: [['place_id', suggestion.placeId]]
189
+ });
190
+ case 2:
191
+ response = _context2.v;
192
+ if (response.status === 'success') {
193
+ // Parse the Google Places result into address components
194
+ parsedAddress = googlePlacesResultAsNewAddress(response.result);
195
+ if (parsedAddress) {
196
+ setInputValue(addressInOneLine(parsedAddress));
197
+ updateAddress(parsedAddress);
198
+ setAddressLocal(parsedAddress);
199
+ } else {
200
+ // Fallback to using the description if parsing fails
201
+ fallbackAddress = {
202
+ city: '',
203
+ country: '',
204
+ lineOne: suggestion.description,
205
+ lineTwo: '',
206
+ postcode: '',
207
+ state: ''
208
+ };
209
+ setInputValue(suggestion.description);
210
+ updateAddress(fallbackAddress);
211
+ setAddressLocal(fallbackAddress);
212
+ }
213
+ } else {
214
+ // Fallback to using the description if API call fails
215
+ _fallbackAddress = {
216
+ city: '',
217
+ country: '',
218
+ lineOne: suggestion.description,
219
+ lineTwo: '',
220
+ postcode: '',
221
+ state: ''
222
+ };
223
+ setInputValue(suggestion.description);
224
+ updateAddress(_fallbackAddress);
225
+ setAddressLocal(_fallbackAddress);
226
+ }
227
+ _context2.n = 4;
228
+ break;
229
+ case 3:
230
+ _context2.p = 3;
231
+ _t2 = _context2.v;
232
+ console.error('Error fetching place details:', _t2);
233
+ // Fallback to using the description if there's an error
234
+ _fallbackAddress2 = {
235
+ city: '',
236
+ country: '',
237
+ lineOne: suggestion.description,
238
+ lineTwo: '',
239
+ postcode: '',
240
+ state: ''
241
+ };
242
+ setInputValue(suggestion.description);
243
+ updateAddress(_fallbackAddress2);
244
+ setAddressLocal(_fallbackAddress2);
245
+ case 4:
246
+ _context2.p = 4;
247
+ setLoading(false);
248
+ setShowSuggestions(false);
249
+ setSuggestions([]);
250
+ setSelectedIndex(-1);
251
+ return _context2.f(4);
252
+ case 5:
253
+ return _context2.a(2);
254
+ }
255
+ }, _callee2, null, [[1, 3, 4, 5]]);
256
+ }));
257
+ return _handleSuggestionSelect.apply(this, arguments);
258
+ }
259
+ function handleKeyDown(event) {
260
+ if (!showSuggestions || suggestions.length === 0) return;
261
+ switch (event.key) {
262
+ case 'ArrowDown':
263
+ event.preventDefault();
264
+ setSelectedIndex(function (prev) {
265
+ return prev < suggestions.length - 1 ? prev + 1 : 0;
266
+ });
267
+ break;
268
+ case 'ArrowUp':
269
+ event.preventDefault();
270
+ setSelectedIndex(function (prev) {
271
+ return prev > 0 ? prev - 1 : suggestions.length - 1;
272
+ });
273
+ break;
274
+ case 'Enter':
275
+ event.preventDefault();
276
+ if (selectedIndex >= 0 && selectedIndex < suggestions.length) {
277
+ handleSuggestionSelect(suggestions[selectedIndex]);
278
+ }
279
+ break;
280
+ case 'Escape':
281
+ setShowSuggestions(false);
282
+ setSelectedIndex(-1);
283
+ break;
284
+ }
285
+ }
286
+ function handleInputBlur(event) {
287
+ // Delay hiding suggestions to allow click events on suggestions
288
+ setTimeout(function () {
289
+ var _suggestionsRef$curre;
290
+ if (!((_suggestionsRef$curre = suggestionsRef.current) !== null && _suggestionsRef$curre !== void 0 && _suggestionsRef$curre.contains(document.activeElement))) {
291
+ setShowSuggestions(false);
292
+ setSelectedIndex(-1);
293
+ }
294
+ }, 200);
295
+ }
296
+ function handleInputFocus() {
297
+ if (suggestions.length > 0) {
298
+ setShowSuggestions(true);
299
+ }
300
+ }
301
+ function applyRecommendedAddress() {
302
+ if (!(recommendedAddress !== null && recommendedAddress !== void 0 && recommendedAddress.lineOne)) return;
303
+ var nextAddress = _objectSpread({}, recommendedAddress);
304
+ setInputValue(addressInOneLine(nextAddress));
305
+ updateAddress(nextAddress);
306
+ setAddressLocal(nextAddress);
307
+ setShowSuggestions(false);
308
+ setSuggestions([]);
309
+ }
310
+ var showRecommendedAddress = Boolean(recommendedAddress === null || recommendedAddress === void 0 ? void 0 : recommendedAddress.lineOne) && !(addressLocal !== null && addressLocal !== void 0 && (_addressLocal$lineOne = addressLocal.lineOne) !== null && _addressLocal$lineOne !== void 0 && _addressLocal$lineOne.trim());
311
+ function clearInput(e) {
312
+ e.preventDefault();
313
+ setInputValue('');
314
+ setSuggestions([]);
315
+ setShowSuggestions(false);
316
+ updateAddress({
317
+ city: '',
318
+ country: '',
319
+ lineOne: '',
320
+ lineTwo: '',
321
+ postcode: '',
322
+ state: ''
323
+ });
324
+ }
325
+ var hasErrors = !!Object.keys(errors).length;
326
+ var addressForm = /*#__PURE__*/_jsxs(_Fragment, {
327
+ children: [/*#__PURE__*/_jsx(InputText, {
328
+ control: control,
329
+ label: "Address line one",
330
+ name: inputName("lineOne"),
331
+ placeholder: "123 Fake st",
332
+ rules: {
333
+ required: 'Address line one is required.'
334
+ }
335
+ }), /*#__PURE__*/_jsx(InputText, {
336
+ control: control,
337
+ label: "Continue address",
338
+ name: inputName("lineTwo"),
339
+ placeholder: "Continue address..."
340
+ }), /*#__PURE__*/_jsxs("div", {
341
+ className: classNameMerchiCheckoutRow,
342
+ children: [/*#__PURE__*/_jsx("div", {
343
+ className: classNameMerchiCheckoutRowColumn,
344
+ children: /*#__PURE__*/_jsx(InputText, {
345
+ control: control,
346
+ label: "City / Province",
347
+ name: inputName("city"),
348
+ placeholder: "City",
349
+ rules: {
350
+ required: 'City / Province is required.'
351
+ }
352
+ })
353
+ }), /*#__PURE__*/_jsx("div", {
354
+ className: classNameMerchiCheckoutRowColumn,
355
+ children: /*#__PURE__*/_jsx(InputText, {
356
+ control: control,
357
+ label: "Post / Zip code",
358
+ name: inputName("postcode"),
359
+ placeholder: "90210"
360
+ })
361
+ })]
362
+ }), /*#__PURE__*/_jsxs("div", {
363
+ className: classNameMerchiCheckoutRow,
364
+ children: [/*#__PURE__*/_jsx("div", {
365
+ className: classNameMerchiCheckoutRowColumn,
366
+ children: /*#__PURE__*/_jsxs("div", {
367
+ className: classNameMerchiCheckoutFormGroup,
368
+ children: [/*#__PURE__*/_jsx("label", {
369
+ children: "Country"
370
+ }), /*#__PURE__*/_jsx(Controller, {
371
+ name: inputName("country"),
372
+ control: control,
373
+ defaultValue: defaultAddress && defaultAddress.country,
374
+ render: function render(_ref2) {
375
+ var field = _ref2.field;
376
+ return /*#__PURE__*/_jsx(CountryDropdown, _objectSpread(_objectSpread({}, field), {}, {
377
+ classes: classNameMerchiCheckoutFormSelect,
378
+ onChange: function onChange(val) {
379
+ setValue(inputName("country"), val);
380
+ // Regions are country-specific; clear stale state on country change.
381
+ setValue(inputName("state"), '');
382
+ field.onChange(val);
383
+ onChangeCountryState();
384
+ },
385
+ valueType: "short"
386
+ }));
387
+ }
388
+ })]
389
+ })
390
+ }), /*#__PURE__*/_jsx("div", {
391
+ className: classNameMerchiCheckoutRowColumn,
392
+ children: /*#__PURE__*/_jsxs("div", {
393
+ className: classNameMerchiCheckoutFormGroup,
394
+ children: [/*#__PURE__*/_jsx("label", {
395
+ children: "State / Region"
396
+ }), /*#__PURE__*/_jsx(Controller, {
397
+ name: inputName("state"),
398
+ control: control,
399
+ defaultValue: defaultAddress && defaultAddress.state,
400
+ render: function render(_ref3) {
401
+ var field = _ref3.field;
402
+ return /*#__PURE__*/_jsx(RegionDropdown, _objectSpread(_objectSpread({}, field), {}, {
403
+ countryValueType: "short",
404
+ country: selectedCountry,
405
+ classes: classNameMerchiCheckoutFormSelect,
406
+ onChange: function onChange(val) {
407
+ setValue(inputName("state"), val);
408
+ field.onChange(val);
409
+ onChangeCountryState();
410
+ },
411
+ valueType: "short"
412
+ }));
413
+ }
414
+ })]
415
+ })
416
+ })]
417
+ })]
418
+ });
419
+ return /*#__PURE__*/_jsxs(_Fragment, {
420
+ children: [/*#__PURE__*/_jsxs("div", {
421
+ className: classNameMerchiCheckoutFormGroup,
422
+ children: [/*#__PURE__*/_jsx("label", {
423
+ children: labelGeoSuggest
424
+ }), showRecommendedAddress && /*#__PURE__*/_jsx("div", {
425
+ className: "merchi-checkout-address-recommendation",
426
+ children: /*#__PURE__*/_jsxs("button", {
427
+ type: "button",
428
+ className: "merchi-checkout-address-recommendation-btn",
429
+ onClick: applyRecommendedAddress,
430
+ children: [/*#__PURE__*/_jsx("span", {
431
+ className: "merchi-checkout-address-recommendation-label",
432
+ children: "Use previous address"
433
+ }), /*#__PURE__*/_jsx("span", {
434
+ className: "merchi-checkout-address-recommendation-value",
435
+ children: addressInOneLine(recommendedAddress)
436
+ })]
437
+ })
438
+ }), /*#__PURE__*/_jsxs("div", {
439
+ className: "position-relative",
440
+ style: {
441
+ position: 'relative'
442
+ },
443
+ children: [/*#__PURE__*/_jsx("input", {
444
+ autoComplete: "new-password",
445
+ ref: inputRef,
446
+ type: "text",
447
+ name: "address-suggestion",
448
+ className: classNameMerchiCheckoutFormInput,
449
+ placeholder: placeholder,
450
+ value: inputValue,
451
+ onChange: handleInputChange,
452
+ onKeyDown: handleKeyDown,
453
+ onBlur: handleInputBlur,
454
+ onFocus: handleInputFocus,
455
+ style: {
456
+ paddingRight: loading ? '40px' : '20px'
457
+ }
458
+ }), loading && /*#__PURE__*/_jsx("div", {
459
+ className: "position-absolute",
460
+ style: {
461
+ position: 'absolute',
462
+ right: '10px',
463
+ top: '50%',
464
+ transform: 'translateY(-50%)'
465
+ },
466
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
467
+ icon: faSpinner,
468
+ spin: true
469
+ })
470
+ }), inputValue && !loading && /*#__PURE__*/_jsx("button", {
471
+ type: "button",
472
+ className: "btn btn-sm position-absolute",
473
+ style: {
474
+ right: '5px',
475
+ top: '50%',
476
+ transform: 'translateY(-50%)',
477
+ border: 'none',
478
+ background: 'transparent',
479
+ padding: '2px 5px',
480
+ position: 'absolute'
481
+ },
482
+ onClick: clearInput,
483
+ children: /*#__PURE__*/_jsx(FontAwesomeIcon, {
484
+ icon: faTimes
485
+ })
486
+ }), showSuggestions && suggestions.length > 0 && /*#__PURE__*/_jsx("div", {
487
+ ref: suggestionsRef,
488
+ className: classNameMerchiCheckoutGoogleSuggestList,
489
+ role: "listbox",
490
+ children: suggestions.map(function (suggestion, index) {
491
+ var _suggestion$structure, _suggestion$structure2;
492
+ return /*#__PURE__*/_jsxs("div", {
493
+ className: "".concat(classNameMerchiCheckoutGoogleSuggestListItem, " ").concat(index === selectedIndex ? 'active' : ''),
494
+ role: "option",
495
+ onMouseDown: function onMouseDown(e) {
496
+ e.preventDefault();
497
+ handleSuggestionSelect(suggestion);
498
+ },
499
+ onMouseEnter: function onMouseEnter() {
500
+ return setSelectedIndex(index);
501
+ },
502
+ children: [/*#__PURE__*/_jsx("strong", {
503
+ children: ((_suggestion$structure = suggestion.structuredFormatting) === null || _suggestion$structure === void 0 ? void 0 : _suggestion$structure.main_text) || suggestion.description
504
+ }), ((_suggestion$structure2 = suggestion.structuredFormatting) === null || _suggestion$structure2 === void 0 ? void 0 : _suggestion$structure2.secondary_text) && /*#__PURE__*/_jsx("div", {
505
+ className: "text-muted small",
506
+ children: suggestion.structuredFormatting.secondary_text
507
+ })]
508
+ }, suggestion.placeId);
509
+ })
510
+ })]
511
+ })]
512
+ }), /*#__PURE__*/_jsx(Collapse, {
513
+ isOpen: addressFieldsOpen,
514
+ children: addressForm
515
+ }), /*#__PURE__*/_jsxs("div", {
516
+ className: "d-flex align-items-center",
517
+ children: [hasErrors && /*#__PURE__*/_jsxs("div", {
518
+ className: "text-danger",
519
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
520
+ icon: faExclamationTriangle
521
+ }), " Invalid address!"]
522
+ }), /*#__PURE__*/_jsxs("a", {
523
+ className: "ml-auto btn btn-sm btn-link ".concat(hasErrors && 'text-danger'),
524
+ onClick: toggleAddressFieldsOpen,
525
+ children: [/*#__PURE__*/_jsx(FontAwesomeIcon, {
526
+ icon: addressFieldsOpen ? faTimes : faEdit
527
+ }), " ", addressFieldsOpen ? 'Close' : 'Edit fields']
528
+ })]
529
+ })]
530
+ });
531
+ }
532
+ export default InputsAddress;
533
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJfcmVnZW5lcmF0b3IiLCJlIiwidCIsInIiLCJuIiwidG9TdHJpbmdUYWciLCJpIiwiYyIsIkdlbmVyYXRvciIsInUiLCJPYmplY3QiLCJjcmVhdGUiLCJfcmVnZW5lcmF0b3JEZWZpbmUyIiwiZiIsInAiLCJ5IiwiRyIsInYiLCJhIiwiZCIsImJpbmQiLCJsZW5ndGgiLCJsIiwiVHlwZUVycm9yIiwiY2FsbCIsImRvbmUiLCJ2YWx1ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiZGlzcGxheU5hbWUiLCJ3IiwibSIsImRlZmluZVByb3BlcnR5IiwiX3JlZ2VuZXJhdG9yRGVmaW5lIiwiX2ludm9rZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicHVzaCIsIl9vYmplY3RTcHJlYWQiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfdG9Qcm9wZXJ0eUtleSIsIl90b1ByaW1pdGl2ZSIsInRvUHJpbWl0aXZlIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsIkFycmF5IiwiZnJvbSIsInRlc3QiLCJuZXh0IiwiaXNBcnJheSIsIlJlYWN0IiwidXNlRWZmZWN0IiwiZGVib3VuY2UiLCJNZXJjaGkiLCJDb3VudHJ5RHJvcGRvd24iLCJSZWdpb25Ecm9wZG93biIsIkNvbnRyb2xsZXIiLCJJbnB1dFRleHQiLCJ1c2VNZXJjaGlDaGVja2JvdXRDb250ZXh0IiwiYWRkcmVzc0luT25lTGluZSIsImdvb2dsZVBsYWNlc1Jlc3VsdEFzTmV3QWRkcmVzcyIsIkZvbnRBd2Vzb21lSWNvbiIsImZhU3Bpbm5lciIsImZhVGltZXMiLCJmYUVkaXQiLCJmYUV4Y2xhbWF0aW9uVHJpYW5nbGUiLCJ1c2VTdGF0ZSIsIkNvbGxhcHNlIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwibWVyY2hpIiwiSW5wdXRzQWRkcmVzcyIsIl9yZWYiLCJfYWRkcmVzc0xvY2FsJGxpbmVPbmUiLCJfcmVmJGRlZmF1bHRBZGRyZXNzIiwiZGVmYXVsdEFkZHJlc3MiLCJfcmVmJGxhYmVsR2VvU3VnZ2VzdCIsImxhYmVsR2VvU3VnZ2VzdCIsImhvb2tGb3JtIiwiX3JlZiRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRBZGRyZXNzIiwidXBkYXRlQWRkcmVzcyIsIl91c2VNZXJjaGlDaGVja2JvdXRDbyIsImNsYXNzTmFtZU1lcmNoaUNoZWNrb3V0Rm9ybUdyb3VwIiwiY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtSW5wdXQiLCJjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1TZWxlY3QiLCJjbGFzc05hbWVNZXJjaGlDaGVja291dFJvdyIsImNsYXNzTmFtZU1lcmNoaUNoZWNrb3V0Um93Q29sdW1uIiwiY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRHb29nbGVTdWdnZXN0TGlzdCIsImNsYXNzTmFtZU1lcmNoaUNoZWNrb3V0R29vZ2xlU3VnZ2VzdExpc3RJdGVtIiwiX1JlYWN0JHVzZVN0YXRlIiwiX1JlYWN0JHVzZVN0YXRlMiIsImlucHV0VmFsdWUiLCJzZXRJbnB1dFZhbHVlIiwiX1JlYWN0JHVzZVN0YXRlMyIsIl9SZWFjdCR1c2VTdGF0ZTQiLCJzdWdnZXN0aW9ucyIsInNldFN1Z2dlc3Rpb25zIiwiX1JlYWN0JHVzZVN0YXRlNSIsIl9SZWFjdCR1c2VTdGF0ZTYiLCJzaG93U3VnZ2VzdGlvbnMiLCJzZXRTaG93U3VnZ2VzdGlvbnMiLCJfUmVhY3QkdXNlU3RhdGU3IiwiX1JlYWN0JHVzZVN0YXRlOCIsImxvYWRpbmciLCJzZXRMb2FkaW5nIiwiX1JlYWN0JHVzZVN0YXRlOSIsIl9SZWFjdCR1c2VTdGF0ZTAiLCJzZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWRJbmRleCIsIl9SZWFjdCR1c2VTdGF0ZTEiLCJfUmVhY3QkdXNlU3RhdGUxMCIsImFkZHJlc3NMb2NhbCIsInNldEFkZHJlc3NMb2NhbCIsImlucHV0UmVmIiwidXNlUmVmIiwic3VnZ2VzdGlvbnNSZWYiLCJjb250cm9sIiwiX2hvb2tGb3JtJGZvcm1TdGF0ZSIsImZvcm1TdGF0ZSIsImVycm9ycyIsImlzVmFsaWQiLCJzdWJtaXRDb3VudCIsInNldFZhbHVlIiwiZ2V0VmFsdWVzIiwicmVzZXQiLCJ3YXRjaCIsImlucHV0TmFtZSIsIl9uYW1lIiwiY29uY2F0Iiwic2VsZWN0ZWRDb3VudHJ5Iiwib25DaGFuZ2VDb3VudHJ5U3RhdGUiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWRkcmVzc0ZpZWxkc09wZW4iLCJzZXRBZGRyZXNzRmllbGRzT3BlbiIsInRvZ2dsZUFkZHJlc3NGaWVsZHNPcGVuIiwibGluZU9uZSIsIm5leHRBZGRyZXNzIiwiY2l0eSIsInBvc3Rjb2RlIiwic2VhcmNoQWRkcmVzc2VzIiwiX3giLCJfc2VhcmNoQWRkcmVzc2VzIiwiX2NhbGxlZSIsInF1ZXJ5IiwicmVzcG9uc2UiLCJfdCIsIl9jb250ZXh0IiwidHJpbSIsImF1dGhlbnRpY2F0ZWRGZXRjaCIsIm1ldGhvZCIsInN0YXR1cyIsInJlc3VsdHMiLCJjb25zb2xlIiwiZXJyb3IiLCJkZWJvdW5jZWRTZWFyY2giLCJ1c2VNZW1vIiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJldmVudCIsInRhcmdldCIsImhhbmRsZVN1Z2dlc3Rpb25TZWxlY3QiLCJfeDIiLCJfaGFuZGxlU3VnZ2VzdGlvblNlbGVjdCIsIl9jYWxsZWUyIiwic3VnZ2VzdGlvbiIsInBhcnNlZEFkZHJlc3MiLCJmYWxsYmFja0FkZHJlc3MiLCJfZmFsbGJhY2tBZGRyZXNzIiwiX2ZhbGxiYWNrQWRkcmVzczIiLCJfdDIiLCJfY29udGV4dDIiLCJwbGFjZUlkIiwicmVzdWx0IiwiY291bnRyeSIsImRlc2NyaXB0aW9uIiwibGluZVR3byIsInN0YXRlIiwiaGFuZGxlS2V5RG93biIsImtleSIsInByZXZlbnREZWZhdWx0IiwicHJldiIsImhhbmRsZUlucHV0Qmx1ciIsInNldFRpbWVvdXQiLCJfc3VnZ2VzdGlvbnNSZWYkY3VycmUiLCJjdXJyZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFjdGl2ZUVsZW1lbnQiLCJoYW5kbGVJbnB1dEZvY3VzIiwiYXBwbHlSZWNvbW1lbmRlZEFkZHJlc3MiLCJzaG93UmVjb21tZW5kZWRBZGRyZXNzIiwiQm9vbGVhbiIsImNsZWFySW5wdXQiLCJoYXNFcnJvcnMiLCJhZGRyZXNzRm9ybSIsImNoaWxkcmVuIiwibGFiZWwiLCJydWxlcyIsInJlcXVpcmVkIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwicmVuZGVyIiwiX3JlZjIiLCJmaWVsZCIsImNsYXNzZXMiLCJvbkNoYW5nZSIsInZhbCIsInZhbHVlVHlwZSIsIl9yZWYzIiwiY291bnRyeVZhbHVlVHlwZSIsInR5cGUiLCJvbkNsaWNrIiwic3R5bGUiLCJwb3NpdGlvbiIsImF1dG9Db21wbGV0ZSIsInJlZiIsIm9uS2V5RG93biIsIm9uQmx1ciIsIm9uRm9jdXMiLCJwYWRkaW5nUmlnaHQiLCJyaWdodCIsInRvcCIsInRyYW5zZm9ybSIsImljb24iLCJzcGluIiwiYm9yZGVyIiwiYmFja2dyb3VuZCIsInBhZGRpbmciLCJyb2xlIiwibWFwIiwiaW5kZXgiLCJfc3VnZ2VzdGlvbiRzdHJ1Y3R1cmUiLCJfc3VnZ2VzdGlvbiRzdHJ1Y3R1cmUyIiwib25Nb3VzZURvd24iLCJvbk1vdXNlRW50ZXIiLCJzdHJ1Y3R1cmVkRm9ybWF0dGluZyIsIm1haW5fdGV4dCIsInNlY29uZGFyeV90ZXh0IiwiaXNPcGVuIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybXMvSW5wdXRzQWRkcmVzcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE1lcmNoaSB9IGZyb20gJ0BtZXJjaGkvc2RrJztcbmltcG9ydCB7IENvdW50cnlEcm9wZG93biwgUmVnaW9uRHJvcGRvd24gfSBmcm9tICdyZWFjdC1jb3VudHJ5LXJlZ2lvbi1zZWxlY3Rvcic7XG5pbXBvcnQgeyBDb250cm9sbGVyIH0gZnJvbSAncmVhY3QtaG9vay1mb3JtJztcbmltcG9ydCBJbnB1dFRleHQgZnJvbSAnLi9JbnB1dFRleHQnO1xuaW1wb3J0IHsgdXNlTWVyY2hpQ2hlY2tib3V0Q29udGV4dCB9IGZyb20gJy4uL01lcmNoaUNoZWNrb3V0UHJvdmlkZXInO1xuaW1wb3J0IHsgYWRkcmVzc0luT25lTGluZSwgZ29vZ2xlUGxhY2VzUmVzdWx0QXNOZXdBZGRyZXNzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgRm9udEF3ZXNvbWVJY29uIH0gZnJvbSAnQGZvcnRhd2Vzb21lL3JlYWN0LWZvbnRhd2Vzb21lJztcbmltcG9ydCB7IGZhU3Bpbm5lciwgZmFUaW1lcywgZmFFZGl0LCBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi4vQ29sbGFwc2UnO1xuXG5jb25zdCBtZXJjaGkgPSBuZXcgTWVyY2hpKCk7XG5cbmludGVyZmFjZSBTdWdnZXN0aW9uIHtcbiAgcGxhY2VJZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdHJ1Y3R1cmVkRm9ybWF0dGluZzogYW55O1xuICB0eXBlczogc3RyaW5nW107XG4gIG1hdGNoZWRTdWJzdHJpbmdzOiBhbnlbXTtcbn1cblxuaW50ZXJmYWNlIFByb3BzIHtcbiAgZGVmYXVsdEFkZHJlc3M/OiBhbnk7XG4gIGxhYmVsR2VvU3VnZ2VzdD86IHN0cmluZztcbiAgaG9va0Zvcm06IGFueTtcbiAgbmFtZTogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgcmVjb21tZW5kZWRBZGRyZXNzPzogYW55O1xuICB1cGRhdGVBZGRyZXNzOiAoYWRkcmVzczogYW55KSA9PiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gSW5wdXRzQWRkcmVzcyh7XG4gIGRlZmF1bHRBZGRyZXNzID0ge30sXG4gIGxhYmVsR2VvU3VnZ2VzdCA9ICdBZGRyZXNzJyxcbiAgaG9va0Zvcm0sXG4gIG5hbWUsXG4gIHBsYWNlaG9sZGVyID0gJ1NlYXJjaCB5b3VyIGFkZHJlc3MnLFxuICByZWNvbW1lbmRlZEFkZHJlc3MsXG4gIHVwZGF0ZUFkZHJlc3Ncbn06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1Hcm91cCxcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1JbnB1dCxcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1TZWxlY3QsXG4gICAgY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3csXG4gICAgY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3dDb2x1bW4sXG4gICAgY2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRHb29nbGVTdWdnZXN0TGlzdCxcbiAgICBjbGFzc05hbWVNZXJjaGlDaGVja291dEdvb2dsZVN1Z2dlc3RMaXN0SXRlbSxcbiAgfSA9IHVzZU1lcmNoaUNoZWNrYm91dENvbnRleHQoKTtcblxuICBjb25zdCBbaW5wdXRWYWx1ZSwgc2V0SW5wdXRWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgnJyk7XG4gIGNvbnN0IFtzdWdnZXN0aW9ucywgc2V0U3VnZ2VzdGlvbnNdID0gUmVhY3QudXNlU3RhdGU8U3VnZ2VzdGlvbltdPihbXSk7XG4gIGNvbnN0IFtzaG93U3VnZ2VzdGlvbnMsIHNldFNob3dTdWdnZXN0aW9uc10gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtsb2FkaW5nLCBzZXRMb2FkaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3NlbGVjdGVkSW5kZXgsIHNldFNlbGVjdGVkSW5kZXhdID0gUmVhY3QudXNlU3RhdGUoLTEpO1xuICBjb25zdCBbYWRkcmVzc0xvY2FsLCBzZXRBZGRyZXNzTG9jYWxdID0gUmVhY3QudXNlU3RhdGUoeyAuLi5kZWZhdWx0QWRkcmVzcyB9KTtcblxuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnNSZWYgPSBSZWFjdC51c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuXG4gIGNvbnN0IHtcbiAgICBjb250cm9sLFxuICAgIGZvcm1TdGF0ZTogeyBlcnJvcnMsIGlzVmFsaWQsIHN1Ym1pdENvdW50IH0sXG4gICAgc2V0VmFsdWUsXG4gICAgZ2V0VmFsdWVzLFxuICAgIHJlc2V0LFxuICAgIHdhdGNoLFxuICB9ID0gaG9va0Zvcm07XG4gIGNvbnN0IGlucHV0TmFtZSA9IChfbmFtZTogc3RyaW5nKSA9PiBgJHtuYW1lID8gYCR7bmFtZX0uYCA6ICcnfSR7X25hbWV9YDtcbiAgY29uc3Qgc2VsZWN0ZWRDb3VudHJ5ID0gd2F0Y2goaW5wdXROYW1lKCdjb3VudHJ5JykpO1xuXG4gIGZ1bmN0aW9uIG9uQ2hhbmdlQ291bnRyeVN0YXRlKCkge1xuICAgIC8vIFBhcmVudCB1cGRhdGVBZGRyZXNzIGV4cGVjdHMgYSBzaW5nbGUgYWRkcmVzcyBvYmplY3QgKHNlZSBGb3JtQWRkcmVzc2VzKS5cbiAgICB1cGRhdGVBZGRyZXNzKGdldFZhbHVlcygpW25hbWVdKTtcbiAgfVxuICBjb25zdCBbYWRkcmVzc0ZpZWxkc09wZW4sIHNldEFkZHJlc3NGaWVsZHNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgdG9nZ2xlQWRkcmVzc0ZpZWxkc09wZW4gPSAoKSA9PiBzZXRBZGRyZXNzRmllbGRzT3BlbighYWRkcmVzc0ZpZWxkc09wZW4pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNWYWxpZCAmJiAhYWRkcmVzc0ZpZWxkc09wZW4gJiYgc3VibWl0Q291bnQgPiAwKSB7XG4gICAgICB0b2dnbGVBZGRyZXNzRmllbGRzT3BlbigpO1xuICAgIH1cbiAgfSwgW2lzVmFsaWQsIHN1Ym1pdENvdW50XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWRlZmF1bHRBZGRyZXNzPy5saW5lT25lKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXh0QWRkcmVzcyA9IHsgLi4uZGVmYXVsdEFkZHJlc3MgfTtcbiAgICBzZXRBZGRyZXNzTG9jYWwobmV4dEFkZHJlc3MpO1xuICAgIHNldElucHV0VmFsdWUoYWRkcmVzc0luT25lTGluZShuZXh0QWRkcmVzcykpO1xuICAgIHJlc2V0KHtcbiAgICAgIC4uLmdldFZhbHVlcygpLFxuICAgICAgW25hbWVdOiBuZXh0QWRkcmVzcyxcbiAgICB9KTtcbiAgfSwgW2RlZmF1bHRBZGRyZXNzPy5saW5lT25lLCBkZWZhdWx0QWRkcmVzcz8uY2l0eSwgZGVmYXVsdEFkZHJlc3M/LnBvc3Rjb2RlXSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VhcmNoQWRkcmVzc2VzKHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXF1ZXJ5LnRyaW0oKSkge1xuICAgICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgICAgc2V0U2hvd1N1Z2dlc3Rpb25zKGZhbHNlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRMb2FkaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1lcmNoaS5hdXRoZW50aWNhdGVkRmV0Y2goJy9hZGRyZXNzZXMvcGxhY2Utc2VhcmNoLycsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgcXVlcnk6IFtbJ3EnLCBxdWVyeV1dXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHNldFN1Z2dlc3Rpb25zKHJlc3BvbnNlLnJlc3VsdHMgfHwgW10pO1xuICAgICAgICBzZXRTaG93U3VnZ2VzdGlvbnModHJ1ZSk7XG4gICAgICAgIHNldFNlbGVjdGVkSW5kZXgoLTEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZWFyY2hpbmcgYWRkcmVzc2VzOicsIGVycm9yKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFNob3dTdWdnZXN0aW9ucyhmYWxzZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERlYm91bmNlZCBzZWFyY2ggZnVuY3Rpb25cbiAgY29uc3QgZGVib3VuY2VkU2VhcmNoID0gUmVhY3QudXNlTWVtbyhcbiAgICAoKSA9PiBkZWJvdW5jZShzZWFyY2hBZGRyZXNzZXMsIDUwMCksXG4gICAgW11cbiAgKTtcblxuICBmdW5jdGlvbiBoYW5kbGVJbnB1dENoYW5nZShldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBzZXRJbnB1dFZhbHVlKHZhbHVlKTtcbiAgICBkZWJvdW5jZWRTZWFyY2godmFsdWUpO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlU3VnZ2VzdGlvblNlbGVjdChzdWdnZXN0aW9uOiBTdWdnZXN0aW9uKSB7XG4gICAgc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgLy8gRmV0Y2ggZGV0YWlsZWQgcGxhY2UgaW5mb3JtYXRpb24gdXNpbmcgdGhlIHBsYWNlIElEXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1lcmNoaS5hdXRoZW50aWNhdGVkRmV0Y2goJy9hZGRyZXNzZXMvcGxhY2UtZGV0YWlscy8nLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHF1ZXJ5OiBbWydwbGFjZV9pZCcsIHN1Z2dlc3Rpb24ucGxhY2VJZF1dXG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIC8vIFBhcnNlIHRoZSBHb29nbGUgUGxhY2VzIHJlc3VsdCBpbnRvIGFkZHJlc3MgY29tcG9uZW50c1xuICAgICAgICBjb25zdCBwYXJzZWRBZGRyZXNzID0gZ29vZ2xlUGxhY2VzUmVzdWx0QXNOZXdBZGRyZXNzKHJlc3BvbnNlLnJlc3VsdCk7XG5cbiAgICAgICAgaWYgKHBhcnNlZEFkZHJlc3MpIHtcbiAgICAgICAgICBzZXRJbnB1dFZhbHVlKGFkZHJlc3NJbk9uZUxpbmUocGFyc2VkQWRkcmVzcykpO1xuICAgICAgICAgIHVwZGF0ZUFkZHJlc3MocGFyc2VkQWRkcmVzcyk7XG4gICAgICAgICAgc2V0QWRkcmVzc0xvY2FsKHBhcnNlZEFkZHJlc3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHVzaW5nIHRoZSBkZXNjcmlwdGlvbiBpZiBwYXJzaW5nIGZhaWxzXG4gICAgICAgICAgY29uc3QgZmFsbGJhY2tBZGRyZXNzID0ge1xuICAgICAgICAgICAgY2l0eTogJycsXG4gICAgICAgICAgICBjb3VudHJ5OiAnJyxcbiAgICAgICAgICAgIGxpbmVPbmU6IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICBsaW5lVHdvOiAnJyxcbiAgICAgICAgICAgIHBvc3Rjb2RlOiAnJyxcbiAgICAgICAgICAgIHN0YXRlOiAnJyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHNldElucHV0VmFsdWUoc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbik7XG4gICAgICAgICAgdXBkYXRlQWRkcmVzcyhmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgICAgIHNldEFkZHJlc3NMb2NhbChmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGYWxsYmFjayB0byB1c2luZyB0aGUgZGVzY3JpcHRpb24gaWYgQVBJIGNhbGwgZmFpbHNcbiAgICAgICAgY29uc3QgZmFsbGJhY2tBZGRyZXNzID0ge1xuICAgICAgICAgIGNpdHk6ICcnLFxuICAgICAgICAgIGNvdW50cnk6ICcnLFxuICAgICAgICAgIGxpbmVPbmU6IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgICAgbGluZVR3bzogJycsXG4gICAgICAgICAgcG9zdGNvZGU6ICcnLFxuICAgICAgICAgIHN0YXRlOiAnJyxcbiAgICAgICAgfTtcbiAgICAgICAgc2V0SW5wdXRWYWx1ZShzdWdnZXN0aW9uLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgdXBkYXRlQWRkcmVzcyhmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgICBzZXRBZGRyZXNzTG9jYWwoZmFsbGJhY2tBZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGxhY2UgZGV0YWlsczonLCBlcnJvcik7XG4gICAgICAvLyBGYWxsYmFjayB0byB1c2luZyB0aGUgZGVzY3JpcHRpb24gaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgY29uc3QgZmFsbGJhY2tBZGRyZXNzID0ge1xuICAgICAgICBjaXR5OiAnJyxcbiAgICAgICAgY291bnRyeTogJycsXG4gICAgICAgIGxpbmVPbmU6IHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGxpbmVUd286ICcnLFxuICAgICAgICBwb3N0Y29kZTogJycsXG4gICAgICAgIHN0YXRlOiAnJyxcbiAgICAgIH07XG4gICAgICBzZXRJbnB1dFZhbHVlKHN1Z2dlc3Rpb24uZGVzY3JpcHRpb24pO1xuICAgICAgdXBkYXRlQWRkcmVzcyhmYWxsYmFja0FkZHJlc3MpO1xuICAgICAgc2V0QWRkcmVzc0xvY2FsKGZhbGxiYWNrQWRkcmVzcyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0U2hvd1N1Z2dlc3Rpb25zKGZhbHNlKTtcbiAgICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgICAgIHNldFNlbGVjdGVkSW5kZXgoLTEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pIHtcbiAgICBpZiAoIXNob3dTdWdnZXN0aW9ucyB8fCBzdWdnZXN0aW9ucy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KHByZXYgPT5cbiAgICAgICAgICBwcmV2IDwgc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA/IHByZXYgKyAxIDogMFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KHByZXYgPT5cbiAgICAgICAgICBwcmV2ID4gMCA/IHByZXYgLSAxIDogc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMVxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCAmJiBzZWxlY3RlZEluZGV4IDwgc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvblNlbGVjdChzdWdnZXN0aW9uc1tzZWxlY3RlZEluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBzZXRTaG93U3VnZ2VzdGlvbnMoZmFsc2UpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXRCbHVyKGV2ZW50OiBSZWFjdC5Gb2N1c0V2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSB7XG4gICAgLy8gRGVsYXkgaGlkaW5nIHN1Z2dlc3Rpb25zIHRvIGFsbG93IGNsaWNrIGV2ZW50cyBvbiBzdWdnZXN0aW9uc1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uc1JlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRTaG93U3VnZ2VzdGlvbnMoZmFsc2UpO1xuICAgICAgICBzZXRTZWxlY3RlZEluZGV4KC0xKTtcbiAgICAgIH1cbiAgICB9LCAyMDApO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlSW5wdXRGb2N1cygpIHtcbiAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgc2V0U2hvd1N1Z2dlc3Rpb25zKHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFwcGx5UmVjb21tZW5kZWRBZGRyZXNzKCkge1xuICAgIGlmICghcmVjb21tZW5kZWRBZGRyZXNzPy5saW5lT25lKSByZXR1cm47XG5cbiAgICBjb25zdCBuZXh0QWRkcmVzcyA9IHsgLi4ucmVjb21tZW5kZWRBZGRyZXNzIH07XG4gICAgc2V0SW5wdXRWYWx1ZShhZGRyZXNzSW5PbmVMaW5lKG5leHRBZGRyZXNzKSk7XG4gICAgdXBkYXRlQWRkcmVzcyhuZXh0QWRkcmVzcyk7XG4gICAgc2V0QWRkcmVzc0xvY2FsKG5leHRBZGRyZXNzKTtcbiAgICBzZXRTaG93U3VnZ2VzdGlvbnMoZmFsc2UpO1xuICAgIHNldFN1Z2dlc3Rpb25zKFtdKTtcbiAgfVxuXG4gIGNvbnN0IHNob3dSZWNvbW1lbmRlZEFkZHJlc3MgPVxuICAgIEJvb2xlYW4ocmVjb21tZW5kZWRBZGRyZXNzPy5saW5lT25lKSAmJiAhYWRkcmVzc0xvY2FsPy5saW5lT25lPy50cmltKCk7XG5cbiAgZnVuY3Rpb24gY2xlYXJJbnB1dChlOiBhbnkpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgc2V0SW5wdXRWYWx1ZSgnJyk7XG4gICAgc2V0U3VnZ2VzdGlvbnMoW10pO1xuICAgIHNldFNob3dTdWdnZXN0aW9ucyhmYWxzZSk7XG4gICAgdXBkYXRlQWRkcmVzcyh7XG4gICAgICBjaXR5OiAnJyxcbiAgICAgIGNvdW50cnk6ICcnLFxuICAgICAgbGluZU9uZTogJycsXG4gICAgICBsaW5lVHdvOiAnJyxcbiAgICAgIHBvc3Rjb2RlOiAnJyxcbiAgICAgIHN0YXRlOiAnJyxcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGhhc0Vycm9ycyA9ICEhT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGg7XG5cbiAgY29uc3QgYWRkcmVzc0Zvcm0gPSAoXG4gICAgPD5cbiAgICAgIDxJbnB1dFRleHRcbiAgICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgICAgbGFiZWw9XCJBZGRyZXNzIGxpbmUgb25lXCJcbiAgICAgICAgbmFtZT17aW5wdXROYW1lKFwibGluZU9uZVwiKX1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCIxMjMgRmFrZSBzdFwiXG4gICAgICAgIHJ1bGVzPXt7IHJlcXVpcmVkOiAnQWRkcmVzcyBsaW5lIG9uZSBpcyByZXF1aXJlZC4nIH19XG4gICAgICAvPlxuICAgICAgPElucHV0VGV4dFxuICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICAgICAgICBsYWJlbD1cIkNvbnRpbnVlIGFkZHJlc3NcIlxuICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJsaW5lVHdvXCIpfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRpbnVlIGFkZHJlc3MuLi5cIlxuICAgICAgLz5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dFJvd30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dFJvd0NvbHVtbn0+XG4gICAgICAgICAgPElucHV0VGV4dFxuICAgICAgICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgICAgICAgIGxhYmVsPVwiQ2l0eSAvIFByb3ZpbmNlXCJcbiAgICAgICAgICAgIG5hbWU9e2lucHV0TmFtZShcImNpdHlcIil9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNpdHlcIlxuICAgICAgICAgICAgcnVsZXM9e3sgcmVxdWlyZWQ6ICdDaXR5IC8gUHJvdmluY2UgaXMgcmVxdWlyZWQuJyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3dDb2x1bW59PlxuICAgICAgICAgIDxJbnB1dFRleHRcbiAgICAgICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gICAgICAgICAgICBsYWJlbD1cIlBvc3QgLyBaaXAgY29kZVwiXG4gICAgICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJwb3N0Y29kZVwiKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiOTAyMTBcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3d9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRSb3dDb2x1bW59PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1Hcm91cH0+XG4gICAgICAgICAgICA8bGFiZWw+Q291bnRyeTwvbGFiZWw+XG4gICAgICAgICAgICA8Q29udHJvbGxlclxuICAgICAgICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJjb3VudHJ5XCIpfVxuICAgICAgICAgICAgICBjb250cm9sPXtjb250cm9sfVxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRBZGRyZXNzICYmIGRlZmF1bHRBZGRyZXNzLmNvdW50cnl9XG4gICAgICAgICAgICAgIHJlbmRlcj17KHsgZmllbGQgfTogYW55KSA9PiAoXG4gICAgICAgICAgICAgICAgPENvdW50cnlEcm9wZG93blxuICAgICAgICAgICAgICAgICAgey4uLmZpZWxkfVxuICAgICAgICAgICAgICAgICAgY2xhc3Nlcz17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtU2VsZWN0fVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoaW5wdXROYW1lKFwiY291bnRyeVwiKSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVnaW9ucyBhcmUgY291bnRyeS1zcGVjaWZpYzsgY2xlYXIgc3RhbGUgc3RhdGUgb24gY291bnRyeSBjaGFuZ2UuXG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGlucHV0TmFtZShcInN0YXRlXCIpLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLm9uQ2hhbmdlKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlQ291bnRyeVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgdmFsdWVUeXBlPSdzaG9ydCdcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWVNZXJjaGlDaGVja291dFJvd0NvbHVtbn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZU1lcmNoaUNoZWNrb3V0Rm9ybUdyb3VwfT5cbiAgICAgICAgICAgIDxsYWJlbD5TdGF0ZSAvIFJlZ2lvbjwvbGFiZWw+XG4gICAgICAgICAgICA8Q29udHJvbGxlclxuICAgICAgICAgICAgICBuYW1lPXtpbnB1dE5hbWUoXCJzdGF0ZVwiKX1cbiAgICAgICAgICAgICAgY29udHJvbD17Y29udHJvbH1cbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0QWRkcmVzcyAmJiBkZWZhdWx0QWRkcmVzcy5zdGF0ZX1cbiAgICAgICAgICAgICAgcmVuZGVyPXsoeyBmaWVsZCB9OiBhbnkpID0+IChcbiAgICAgICAgICAgICAgICA8UmVnaW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgIHsuLi5maWVsZH1cbiAgICAgICAgICAgICAgICAgIGNvdW50cnlWYWx1ZVR5cGU9XCJzaG9ydFwiXG4gICAgICAgICAgICAgICAgICBjb3VudHJ5PXtzZWxlY3RlZENvdW50cnl9XG4gICAgICAgICAgICAgICAgICBjbGFzc2VzPXtjbGFzc05hbWVNZXJjaGlDaGVja291dEZvcm1TZWxlY3R9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShpbnB1dE5hbWUoXCJzdGF0ZVwiKSwgdmFsKTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQub25DaGFuZ2UodmFsKTtcbiAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2VDb3VudHJ5U3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICB2YWx1ZVR5cGU9J3Nob3J0J1xuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtR3JvdXB9PlxuICAgICAgICA8bGFiZWw+e2xhYmVsR2VvU3VnZ2VzdH08L2xhYmVsPlxuICAgICAgICB7c2hvd1JlY29tbWVuZGVkQWRkcmVzcyAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1hZGRyZXNzLXJlY29tbWVuZGF0aW9uJz5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT0nYnV0dG9uJ1xuICAgICAgICAgICAgICBjbGFzc05hbWU9J21lcmNoaS1jaGVja291dC1hZGRyZXNzLXJlY29tbWVuZGF0aW9uLWJ0bidcbiAgICAgICAgICAgICAgb25DbGljaz17YXBwbHlSZWNvbW1lbmRlZEFkZHJlc3N9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT0nbWVyY2hpLWNoZWNrb3V0LWFkZHJlc3MtcmVjb21tZW5kYXRpb24tbGFiZWwnPlxuICAgICAgICAgICAgICAgIFVzZSBwcmV2aW91cyBhZGRyZXNzXG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPSdtZXJjaGktY2hlY2tvdXQtYWRkcmVzcy1yZWNvbW1lbmRhdGlvbi12YWx1ZSc+XG4gICAgICAgICAgICAgICAge2FkZHJlc3NJbk9uZUxpbmUocmVjb21tZW5kZWRBZGRyZXNzKX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicG9zaXRpb24tcmVsYXRpdmVcIiBzdHlsZT17eyBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGF1dG9Db21wbGV0ZT0nbmV3LXBhc3N3b3JkJ1xuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIG5hbWU9J2FkZHJlc3Mtc3VnZ2VzdGlvbidcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRGb3JtSW5wdXR9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICB2YWx1ZT17aW5wdXRWYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVJbnB1dENoYW5nZX1cbiAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlSW5wdXRCbHVyfVxuICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlSW5wdXRGb2N1c31cbiAgICAgICAgICAgIHN0eWxlPXt7IHBhZGRpbmdSaWdodDogbG9hZGluZyA/ICc0MHB4JyA6ICcyMHB4JyB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2xvYWRpbmcgJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcxMHB4JyxcbiAgICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFTcGlubmVyfSBzcGluIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtpbnB1dFZhbHVlICYmICFsb2FkaW5nICYmIChcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tc20gcG9zaXRpb24tYWJzb2x1dGVcIlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHJpZ2h0OiAnNXB4JyxcbiAgICAgICAgICAgICAgICB0b3A6ICc1MCUnLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTUwJSknLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogJ25vbmUnLFxuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgcGFkZGluZzogJzJweCA1cHgnLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uIGljb249e2ZhVGltZXN9IC8+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaG93U3VnZ2VzdGlvbnMgJiYgc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIHJlZj17c3VnZ2VzdGlvbnNSZWZ9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lTWVyY2hpQ2hlY2tvdXRHb29nbGVTdWdnZXN0TGlzdH1cbiAgICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGtleT17c3VnZ2VzdGlvbi5wbGFjZUlkfVxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtjbGFzc05hbWVNZXJjaGlDaGVja291dEdvb2dsZVN1Z2dlc3RMaXN0SXRlbX0gJHtpbmRleCA9PT0gc2VsZWN0ZWRJbmRleCA/ICdhY3RpdmUnIDogJyd9YH1cbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249eyhlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvblNlbGVjdChzdWdnZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldFNlbGVjdGVkSW5kZXgoaW5kZXgpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgIHtzdWdnZXN0aW9uLnN0cnVjdHVyZWRGb3JtYXR0aW5nPy5tYWluX3RleHQgfHwgc3VnZ2VzdGlvbi5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAge3N1Z2dlc3Rpb24uc3RydWN0dXJlZEZvcm1hdHRpbmc/LnNlY29uZGFyeV90ZXh0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3N1Z2dlc3Rpb24uc3RydWN0dXJlZEZvcm1hdHRpbmcuc2Vjb25kYXJ5X3RleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPENvbGxhcHNlIGlzT3Blbj17YWRkcmVzc0ZpZWxkc09wZW59PlxuICAgICAgICB7YWRkcmVzc0Zvcm19XG4gICAgICA8L0NvbGxhcHNlPlxuICAgICAgPGRpdiBjbGFzc05hbWU9J2QtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXInPlxuICAgICAgICB7aGFzRXJyb3JzICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9J3RleHQtZGFuZ2VyJz5cbiAgICAgICAgICAgIDxGb250QXdlc29tZUljb24gaWNvbj17ZmFFeGNsYW1hdGlvblRyaWFuZ2xlfSAvPiBJbnZhbGlkIGFkZHJlc3MhXG4gICAgICAgICAgPC9kaXY+fVxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzTmFtZT17YG1sLWF1dG8gYnRuIGJ0bi1zbSBidG4tbGluayAke2hhc0Vycm9ycyAmJiAndGV4dC1kYW5nZXInfWB9XG4gICAgICAgICAgb25DbGljaz17dG9nZ2xlQWRkcmVzc0ZpZWxkc09wZW59XG4gICAgICAgID5cbiAgICAgICAgICA8Rm9udEF3ZXNvbWVJY29uXG4gICAgICAgICAgICBpY29uPXthZGRyZXNzRmllbGRzT3BlbiA/IGZhVGltZXMgOiBmYUVkaXR9XG4gICAgICAgICAgLz4ge2FkZHJlc3NGaWVsZHNPcGVuID8gJ0Nsb3NlJyA6ICdFZGl0IGZpZWxkcyd9XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbnB1dHNBZGRyZXNzO1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxZQUFZOztBQUFDLFNBQUFBLFFBQUFDLENBQUEsc0NBQUFELE9BQUEsd0JBQUFFLE1BQUEsdUJBQUFBLE1BQUEsQ0FBQUMsUUFBQSxhQUFBRixDQUFBLGtCQUFBQSxDQUFBLGdCQUFBQSxDQUFBLFdBQUFBLENBQUEseUJBQUFDLE1BQUEsSUFBQUQsQ0FBQSxDQUFBRyxXQUFBLEtBQUFGLE1BQUEsSUFBQUQsQ0FBQSxLQUFBQyxNQUFBLENBQUFHLFNBQUEscUJBQUFKLENBQUEsS0FBQUQsT0FBQSxDQUFBQyxDQUFBO0FBQUEsU0FBQUssYUFBQSxJQUNiLHVLQUFBQyxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSx3QkFBQVAsTUFBQSxHQUFBQSxNQUFBLE9BQUFRLENBQUEsR0FBQUQsQ0FBQSxDQUFBTixRQUFBLGtCQUFBRixDQUFBLEdBQUFRLENBQUEsQ0FBQUUsV0FBQSw4QkFBQUMsRUFBQUgsQ0FBQSxFQUFBQyxDQUFBLEVBQUFULENBQUEsRUFBQVcsQ0FBQSxRQUFBQyxDQUFBLEdBQUFILENBQUEsSUFBQUEsQ0FBQSxDQUFBTCxTQUFBLFlBQUFTLFNBQUEsR0FBQUosQ0FBQSxHQUFBSSxTQUFBLEVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxNQUFBLENBQUFKLENBQUEsQ0FBQVIsU0FBQSxVQUFBYSxtQkFBQSxDQUFBSCxDQUFBLHVCQUFBTixDQUFBLEVBQUFDLENBQUEsRUFBQVQsQ0FBQSxRQUFBVyxDQUFBLEVBQUFDLENBQUEsRUFBQUUsQ0FBQSxFQUFBSSxDQUFBLE1BQUFDLENBQUEsR0FBQW5CLENBQUEsUUFBQW9CLENBQUEsT0FBQUMsQ0FBQSxLQUFBRixDQUFBLEtBQUFWLENBQUEsS0FBQWEsQ0FBQSxFQUFBaEIsQ0FBQSxFQUFBaUIsQ0FBQSxFQUFBQyxDQUFB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