UNPKG

merchi_product_form

Version:
141 lines (140 loc) 25.8 kB
'use client'; 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); } 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; } 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; } 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; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 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); } function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 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; } } function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); } function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); } 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; } import * as React from 'react'; import { useController } from 'react-hook-form'; import { isBoolean } from 'lodash'; import VariationOptionColour from './VariationOptionColour'; import VariationOptionImage from './VariationOptionImage'; import VariationError from './VariationError'; import VariationLabel from './VariationLabel'; import { useMerchiFormContext } from '../context/MerchiProductFormProvider'; import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime"; function determineBoolean(value) { return isBoolean(value) ? value : value === 'true' ? true : false; } function optionType(variation) { var _variation$variationF = variation.variationField, multipleSelect = _variation$variationF.multipleSelect, sellerProductEditable = _variation$variationF.sellerProductEditable; return determineBoolean(multipleSelect) || determineBoolean(sellerProductEditable) ? 'checkbox' : 'radio'; } function VariationFieldOptionElement(_ref) { var disabled = _ref.disabled, index = _ref.index, inputType = _ref.inputType, name = _ref.name, option = _ref.option, variation = _ref.variation; var _useMerchiFormContext = useMerchiFormContext(), control = _useMerchiFormContext.control, getQuote = _useMerchiFormContext.getQuote; var _useController = useController({ name: "".concat(name, ".value"), control: control }), field = _useController.field; var variationField = variation.variationField; var sellerProductEditable = variationField.sellerProductEditable; var optionId = option.optionId; var inputId = "".concat(name, ".options.id-").concat(optionId); var activeIds = typeof field.value === 'string' ? field.value.split(',') : Array.isArray(field.value) ? field.value.map(String) : []; var isActive = activeIds.includes(String(optionId)); var optionInputType = optionType(variation); var doClick = function doClick() { var updatedIds = _toConsumableArray(activeIds); if (sellerProductEditable || optionInputType === 'checkbox') { // Checkbox Logic if (!updatedIds.includes(String(optionId))) { updatedIds.push(String(optionId)); } else { updatedIds = updatedIds.filter(function (existingId) { return existingId !== String(optionId); }); } } else if (optionInputType === 'radio') { // Radio Logic updatedIds = [String(optionId)]; } field.onChange(updatedIds.length ? updatedIds.join(',') : ''); getQuote(); }; return /*#__PURE__*/_jsxs(_Fragment, { children: [/*#__PURE__*/_jsx("input", { style: { display: 'none' }, checked: isActive, value: optionId, type: optionInputType, id: inputId, name: "".concat(name, ".value"), onChange: function onChange() { return true; }, disabled: disabled }), inputType === 'image' ? /*#__PURE__*/_jsx(VariationOptionImage, { doClick: doClick, isChecked: isActive, option: option, sellerProductEditable: sellerProductEditable }) : /*#__PURE__*/_jsx(VariationOptionColour, { doClick: doClick, isChecked: isActive, option: option, sellerProductEditable: sellerProductEditable })] }); } export var VariationSelectElements = function VariationSelectElements(_ref2) { var disabled = _ref2.disabled, _ref2$inputType = _ref2.inputType, inputType = _ref2$inputType === void 0 ? 'image' : _ref2$inputType, name = _ref2.name, variation = _ref2.variation; var selectableOptions = variation.selectableOptions; var isImage = inputType === 'image'; return /*#__PURE__*/_jsxs("div", { className: isImage ? 'merchi-image-select-container' : '', children: [/*#__PURE__*/_jsx(VariationLabel, { forceHideCost: true, variationClassName: "merchi-embed-form_input".concat(isImage ? '-image' : '', "-select"), variation: variation }), /*#__PURE__*/_jsx("div", { className: isImage ? 'merchi-embed-form_image-select-option-container' : 'merchi-embed-form_color-select-container', children: selectableOptions.map(function (option, index) { return /*#__PURE__*/_jsx(VariationFieldOptionElement, { disabled: disabled, index: index, inputType: inputType, name: name, option: option, variation: variation }, "variation-option-".concat(option.optionId, "-").concat(index)); }) }), /*#__PURE__*/_jsx(VariationError, { name: name })] }); }; export var VariationSelectImage = function VariationSelectImage(props) { return /*#__PURE__*/_jsx(VariationSelectElements, _objectSpread(_objectSpread({}, props), {}, { inputType: "image" })); }; export var VariationSelectColour = function VariationSelectColour(props) { return /*#__PURE__*/_jsx(VariationSelectElements, _objectSpread(_objectSpread({}, props), {}, { inputType: "colour" })); }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJpIiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJjYWxsIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImEiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImlzQXJyYXkiLCJuIiwiUmVhY3QiLCJ1c2VDb250cm9sbGVyIiwiaXNCb29sZWFuIiwiVmFyaWF0aW9uT3B0aW9uQ29sb3VyIiwiVmFyaWF0aW9uT3B0aW9uSW1hZ2UiLCJWYXJpYXRpb25FcnJvciIsIlZhcmlhdGlvbkxhYmVsIiwidXNlTWVyY2hpRm9ybUNvbnRleHQiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJkZXRlcm1pbmVCb29sZWFuIiwib3B0aW9uVHlwZSIsInZhcmlhdGlvbiIsIl92YXJpYXRpb24kdmFyaWF0aW9uRiIsInZhcmlhdGlvbkZpZWxkIiwibXVsdGlwbGVTZWxlY3QiLCJzZWxsZXJQcm9kdWN0RWRpdGFibGUiLCJWYXJpYXRpb25GaWVsZE9wdGlvbkVsZW1lbnQiLCJfcmVmIiwiZGlzYWJsZWQiLCJpbmRleCIsImlucHV0VHlwZSIsIm9wdGlvbiIsIl91c2VNZXJjaGlGb3JtQ29udGV4dCIsImNvbnRyb2wiLCJnZXRRdW90ZSIsIl91c2VDb250cm9sbGVyIiwiY29uY2F0IiwiZmllbGQiLCJvcHRpb25JZCIsImlucHV0SWQiLCJhY3RpdmVJZHMiLCJzcGxpdCIsIm1hcCIsImlzQWN0aXZlIiwiaW5jbHVkZXMiLCJvcHRpb25JbnB1dFR5cGUiLCJkb0NsaWNrIiwidXBkYXRlZElkcyIsImV4aXN0aW5nSWQiLCJvbkNoYW5nZSIsImpvaW4iLCJjaGlsZHJlbiIsInN0eWxlIiwiZGlzcGxheSIsImNoZWNrZWQiLCJ0eXBlIiwiaWQiLCJpc0NoZWNrZWQiLCJWYXJpYXRpb25TZWxlY3RFbGVtZW50cyIsIl9yZWYyIiwiX3JlZjIkaW5wdXRUeXBlIiwic2VsZWN0YWJsZU9wdGlvbnMiLCJpc0ltYWdlIiwiY2xhc3NOYW1lIiwiZm9yY2VIaWRlQ29zdCIsInZhcmlhdGlvbkNsYXNzTmFtZSIsIlZhcmlhdGlvblNlbGVjdEltYWdlIiwicHJvcHMiLCJWYXJpYXRpb25TZWxlY3RDb2xvdXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9WYXJpYXRpb25TZWxlY3RFbGVtZW50cy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCB7IHVzZUNvbnRyb2xsZXIgfSBmcm9tICdyZWFjdC1ob29rLWZvcm0nO1xyXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgVmFyaWF0aW9uT3B0aW9uQ29sb3VyIGZyb20gJy4vVmFyaWF0aW9uT3B0aW9uQ29sb3VyJztcclxuaW1wb3J0IFZhcmlhdGlvbk9wdGlvbkltYWdlIGZyb20gJy4vVmFyaWF0aW9uT3B0aW9uSW1hZ2UnO1xyXG5pbXBvcnQgVmFyaWF0aW9uRXJyb3IgZnJvbSAnLi9WYXJpYXRpb25FcnJvcic7XHJcbmltcG9ydCBWYXJpYXRpb25MYWJlbCBmcm9tICcuL1ZhcmlhdGlvbkxhYmVsJztcclxuaW1wb3J0IHsgdXNlTWVyY2hpRm9ybUNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01lcmNoaVByb2R1Y3RGb3JtUHJvdmlkZXInO1xyXG5cclxuZnVuY3Rpb24gZGV0ZXJtaW5lQm9vbGVhbih2YWx1ZTogYW55KSB7XHJcbiAgcmV0dXJuIGlzQm9vbGVhbih2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG9wdGlvblR5cGUodmFyaWF0aW9uOiBhbnkpIHtcclxuICBjb25zdCB7IG11bHRpcGxlU2VsZWN0LCBzZWxsZXJQcm9kdWN0RWRpdGFibGUgfSA9IHZhcmlhdGlvbi52YXJpYXRpb25GaWVsZDtcclxuICByZXR1cm4gZGV0ZXJtaW5lQm9vbGVhbihtdWx0aXBsZVNlbGVjdCkgfHxcclxuICAgIGRldGVybWluZUJvb2xlYW4oc2VsbGVyUHJvZHVjdEVkaXRhYmxlKVxyXG4gICAgPyAnY2hlY2tib3gnXHJcbiAgICA6ICdyYWRpbyc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBPcHRpb25Qcm9wcyB7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGluZGV4OiBudW1iZXI7XHJcbiAgaW5wdXRUeXBlOiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIG9wdGlvbjogYW55O1xyXG4gIHZhcmlhdGlvbjogYW55O1xyXG59XHJcblxyXG5mdW5jdGlvbiBWYXJpYXRpb25GaWVsZE9wdGlvbkVsZW1lbnQoe1xyXG4gIGRpc2FibGVkLFxyXG4gIGluZGV4LFxyXG4gIGlucHV0VHlwZSxcclxuICBuYW1lLFxyXG4gIG9wdGlvbixcclxuICB2YXJpYXRpb24sXHJcbn06IE9wdGlvblByb3BzKSB7XHJcbiAgY29uc3QgeyBjb250cm9sLCBnZXRRdW90ZSB9ID0gdXNlTWVyY2hpRm9ybUNvbnRleHQoKTtcclxuICBjb25zdCB7IGZpZWxkIH0gPSB1c2VDb250cm9sbGVyKHsgbmFtZTogYCR7bmFtZX0udmFsdWVgLCBjb250cm9sIH0pO1xyXG4gIGNvbnN0IHsgdmFyaWF0aW9uRmllbGQgfSA9IHZhcmlhdGlvbjtcclxuICBjb25zdCB7IHNlbGxlclByb2R1Y3RFZGl0YWJsZSB9ID0gdmFyaWF0aW9uRmllbGQ7XHJcbiAgY29uc3QgeyBvcHRpb25JZCB9ID0gb3B0aW9uO1xyXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtuYW1lfS5vcHRpb25zLmlkLSR7b3B0aW9uSWR9YDtcclxuICBjb25zdCBhY3RpdmVJZHMgPSB0eXBlb2YgZmllbGQudmFsdWUgPT09ICdzdHJpbmcnXHJcbiAgICA/IGZpZWxkLnZhbHVlLnNwbGl0KCcsJylcclxuICAgIDogQXJyYXkuaXNBcnJheShmaWVsZC52YWx1ZSlcclxuICAgID8gZmllbGQudmFsdWUubWFwKFN0cmluZylcclxuICAgIDogW107XHJcbiAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVJZHMuaW5jbHVkZXMoU3RyaW5nKG9wdGlvbklkKSk7XHJcbiAgY29uc3Qgb3B0aW9uSW5wdXRUeXBlID0gb3B0aW9uVHlwZSh2YXJpYXRpb24pO1xyXG4gIGNvbnN0IGRvQ2xpY2sgPSAoKSA9PiB7XHJcbiAgICBsZXQgdXBkYXRlZElkcyA9IFsuLi5hY3RpdmVJZHNdO1xyXG5cclxuICAgIGlmIChzZWxsZXJQcm9kdWN0RWRpdGFibGUgfHwgb3B0aW9uSW5wdXRUeXBlID09PSAnY2hlY2tib3gnKSB7XHJcbiAgICAgIC8vIENoZWNrYm94IExvZ2ljXHJcbiAgICAgIGlmICghdXBkYXRlZElkcy5pbmNsdWRlcyhTdHJpbmcob3B0aW9uSWQpKSkge1xyXG4gICAgICAgIHVwZGF0ZWRJZHMucHVzaChTdHJpbmcob3B0aW9uSWQpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB1cGRhdGVkSWRzID0gdXBkYXRlZElkcy5maWx0ZXIoXHJcbiAgICAgICAgICAoZXhpc3RpbmdJZCkgPT4gZXhpc3RpbmdJZCAhPT0gU3RyaW5nKG9wdGlvbklkKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAob3B0aW9uSW5wdXRUeXBlID09PSAncmFkaW8nKSB7XHJcbiAgICAgIC8vIFJhZGlvIExvZ2ljXHJcbiAgICAgIHVwZGF0ZWRJZHMgPSBbU3RyaW5nKG9wdGlvbklkKV07XHJcbiAgICB9XHJcbiAgICBmaWVsZC5vbkNoYW5nZSh1cGRhdGVkSWRzLmxlbmd0aCA/IHVwZGF0ZWRJZHMuam9pbignLCcpIDogJycpO1xyXG5cclxuICAgIGdldFF1b3RlKCk7XHJcbiAgfTtcclxuICByZXR1cm4gKFxyXG4gICAgPD5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XHJcbiAgICAgICAgY2hlY2tlZD17aXNBY3RpdmV9XHJcbiAgICAgICAgdmFsdWU9e29wdGlvbklkfVxyXG4gICAgICAgIHR5cGU9e29wdGlvbklucHV0VHlwZX1cclxuICAgICAgICBpZD17aW5wdXRJZH1cclxuICAgICAgICBuYW1lPXtgJHtuYW1lfS52YWx1ZWB9XHJcbiAgICAgICAgb25DaGFuZ2U9eygpID0+IHRydWV9XHJcbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxyXG4gICAgICAvPlxyXG4gICAgICB7aW5wdXRUeXBlID09PSAnaW1hZ2UnID8gKFxyXG4gICAgICAgIDxWYXJpYXRpb25PcHRpb25JbWFnZVxyXG4gICAgICAgICAgZG9DbGljaz17ZG9DbGlja31cclxuICAgICAgICAgIGlzQ2hlY2tlZD17aXNBY3RpdmV9XHJcbiAgICAgICAgICBvcHRpb249e29wdGlvbn1cclxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICkgOiAoXHJcbiAgICAgICAgPFZhcmlhdGlvbk9wdGlvbkNvbG91clxyXG4gICAgICAgICAgZG9DbGljaz17ZG9DbGlja31cclxuICAgICAgICAgIGlzQ2hlY2tlZD17aXNBY3RpdmV9XHJcbiAgICAgICAgICBvcHRpb249e29wdGlvbn1cclxuICAgICAgICAgIHNlbGxlclByb2R1Y3RFZGl0YWJsZT17c2VsbGVyUHJvZHVjdEVkaXRhYmxlfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICl9XHJcbiAgICA8Lz5cclxuICApO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUHJvcHMge1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICBpbnB1dFR5cGU/OiBzdHJpbmc7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHZhcmlhdGlvbjogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgVmFyaWF0aW9uU2VsZWN0RWxlbWVudHM6IFJlYWN0LkZDPFByb3BzPiA9ICh7XHJcbiAgZGlzYWJsZWQsXHJcbiAgaW5wdXRUeXBlID0gJ2ltYWdlJyxcclxuICBuYW1lLFxyXG4gIHZhcmlhdGlvbixcclxufSkgPT4ge1xyXG4gIGNvbnN0IHsgc2VsZWN0YWJsZU9wdGlvbnMgfSA9IHZhcmlhdGlvbjtcclxuICBjb25zdCBpc0ltYWdlID0gaW5wdXRUeXBlID09PSAnaW1hZ2UnO1xyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT17aXNJbWFnZSA/ICdtZXJjaGktaW1hZ2Utc2VsZWN0LWNvbnRhaW5lcicgOiAnJ30+XHJcbiAgICAgIDxWYXJpYXRpb25MYWJlbFxyXG4gICAgICAgIGZvcmNlSGlkZUNvc3Q9e3RydWV9XHJcbiAgICAgICAgdmFyaWF0aW9uQ2xhc3NOYW1lPXtgbWVyY2hpLWVtYmVkLWZvcm1faW5wdXQke1xyXG4gICAgICAgICAgaXNJbWFnZSA/ICctaW1hZ2UnIDogJydcclxuICAgICAgICB9LXNlbGVjdGB9XHJcbiAgICAgICAgdmFyaWF0aW9uPXt2YXJpYXRpb259XHJcbiAgICAgIC8+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzc05hbWU9e1xyXG4gICAgICAgICAgaXNJbWFnZVxyXG4gICAgICAgICAgICA/ICdtZXJjaGktZW1iZWQtZm9ybV9pbWFnZS1zZWxlY3Qtb3B0aW9uLWNvbnRhaW5lcidcclxuICAgICAgICAgICAgOiAnbWVyY2hpLWVtYmVkLWZvcm1fY29sb3Itc2VsZWN0LWNvbnRhaW5lcidcclxuICAgICAgICB9XHJcbiAgICAgID5cclxuICAgICAgICB7c2VsZWN0YWJsZU9wdGlvbnMubWFwKChvcHRpb246IGFueSwgaW5kZXg6IG51bWJlcikgPT4gKFxyXG4gICAgICAgICAgPFZhcmlhdGlvbkZpZWxkT3B0aW9uRWxlbWVudFxyXG4gICAgICAgICAgICBrZXk9e2B2YXJpYXRpb24tb3B0aW9uLSR7b3B0aW9uLm9wdGlvbklkfS0ke2luZGV4fWB9XHJcbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cclxuICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxyXG4gICAgICAgICAgICBpbnB1dFR5cGU9e2lucHV0VHlwZX1cclxuICAgICAgICAgICAgbmFtZT17bmFtZX1cclxuICAgICAgICAgICAgb3B0aW9uPXtvcHRpb259XHJcbiAgICAgICAgICAgIHZhcmlhdGlvbj17dmFyaWF0aW9ufVxyXG4gICAgICAgICAgLz5cclxuICAgICAgICApKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxWYXJpYXRpb25FcnJvciBuYW1lPXtuYW1lfSAvPlxyXG4gICAgPC9kaXY+XHJcbiAgKTtcclxufTtcclxuXHJcbmludGVyZmFjZSBGaWVsZFByb3BzIHtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHZhcmlhdGlvbjogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgVmFyaWF0aW9uU2VsZWN0SW1hZ2UgPSAocHJvcHM6IEZpZWxkUHJvcHMpID0+IChcclxuICA8VmFyaWF0aW9uU2VsZWN0RWxlbWVudHMgey4uLnByb3BzfSBpbnB1dFR5cGU9J2ltYWdlJyAvPlxyXG4pO1xyXG5leHBvcnQgY29uc3QgVmFyaWF0aW9uU2VsZWN0Q29sb3VyID0gKHByb3BzOiBGaWVsZFByb3BzKSA9PiAoXHJcbiAgPFZhcmlhdGlvblNlbGVjdEVsZW1lbnRzIHsuLi5wcm9wc30gaW5wdXRUeXBlPSdjb2xvdXInIC8+XHJcbik7XHJcbiJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFBQyxTQUFBQSxRQUFBQyxDQUFBLHNDQUFBRCxPQUFBLHdCQUFBRSxNQUFBLHVCQUFBQSxNQUFBLENBQUFDLFFBQUEsYUFBQUYsQ0FBQSxrQkFBQUEsQ0FBQSxnQkFBQUEsQ0FBQSxXQUFBQSxDQUFBLHlCQUFBQyxNQUFBLElBQUFELENBQUEsQ0FBQUcsV0FBQSxLQUFBRixNQUFBLElBQUFELENBQUEsS0FBQUMsTUFBQSxDQUFBRyxTQUFBLHFCQUFBSixDQUFBLEtBQUFELE9BQUEsQ0FBQUMsQ0FBQTtBQUFBLFNBQUFLLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQVgsQ0FBQSxHQUFBUyxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBUCxDQUFBLEdBQUFBLENBQUEsQ0FBQVksTUFBQSxXQUFBTCxDQUFBLFdBQUFFLE1BQUEsQ0FBQUksd0JBQUEsQ0FBQVAsQ0FBQSxFQUFBQyxDQUFBLEVBQUFPLFVBQUEsT0FBQU4sQ0FBQSxDQUFBTyxJQUFBLENBQUFDLEtBQUEsQ0FBQVIsQ0FBQSxFQUFBUixDQUFBLFlBQUFRLENBQUE7QUFBQSxTQUFBUyxjQUFBWCxDQUFBLGFBQUFDLENBQUEsTUFBQUEsQ0FBQSxHQUFBVyxTQUFBLENBQUFDLE1BQUEsRUFBQVosQ0FBQSxVQUFBQyxDQUFBLFdBQUFVLFNBQUEsQ0FBQVgsQ0FB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