adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
252 lines (205 loc) • 30.1 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _icon = _interopRequireDefault(require("../icon"));
var _popover = _interopRequireDefault(require("../popover"));
var _checkbox = _interopRequireDefault(require("../checkbox"));
var _radio = _interopRequireDefault(require("../radio"));
require("./style");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
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."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var prefix = "adui-table";
var getFilteredValue = function getFilteredValue(val) {
if (val === null || val === undefined || val.length === 0) {
return ["all"];
}
return val;
};
var TableFilter = function TableFilter(_ref) {
var filterSearchable = _ref.filterSearchable,
filterSearchPlaceholder = _ref.filterSearchPlaceholder,
filterSearchCaseSensitive = _ref.filterSearchCaseSensitive,
filterSearchFunc = _ref.filterSearchFunc,
filteredValueProp = _ref.filteredValue,
filterMultiple = _ref.filterMultiple,
filterPopoverProps = _ref.filterPopoverProps,
filterVisible = _ref.filterVisible,
filtersProp = _ref.filters,
onFilter = _ref.onFilter,
onFilterVisibleChange = _ref.onFilterVisibleChange,
title = _ref.title,
sortableAndFilterable = _ref.sortableAndFilterable;
if (!filtersProp) {
return null;
}
var _useState = (0, _react.useState)(getFilteredValue(filteredValueProp)),
_useState2 = _slicedToArray(_useState, 2),
filteredValue = _useState2[0],
setFilteredValue = _useState2[1];
var _useState3 = (0, _react.useState)(filterVisible || false),
_useState4 = _slicedToArray(_useState3, 2),
visible = _useState4[0],
setVisible = _useState4[1];
var _useState5 = (0, _react.useState)(""),
_useState6 = _slicedToArray(_useState5, 2),
searchValue = _useState6[0],
setSearchValue = _useState6[1];
if (filteredValueProp !== null && filteredValueProp !== undefined && JSON.stringify(filteredValue) !== JSON.stringify(getFilteredValue(filteredValueProp))) {
setFilteredValue(getFilteredValue(filteredValueProp));
}
if (typeof filterVisible === "boolean" && visible !== filterVisible) {
setVisible(filterVisible);
}
var handleChange = function handleChange(filteredValueParam) {
var newValue = filterMultiple && filteredValueParam ? filteredValueParam : [filteredValueParam];
if (newValue.includes("all")) {
newValue.splice(newValue.indexOf("all"), 1);
}
if (filteredValueProp === null) {
setFilteredValue(getFilteredValue(newValue));
}
if (onFilter) {
if (filteredValueParam === "all") {
onFilter([]);
} else {
onFilter(newValue);
}
}
if (!filterMultiple) {
setTimeout(function () {
if (onFilterVisibleChange) {
onFilterVisibleChange(false);
}
setVisible(false);
}, 100);
}
};
var popup;
if (filterSearchable) {
popup = _react["default"].createElement("div", null, _react["default"].createElement("div", {
className: "".concat(prefix, "-filter-search")
}, _react["default"].createElement("input", {
value: searchValue,
placeholder: filterSearchPlaceholder,
onChange: function onChange(e) {
var value = e.target.value;
setSearchValue(value);
}
}), _react["default"].createElement(_icon["default"], {
icon: "search",
className: "".concat(prefix, "-filter-icon")
})));
}
var filters = searchValue ? filtersProp.filter(function (o) {
var text = o.text;
if (filterSearchFunc) {
return filterSearchFunc(searchValue, o);
}
if (!filterSearchCaseSensitive) {
return String(text).toLocaleLowerCase().includes(searchValue.toLocaleLowerCase());
}
return String(text).includes(searchValue);
}) : filtersProp;
if (filterMultiple) {
popup = _react["default"].createElement(_react["default"].Fragment, null, popup, !filters.length ? _react["default"].createElement("div", {
className: "".concat(prefix, "-filter-no")
}, "\u65E0\u5339\u914D\u7ED3\u679C") : _react["default"].createElement(_checkbox["default"].Group, {
className: "".concat(prefix, "-filterList"),
defaultValue: ["all"],
value: filteredValue,
onChange: handleChange
}, filters.map(function (item) {
return _react["default"].createElement(_checkbox["default"], {
key: item.value,
value: item.value
}, item.text);
})));
} else {
popup = _react["default"].createElement(_react["default"].Fragment, null, popup, !filters.length ? _react["default"].createElement("div", {
className: "".concat(prefix, "-filter-no")
}, "\u65E0\u5339\u914D\u7ED3\u679C") : _react["default"].createElement(_radio["default"].Group, {
className: "".concat(prefix, "-filterList"),
defaultValue: "all",
value: filteredValue ? filteredValue[0] : null,
onChange: handleChange
}, _react["default"].createElement(_radio["default"], {
value: "all"
}, "\u5168\u90E8"), filters.map(function (item) {
return _react["default"].createElement(_radio["default"], {
key: item.value,
value: item.value
}, item.text);
})));
}
return _react["default"].createElement(_popover["default"], _extends({
arrowed: false,
visible: visible,
onVisibleChange: function onVisibleChange(bool) {
if (typeof filterVisible !== "boolean") {
setVisible(bool);
}
if (onFilterVisibleChange) {
onFilterVisibleChange(bool);
}
},
popup: popup,
trigger: "click",
placement: "bottomLeft"
}, filterPopoverProps), _react["default"].createElement("div", {
"data-value": filteredValue,
role: "columnheader",
className: (0, _classnames["default"])("".concat(prefix, "-filter"), _defineProperty({}, "".concat(prefix, "-filtered"), filteredValue && (filteredValue.length > 1 || filteredValue[0] !== "all")))
}, !sortableAndFilterable ? title : null, _react["default"].createElement(_icon["default"], {
icon: "filter-outlined"
}), !sortableAndFilterable && _react["default"].createElement("div", {
className: "".concat(prefix, "-clickholder")
})));
};
TableFilter.propTypes = {
filterMultiple: _propTypes["default"].bool,
filterSearchable: _propTypes["default"].bool,
filterSearchCaseSensitive: _propTypes["default"].bool,
filterSearchPlaceholder: _propTypes["default"].string,
filterSearchFunc: _propTypes["default"].func,
filterPopoverProps: _propTypes["default"].object,
filteredValue: _propTypes["default"].array,
filters: _propTypes["default"].any,
filterVisible: _propTypes["default"].bool,
onFilter: _propTypes["default"].func,
onFilterVisibleChange: _propTypes["default"].func,
title: _propTypes["default"].node,
sortableAndFilterable: _propTypes["default"].bool
};
TableFilter.defaultProps = {
filterMultiple: false,
filterSearchable: false,
filterSearchCaseSensitive: false,
filterSearchPlaceholder: "在筛选项中搜索",
filterSearchFunc: undefined,
filterPopoverProps: {},
filteredValue: null,
filterVisible: null,
filters: null,
onFilter: null,
onFilterVisibleChange: null,
title: null,
sortableAndFilterable: false
};
var _default = TableFilter;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJnZXRGaWx0ZXJlZFZhbHVlIiwidmFsIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwiVGFibGVGaWx0ZXIiLCJmaWx0ZXJTZWFyY2hhYmxlIiwiZmlsdGVyU2VhcmNoUGxhY2Vob2xkZXIiLCJmaWx0ZXJTZWFyY2hDYXNlU2Vuc2l0aXZlIiwiZmlsdGVyU2VhcmNoRnVuYyIsImZpbHRlcmVkVmFsdWVQcm9wIiwiZmlsdGVyZWRWYWx1ZSIsImZpbHRlck11bHRpcGxlIiwiZmlsdGVyUG9wb3ZlclByb3BzIiwiZmlsdGVyVmlzaWJsZSIsImZpbHRlcnNQcm9wIiwiZmlsdGVycyIsIm9uRmlsdGVyIiwib25GaWx0ZXJWaXNpYmxlQ2hhbmdlIiwidGl0bGUiLCJzb3J0YWJsZUFuZEZpbHRlcmFibGUiLCJ1c2VTdGF0ZSIsInNldEZpbHRlcmVkVmFsdWUiLCJ2aXNpYmxlIiwic2V0VmlzaWJsZSIsInNlYXJjaFZhbHVlIiwic2V0U2VhcmNoVmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFuZGxlQ2hhbmdlIiwiZmlsdGVyZWRWYWx1ZVBhcmFtIiwibmV3VmFsdWUiLCJpbmNsdWRlcyIsInNwbGljZSIsImluZGV4T2YiLCJzZXRUaW1lb3V0IiwicG9wdXAiLCJlIiwidmFsdWUiLCJ0YXJnZXQiLCJmaWx0ZXIiLCJvIiwidGV4dCIsIlN0cmluZyIsInRvTG9jYWxlTG93ZXJDYXNlIiwibWFwIiwiaXRlbSIsImJvb2wiLCJjbGFzc05hbWVzIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsIm9iamVjdCIsImFycmF5IiwiYW55Iiwibm9kZSIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvdGFibGUvVGFibGVGaWx0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBQb3BvdmVyLCB7IElQb3BvdmVyUHJvcHMgfSBmcm9tIFwiLi4vcG9wb3ZlclwiXG5pbXBvcnQgQ2hlY2tib3ggZnJvbSBcIi4uL2NoZWNrYm94XCJcbmltcG9ydCBSYWRpbyBmcm9tIFwiLi4vcmFkaW9cIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS10YWJsZVwiXG5jb25zdCBnZXRGaWx0ZXJlZFZhbHVlID0gKHZhbD86IChzdHJpbmcgfCBudW1iZXIpW10gfCBudWxsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQgfHwgdmFsLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXCJhbGxcIl1cbiAgfVxuICByZXR1cm4gdmFsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlRmlsdGVyUHJvcHMge1xuICBmaWx0ZXJlZFZhbHVlPzogKHN0cmluZyB8IG51bWJlcilbXSB8IG51bGxcbiAgZmlsdGVyTXVsdGlwbGU/OiBib29sZWFuXG4gIGZpbHRlclNlYXJjaGFibGU/OiBib29sZWFuXG4gIGZpbHRlclNlYXJjaENhc2VTZW5zaXRpdmU/OiBib29sZWFuXG4gIGZpbHRlclNlYXJjaFBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIGZpbHRlclNlYXJjaEZ1bmM/OiAoXG4gICAgaW5wdXQ6IHN0cmluZyxcbiAgICBpdGVtOiB7IHRleHQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB9XG4gICkgPT4gYm9vbGVhblxuICBmaWx0ZXJQb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIGZpbHRlcnM/OiBBcnJheTx7IHRleHQ6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB8IG51bWJlciB9PiB8IG51bGxcbiAgZmlsdGVyVmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG4gIG9uRmlsdGVyPzogKCh2YWx1ZTogKHN0cmluZyB8IG51bWJlcilbXSkgPT4gdm9pZCkgfCBudWxsXG4gIG9uRmlsdGVyVmlzaWJsZUNoYW5nZT86ICgodmlzaWJsZTogYm9vbGVhbikgPT4gdm9pZCkgfCBudWxsXG4gIHRpdGxlPzogUmVhY3QuUmVhY3ROb2RlXG4gIHNvcnRhYmxlQW5kRmlsdGVyYWJsZT86IGJvb2xlYW5cbn1cblxuLyoqXG4gKiDooajmoLznrZvpgIlcbiAqL1xuY29uc3QgVGFibGVGaWx0ZXI6IFJlYWN0LkZDPElUYWJsZUZpbHRlclByb3BzPiA9ICh7XG4gIGZpbHRlclNlYXJjaGFibGUsXG4gIGZpbHRlclNlYXJjaFBsYWNlaG9sZGVyLFxuICBmaWx0ZXJTZWFyY2hDYXNlU2Vuc2l0aXZlLFxuICBmaWx0ZXJTZWFyY2hGdW5jLFxuICBmaWx0ZXJlZFZhbHVlOiBmaWx0ZXJlZFZhbHVlUHJvcCxcbiAgZmlsdGVyTXVsdGlwbGUsXG4gIGZpbHRlclBvcG92ZXJQcm9wcyxcbiAgZmlsdGVyVmlzaWJsZSxcbiAgZmlsdGVyczogZmlsdGVyc1Byb3AsXG4gIG9uRmlsdGVyLFxuICBvbkZpbHRlclZpc2libGVDaGFuZ2UsXG4gIHRpdGxlLFxuICBzb3J0YWJsZUFuZEZpbHRlcmFibGUsXG59OiBJVGFibGVGaWx0ZXJQcm9wcykgPT4ge1xuICBpZiAoIWZpbHRlcnNQcm9wKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBbZmlsdGVyZWRWYWx1ZSwgc2V0RmlsdGVyZWRWYWx1ZV0gPSB1c2VTdGF0ZShcbiAgICBnZXRGaWx0ZXJlZFZhbHVlKGZpbHRlcmVkVmFsdWVQcm9wKVxuICApXG4gIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IHVzZVN0YXRlKGZpbHRlclZpc2libGUgfHwgZmFsc2UpXG4gIGNvbnN0IFtzZWFyY2hWYWx1ZSwgc2V0U2VhcmNoVmFsdWVdID0gdXNlU3RhdGUoXCJcIilcblxuICAvLyDnm7jlvZPkuo7nlJ/lkb3lkajmnJ8gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzXG4gIGlmIChcbiAgICBmaWx0ZXJlZFZhbHVlUHJvcCAhPT0gbnVsbCAmJlxuICAgIGZpbHRlcmVkVmFsdWVQcm9wICE9PSB1bmRlZmluZWQgJiZcbiAgICBKU09OLnN0cmluZ2lmeShmaWx0ZXJlZFZhbHVlKSAhPT1cbiAgICAgIEpTT04uc3RyaW5naWZ5KGdldEZpbHRlcmVkVmFsdWUoZmlsdGVyZWRWYWx1ZVByb3ApKVxuICApIHtcbiAgICBzZXRGaWx0ZXJlZFZhbHVlKGdldEZpbHRlcmVkVmFsdWUoZmlsdGVyZWRWYWx1ZVByb3ApKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmaWx0ZXJWaXNpYmxlID09PSBcImJvb2xlYW5cIiAmJiB2aXNpYmxlICE9PSBmaWx0ZXJWaXNpYmxlKSB7XG4gICAgc2V0VmlzaWJsZShmaWx0ZXJWaXNpYmxlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gKFxuICAgIGZpbHRlcmVkVmFsdWVQYXJhbTogKHN0cmluZyB8IG51bWJlcikgfCAoc3RyaW5nIHwgbnVtYmVyKVtdXG4gICkgPT4ge1xuICAgIGNvbnN0IG5ld1ZhbHVlOiBhbnkgPVxuICAgICAgZmlsdGVyTXVsdGlwbGUgJiYgZmlsdGVyZWRWYWx1ZVBhcmFtXG4gICAgICAgID8gZmlsdGVyZWRWYWx1ZVBhcmFtXG4gICAgICAgIDogW2ZpbHRlcmVkVmFsdWVQYXJhbV1cbiAgICBpZiAobmV3VmFsdWUuaW5jbHVkZXMoXCJhbGxcIikpIHtcbiAgICAgIG5ld1ZhbHVlLnNwbGljZShuZXdWYWx1ZS5pbmRleE9mKFwiYWxsXCIpLCAxKVxuICAgIH1cbiAgICBpZiAoZmlsdGVyZWRWYWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgIHNldEZpbHRlcmVkVmFsdWUoZ2V0RmlsdGVyZWRWYWx1ZShuZXdWYWx1ZSkpXG4gICAgfVxuICAgIGlmIChvbkZpbHRlcikge1xuICAgICAgaWYgKGZpbHRlcmVkVmFsdWVQYXJhbSA9PT0gXCJhbGxcIikge1xuICAgICAgICBvbkZpbHRlcihbXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uRmlsdGVyKG5ld1ZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWZpbHRlck11bHRpcGxlKSB7XG4gICAgICAvLyDlu7bov5/mmK/kuLrkuoborqnnirbmgIHnmoTlj5jljJblnKjop4bop4nkuIrlhYjooqvmjqXlj5dcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAob25GaWx0ZXJWaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgb25GaWx0ZXJWaXNpYmxlQ2hhbmdlKGZhbHNlKVxuICAgICAgICB9XG4gICAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICB9LCAxMDApXG4gICAgfVxuICB9XG5cbiAgbGV0IHBvcHVwXG5cbiAgaWYgKGZpbHRlclNlYXJjaGFibGUpIHtcbiAgICBwb3B1cCA9IChcbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWZpbHRlci1zZWFyY2hgfT5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHZhbHVlPXtzZWFyY2hWYWx1ZX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtmaWx0ZXJTZWFyY2hQbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSBlLnRhcmdldFxuICAgICAgICAgICAgICBzZXRTZWFyY2hWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8SWNvbiBpY29uPVwic2VhcmNoXCIgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWZpbHRlci1pY29uYH0gLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cblxuICBjb25zdCBmaWx0ZXJzID0gc2VhcmNoVmFsdWVcbiAgICA/IGZpbHRlcnNQcm9wLmZpbHRlcigobykgPT4ge1xuICAgICAgICBjb25zdCB7IHRleHQgfSA9IG9cbiAgICAgICAgaWYgKGZpbHRlclNlYXJjaEZ1bmMpIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyU2VhcmNoRnVuYyhzZWFyY2hWYWx1ZSwgbylcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZpbHRlclNlYXJjaENhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG9jYWxlTG93ZXJDYXNlKCkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZyh0ZXh0KS5pbmNsdWRlcyhzZWFyY2hWYWx1ZSlcbiAgICAgIH0pXG4gICAgOiBmaWx0ZXJzUHJvcFxuXG4gIGlmIChmaWx0ZXJNdWx0aXBsZSkge1xuICAgIHBvcHVwID0gKFxuICAgICAgPD5cbiAgICAgICAge3BvcHVwfVxuICAgICAgICB7IWZpbHRlcnMubGVuZ3RoID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWZpbHRlci1ub2B9PuaXoOWMuemFjee7k+aenDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDaGVja2JveC5Hcm91cFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWZpbHRlckxpc3RgfVxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtbXCJhbGxcIl19XG4gICAgICAgICAgICB2YWx1ZT17ZmlsdGVyZWRWYWx1ZX1cbiAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2ZpbHRlcnMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICAgIDxDaGVja2JveCBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfT5cbiAgICAgICAgICAgICAgICB7aXRlbS50ZXh0fVxuICAgICAgICAgICAgICA8L0NoZWNrYm94PlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9DaGVja2JveC5Hcm91cD5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfSBlbHNlIHtcbiAgICBwb3B1cCA9IChcbiAgICAgIDw+XG4gICAgICAgIHtwb3B1cH1cbiAgICAgICAgeyFmaWx0ZXJzLmxlbmd0aCA/IChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1maWx0ZXItbm9gfT7ml6DljLnphY3nu5Pmnpw8L2Rpdj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UmFkaW8uR3JvdXBcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1maWx0ZXJMaXN0YH1cbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZT1cImFsbFwiXG4gICAgICAgICAgICB2YWx1ZT17ZmlsdGVyZWRWYWx1ZSA/IGZpbHRlcmVkVmFsdWVbMF0gOiBudWxsfVxuICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8UmFkaW8gdmFsdWU9XCJhbGxcIj7lhajpg6g8L1JhZGlvPlxuICAgICAgICAgICAge2ZpbHRlcnMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICAgIDxSYWRpbyBrZXk9e2l0ZW0udmFsdWV9IHZhbHVlPXtpdGVtLnZhbHVlfT5cbiAgICAgICAgICAgICAgICB7aXRlbS50ZXh0fVxuICAgICAgICAgICAgICA8L1JhZGlvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9SYWRpby5Hcm91cD5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFBvcG92ZXJcbiAgICAgIGFycm93ZWQ9e2ZhbHNlfVxuICAgICAgdmlzaWJsZT17dmlzaWJsZX1cbiAgICAgIG9uVmlzaWJsZUNoYW5nZT17KGJvb2wpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmaWx0ZXJWaXNpYmxlICE9PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgIHNldFZpc2libGUoYm9vbClcbiAgICAgICAgfVxuICAgICAgICBpZiAob25GaWx0ZXJWaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgb25GaWx0ZXJWaXNpYmxlQ2hhbmdlKGJvb2wpXG4gICAgICAgIH1cbiAgICAgIH19XG4gICAgICBwb3B1cD17cG9wdXB9XG4gICAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgICAgcGxhY2VtZW50PVwiYm90dG9tTGVmdFwiXG4gICAgICB7Li4uZmlsdGVyUG9wb3ZlclByb3BzfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgZGF0YS12YWx1ZT17ZmlsdGVyZWRWYWx1ZX1cbiAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhgJHtwcmVmaXh9LWZpbHRlcmAsIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS1maWx0ZXJlZGBdOlxuICAgICAgICAgICAgZmlsdGVyZWRWYWx1ZSAmJlxuICAgICAgICAgICAgKGZpbHRlcmVkVmFsdWUubGVuZ3RoID4gMSB8fCBmaWx0ZXJlZFZhbHVlWzBdICE9PSBcImFsbFwiKSxcbiAgICAgICAgfSl9XG4gICAgICA+XG4gICAgICAgIHshc29ydGFibGVBbmRGaWx0ZXJhYmxlID8gdGl0bGUgOiBudWxsfVxuICAgICAgICA8SWNvbiBpY29uPVwiZmlsdGVyLW91dGxpbmVkXCIgLz5cbiAgICAgICAgeyFzb3J0YWJsZUFuZEZpbHRlcmFibGUgJiYgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tY2xpY2tob2xkZXJgfSAvPn1cbiAgICAgIDwvZGl2PlxuICAgIDwvUG9wb3Zlcj5cbiAgKVxufVxuXG5UYWJsZUZpbHRlci5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDmmK/lkKblpJrpgIlcbiAgICovXG4gIGZpbHRlck11bHRpcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOetm+mAieaYr+WQpuaUr+aMgeaQnOe0olxuICAgKi9cbiAgZmlsdGVyU2VhcmNoYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDnrZvpgInmkJzntKLlvIDlkK/lpKflsI/lhpnmlY/mhJ/mkJzntKLvvIzpu5jorqTkuLogZmFsc2VcbiAgICovXG4gIGZpbHRlclNlYXJjaENhc2VTZW5zaXRpdmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog562b6YCJ5pCc57SiIHBsYWNlaG9sZGVyXG4gICAqL1xuICBmaWx0ZXJTZWFyY2hQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOetm+mAieaQnOe0oueahOiHquWumuS5iSBmdW5jdGlvblxuICAgKi9cbiAgZmlsdGVyU2VhcmNoRnVuYzogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDnrZvpgIkgUG9wb3ZlciBwcm9wc++8jOS8muWwhuatpOWvueixoemAj+S8oOe7mSA8UG9wb3ZlciAvPlxuICAgKi9cbiAgZmlsdGVyUG9wb3ZlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog5Y+v5Lul5LuO5aSW6YOo5Lyg5YWl562b6YCJ55qE5YC877yMbnVsbCwgW10sIOmDveS8muivhuWIq+S4uuacquetm+mAieeKtuaAgVxuICAgKi9cbiAgZmlsdGVyZWRWYWx1ZTogUHJvcFR5cGVzLmFycmF5LFxuICAvKipcbiAgICog562b6YCJ6aG577yM5qC85byP77yaW3sgdGV4dDogXCLmnIvlj4vlnIjlub/lkYpcIiwgdmFsdWU6ICcyJyB9XVxuICAgKi9cbiAgZmlsdGVyczogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOS7juWklumDqOaOp+WItiBmaWx0ZXIgUG9wb3ZlciDnmoTmmL7npLpcbiAgICovXG4gIGZpbHRlclZpc2libGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICog562b6YCJ5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uRmlsdGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOetm+mAiSBwb3B1cCB2aXNpYmxlIOWPmOWMluaXtueahCBoYW5kbGVy77yM5Y+C5pWwIChib29sLCBjb2wpXG4gICAqL1xuICBvbkZpbHRlclZpc2libGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogdGl0bGVcbiAgICovXG4gIHRpdGxlOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIHNvcnRhYmxlQW5kRmlsdGVyYWJsZT86IGJvb2xlYW5cbiAgICovXG4gIHNvcnRhYmxlQW5kRmlsdGVyYWJsZTogUHJvcFR5cGVzLmJvb2wsXG59XG5cblRhYmxlRmlsdGVyLmRlZmF1bHRQcm9wcyA9IHtcbiAgZmlsdGVyTXVsdGlwbGU6IGZhbHNlLFxuICBmaWx0ZXJTZWFyY2hhYmxlOiBmYWxzZSxcbiAgZmlsdGVyU2VhcmNoQ2FzZVNlbnNpdGl2ZTogZmFsc2UsXG4gIGZpbHRlclNlYXJjaFBsYWNlaG9sZGVyOiBcIuWcqOetm+mAiemhueS4reaQnOe0olwiLFxuICBmaWx0ZXJTZWFyY2hGdW5jOiB1bmRlZmluZWQsXG4gIGZpbHRlclBvcG92ZXJQcm9wczoge30sXG4gIGZpbHRlcmVkVmFsdWU6IG51bGwsXG4gIGZpbHRlclZpc2libGU6IG51bGwsXG4gIGZpbHRlcnM6IG51bGwsXG4gIG9uRmlsdGVyOiBudWxsLFxuICBvbkZpbHRlclZpc2libGVDaGFuZ2U6IG51bGwsXG4gIHRpdGxlOiBudWxsLFxuICBzb3J0YWJsZUFuZEZpbHRlcmFibGU6IGZhbHNlLFxufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUZpbHRlclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEsTUFBTSxHQUFHLFlBQWY7O0FBQ0EsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFtQixDQUFDQyxHQUFELEVBQXNDO0VBQzdELElBQUlBLEdBQUcsS0FBSyxJQUFSLElBQWdCQSxHQUFHLEtBQUtDLFNBQXhCLElBQXFDRCxHQUFHLENBQUNFLE1BQUosS0FBZSxDQUF4RCxFQUEyRDtJQUN6RCxPQUFPLENBQUMsS0FBRCxDQUFQO0VBQ0Q7O0VBQ0QsT0FBT0YsR0FBUDtBQUNELENBTEQ7O0FBNkJBLElBQU1HLFdBQXdDLEdBQUcsU0FBM0NBLFdBQTJDLE9BY3hCO0VBQUEsSUFidkJDLGdCQWF1QixRQWJ2QkEsZ0JBYXVCO0VBQUEsSUFadkJDLHVCQVl1QixRQVp2QkEsdUJBWXVCO0VBQUEsSUFYdkJDLHlCQVd1QixRQVh2QkEseUJBV3VCO0VBQUEsSUFWdkJDLGdCQVV1QixRQVZ2QkEsZ0JBVXVCO0VBQUEsSUFUUkMsaUJBU1EsUUFUdkJDLGFBU3VCO0VBQUEsSUFSdkJDLGNBUXVCLFFBUnZCQSxjQVF1QjtFQUFBLElBUHZCQyxrQkFPdUIsUUFQdkJBLGtCQU91QjtFQUFBLElBTnZCQyxhQU11QixRQU52QkEsYUFNdUI7RUFBQSxJQUxkQyxXQUtjLFFBTHZCQyxPQUt1QjtFQUFBLElBSnZCQyxRQUl1QixRQUp2QkEsUUFJdUI7RUFBQSxJQUh2QkMscUJBR3VCLFFBSHZCQSxxQkFHdUI7RUFBQSxJQUZ2QkMsS0FFdUIsUUFGdkJBLEtBRXVCO0VBQUEsSUFEdkJDLHFCQUN1QixRQUR2QkEscUJBQ3VCOztFQUN2QixJQUFJLENBQUNMLFdBQUwsRUFBa0I7SUFDaEIsT0FBTyxJQUFQO0VBQ0Q7O0VBQ0QsZ0JBQTBDLElBQUFNLGVBQUEsRUFDeENwQixnQkFBZ0IsQ0FBQ1MsaUJBQUQsQ0FEd0IsQ0FBMUM7RUFBQTtFQUFBLElBQU9DLGFBQVA7RUFBQSxJQUFzQlcsZ0JBQXRCOztFQUdBLGlCQUE4QixJQUFBRCxlQUFBLEVBQVNQLGFBQWEsSUFBSSxLQUExQixDQUE5QjtFQUFBO0VBQUEsSUFBT1MsT0FBUDtFQUFBLElBQWdCQyxVQUFoQjs7RUFDQSxpQkFBc0MsSUFBQUgsZUFBQSxFQUFTLEVBQVQsQ0FBdEM7RUFBQTtFQUFBLElBQU9JLFdBQVA7RUFBQSxJQUFvQkMsY0FBcEI7O0VBR0EsSUFDRWhCLGlCQUFpQixLQUFLLElBQXRCLElBQ0FBLGlCQUFpQixLQUFLUCxTQUR0QixJQUVBd0IsSUFBSSxDQUFDQyxTQUFMLENBQWVqQixhQUFmLE1BQ0VnQixJQUFJLENBQUNDLFNBQUwsQ0FBZTNCLGdCQUFnQixDQUFDUyxpQkFBRCxDQUEvQixDQUpKLEVBS0U7SUFDQVksZ0JBQWdCLENBQUNyQixnQkFBZ0IsQ0FBQ1MsaUJBQUQsQ0FBakIsQ0FBaEI7RUFDRDs7RUFFRCxJQUFJLE9BQU9JLGFBQVAsS0FBeUIsU0FBekIsSUFBc0NTLE9BQU8sS0FBS1QsYUFBdEQsRUFBcUU7SUFDbkVVLFVBQVUsQ0FBQ1YsYUFBRCxDQUFWO0VBQ0Q7O0VBRUQsSUFBTWUsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FDbkJDLGtCQURtQixFQUVoQjtJQUNILElBQU1DLFFBQWEsR0FDakJuQixjQUFjLElBQUlrQixrQkFBbEIsR0FDSUEsa0JBREosR0FFSSxDQUFDQSxrQkFBRCxDQUhOOztJQUlBLElBQUlDLFFBQVEsQ0FBQ0MsUUFBVCxDQUFrQixLQUFsQixDQUFKLEVBQThCO01BQzVCRCxRQUFRLENBQUNFLE1BQVQsQ0FBZ0JGLFFBQVEsQ0FBQ0csT0FBVCxDQUFpQixLQUFqQixDQUFoQixFQUF5QyxDQUF6QztJQUNEOztJQUNELElBQUl4QixpQkFBaUIsS0FBSyxJQUExQixFQUFnQztNQUM5QlksZ0JBQWdCLENBQUNyQixnQkFBZ0IsQ0FBQzhCLFFBQUQsQ0FBakIsQ0FBaEI7SUFDRDs7SUFDRCxJQUFJZCxRQUFKLEVBQWM7TUFDWixJQUFJYSxrQkFBa0IsS0FBSyxLQUEzQixFQUFrQztRQUNoQ2IsUUFBUSxDQUFDLEVBQUQsQ0FBUjtNQUNELENBRkQsTUFFTztRQUNMQSxRQUFRLENBQUNjLFFBQUQsQ0FBUjtNQUNEO0lBQ0Y7O0lBQ0QsSUFBSSxDQUFDbkIsY0FBTCxFQUFxQjtNQUVuQnVCLFVBQVUsQ0FBQyxZQUFNO1FBQ2YsSUFBSWpCLHFCQUFKLEVBQTJCO1VBQ3pCQSxxQkFBcUIsQ0FBQyxLQUFELENBQXJCO1FBQ0Q7O1FBQ0RNLFVBQVUsQ0FBQyxLQUFELENBQVY7TUFDRCxDQUxTLEVBS1AsR0FMTyxDQUFWO0lBTUQ7RUFDRixDQTdCRDs7RUErQkEsSUFBSVksS0FBSjs7RUFFQSxJQUFJOUIsZ0JBQUosRUFBc0I7SUFDcEI4QixLQUFLLEdBQ0gsNkNBQ0U7TUFBSyxTQUFTLFlBQUtwQyxNQUFMO0lBQWQsR0FDRTtNQUNFLEtBQUssRUFBRXlCLFdBRFQ7TUFFRSxXQUFXLEVBQUVsQix1QkFGZjtNQUdFLFFBQVEsRUFBRSxrQkFBQzhCLENBQUQsRUFBTztRQUNmLElBQVFDLEtBQVIsR0FBa0JELENBQUMsQ0FBQ0UsTUFBcEIsQ0FBUUQsS0FBUjtRQUNBWixjQUFjLENBQUNZLEtBQUQsQ0FBZDtNQUNEO0lBTkgsRUFERixFQVNFLGdDQUFDLGdCQUFEO01BQU0sSUFBSSxFQUFDLFFBQVg7TUFBb0IsU0FBUyxZQUFLdEMsTUFBTDtJQUE3QixFQVRGLENBREYsQ0FERjtFQWVEOztFQUVELElBQU1nQixPQUFPLEdBQUdTLFdBQVcsR0FDdkJWLFdBQVcsQ0FBQ3lCLE1BQVosQ0FBbUIsVUFBQ0MsQ0FBRCxFQUFPO0lBQ3hCLElBQVFDLElBQVIsR0FBaUJELENBQWpCLENBQVFDLElBQVI7O0lBQ0EsSUFBSWpDLGdCQUFKLEVBQXNCO01BQ3BCLE9BQU9BLGdCQUFnQixDQUFDZ0IsV0FBRCxFQUFjZ0IsQ0FBZCxDQUF2QjtJQUNEOztJQUNELElBQUksQ0FBQ2pDLHlCQUFMLEVBQWdDO01BQzlCLE9BQU9tQyxNQUFNLENBQUNELElBQUQsQ0FBTixDQUNKRSxpQkFESSxHQUVKWixRQUZJLENBRUtQLFdBQVcsQ0FBQ21CLGlCQUFaLEVBRkwsQ0FBUDtJQUdEOztJQUNELE9BQU9ELE1BQU0sQ0FBQ0QsSUFBRCxDQUFOLENBQWFWLFFBQWIsQ0FBc0JQLFdBQXRCLENBQVA7RUFDRCxDQVhELENBRHVCLEdBYXZCVixXQWJKOztFQWVBLElBQUlILGNBQUosRUFBb0I7SUFDbEJ3QixLQUFLLEdBQ0gsa0VBQ0dBLEtBREgsRUFFRyxDQUFDcEIsT0FBTyxDQUFDWixNQUFULEdBQ0M7TUFBSyxTQUFTLFlBQUtKLE1BQUw7SUFBZCxvQ0FERCxHQUdDLGdDQUFDLG9CQUFELENBQVUsS0FBVjtNQUNFLFNBQVMsWUFBS0EsTUFBTCxnQkFEWDtNQUVFLFlBQVksRUFBRSxDQUFDLEtBQUQsQ0FGaEI7TUFHRSxLQUFLLEVBQUVXLGFBSFQ7TUFJRSxRQUFRLEVBQUVrQjtJQUpaLEdBTUdiLE9BQU8sQ0FBQzZCLEdBQVIsQ0FBWSxVQUFDQyxJQUFEO01BQUEsT0FDWCxnQ0FBQyxvQkFBRDtRQUFVLEdBQUcsRUFBRUEsSUFBSSxDQUFDUixLQUFwQjtRQUEyQixLQUFLLEVBQUVRLElBQUksQ0FBQ1I7TUFBdkMsR0FDR1EsSUFBSSxDQUFDSixJQURSLENBRFc7SUFBQSxDQUFaLENBTkgsQ0FMSixDQURGO0VBcUJELENBdEJELE1Bc0JPO0lBQ0xOLEtBQUssR0FDSCxrRUFDR0EsS0FESCxFQUVHLENBQUNwQixPQUFPLENBQUNaLE1BQVQsR0FDQztNQUFLLFNBQVMsWUFBS0osTUFBTDtJQUFkLG9DQURELEdBR0MsZ0NBQUMsaUJBQUQsQ0FBTyxLQUFQO01BQ0UsU0FBUyxZQUFLQSxNQUFMLGdCQURYO01BRUUsWUFBWSxFQUFDLEtBRmY7TUFHRSxLQUFLLEVBQUVXLGFBQWEsR0FBR0EsYUFBYSxDQUFDLENBQUQsQ0FBaEIsR0FBc0IsSUFINUM7TUFJRSxRQUFRLEVBQUVrQjtJQUpaLEdBTUUsZ0NBQUMsaUJBQUQ7TUFBTyxLQUFLLEVBQUM7SUFBYixrQkFORixFQU9HYixPQUFPLENBQUM2QixHQUFSLENBQVksVUFBQ0MsSUFBRDtNQUFBLE9BQ1gsZ0NBQUMsaUJBQUQ7UUFBTyxHQUFHLEVBQUVBLElBQUksQ0FBQ1IsS0FBakI7UUFBd0IsS0FBSyxFQUFFUSxJQUFJLENBQUNSO01BQXBDLEdBQ0dRLElBQUksQ0FBQ0osSUFEUixDQURXO0lBQUEsQ0FBWixDQVBILENBTEosQ0FERjtFQXNCRDs7RUFFRCxPQUNFLGdDQUFDLG1CQUFEO0lBQ0UsT0FBTyxFQUFFLEtBRFg7SUFFRSxPQUFPLEVBQUVuQixPQUZYO0lBR0UsZUFBZSxFQUFFLHlCQUFDd0IsSUFBRCxFQUFVO01BQ3pCLElBQUksT0FBT2pDLGFBQVAsS0FBeUIsU0FBN0IsRUFBd0M7UUFDdENVLFVBQVUsQ0FBQ3VCLElBQUQsQ0FBVjtNQUNEOztNQUNELElBQUk3QixxQkFBSixFQUEyQjtRQUN6QkEscUJBQXFCLENBQUM2QixJQUFELENBQXJCO01BQ0Q7SUFDRixDQVZIO0lBV0UsS0FBSyxFQUFFWCxLQVhUO0lBWUUsT0FBTyxFQUFDLE9BWlY7SUFhRSxTQUFTLEVBQUM7RUFiWixHQWNNdkIsa0JBZE4sR0FnQkU7SUFDRSxjQUFZRixhQURkO0lBRUUsSUFBSSxFQUFDLGNBRlA7SUFHRSxTQUFTLEVBQUUsSUFBQXFDLHNCQUFBLFlBQWNoRCxNQUFkLDRDQUNMQSxNQURLLGdCQUVQVyxhQUFhLEtBQ1pBLGFBQWEsQ0FBQ1AsTUFBZCxHQUF1QixDQUF2QixJQUE0Qk8sYUFBYSxDQUFDLENBQUQsQ0FBYixLQUFxQixLQURyQyxDQUZOO0VBSGIsR0FTRyxDQUFDUyxxQkFBRCxHQUF5QkQsS0FBekIsR0FBaUMsSUFUcEMsRUFVRSxnQ0FBQyxnQkFBRDtJQUFNLElBQUksRUFBQztFQUFYLEVBVkYsRUFXRyxDQUFDQyxxQkFBRCxJQUEwQjtJQUFLLFNBQVMsWUFBS3BCLE1BQUw7RUFBZCxFQVg3QixDQWhCRixDQURGO0FBZ0NELENBdkxEOztBQXlMQUssV0FBVyxDQUFDNEMsU0FBWixHQUF3QjtFQUl0QnJDLGNBQWMsRUFBRXNDLHFCQUFBLENBQVVILElBSko7RUFRdEJ6QyxnQkFBZ0IsRUFBRTRDLHFCQUFBLENBQVVILElBUk47RUFZdEJ2Qyx5QkFBeUIsRUFBRTBDLHFCQUFBLENBQVVILElBWmY7RUFnQnRCeEMsdUJBQXVCLEVBQUUyQyxxQkFBQSxDQUFVQyxNQWhCYjtFQW9CdEIxQyxnQkFBZ0IsRUFBRXlDLHFCQUFBLENBQVVFLElBcEJOO0VBd0J0QnZDLGtCQUFrQixFQUFFcUMscUJBQUEsQ0FBVUcsTUF4QlI7RUE0QnRCMUMsYUFBYSxFQUFFdUMscUJBQUEsQ0FBVUksS0E1Qkg7RUFnQ3RCdEMsT0FBTyxFQUFFa0MscUJBQUEsQ0FBVUssR0FoQ0c7RUFvQ3RCekMsYUFBYSxFQUFFb0MscUJBQUEsQ0FBVUgsSUFwQ0g7RUF3Q3RCOUIsUUFBUSxFQUFFaUMscUJBQUEsQ0FBVUUsSUF4Q0U7RUE0Q3RCbEMscUJBQXFCLEVBQUVnQyxxQkFBQSxDQUFVRSxJQTVDWDtFQWdEdEJqQyxLQUFLLEVBQUUrQixxQkFBQSxDQUFVTSxJQWhESztFQW9EdEJwQyxxQkFBcUIsRUFBRThCLHFCQUFBLENBQVVIO0FBcERYLENBQXhCO0FBdURBMUMsV0FBVyxDQUFDb0QsWUFBWixHQUEyQjtFQUN6QjdDLGNBQWMsRUFBRSxLQURTO0VBRXpCTixnQkFBZ0IsRUFBRSxLQUZPO0VBR3pCRSx5QkFBeUIsRUFBRSxLQUhGO0VBSXpCRCx1QkFBdUIsRUFBRSxTQUpBO0VBS3pCRSxnQkFBZ0IsRUFBRU4sU0FMTztFQU16QlUsa0JBQWtCLEVBQUUsRUFOSztFQU96QkYsYUFBYSxFQUFFLElBUFU7RUFRekJHLGFBQWEsRUFBRSxJQVJVO0VBU3pCRSxPQUFPLEVBQUUsSUFUZ0I7RUFVekJDLFFBQVEsRUFBRSxJQVZlO0VBV3pCQyxxQkFBcUIsRUFBRSxJQVhFO0VBWXpCQyxLQUFLLEVBQUUsSUFaa0I7RUFhekJDLHFCQUFxQixFQUFFO0FBYkUsQ0FBM0I7ZUFnQmVmLFcifQ==