@pie-lib/math-rendering 3.4.0-beta.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,95 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.wrapMath = exports.unWrapMath = exports.BracketTypes = void 0;
9
-
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
-
12
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
-
14
- var _PAIRS;
15
-
16
- var BracketTypes = {};
17
- exports.BracketTypes = BracketTypes;
18
- BracketTypes.ROUND_BRACKETS = 'round_brackets';
19
- BracketTypes.SQUARE_BRACKETS = 'square_brackets';
20
- BracketTypes.DOLLAR = 'dollar';
21
- BracketTypes.DOUBLE_DOLLAR = 'double_dollar';
22
- var PAIRS = (_PAIRS = {}, (0, _defineProperty2["default"])(_PAIRS, BracketTypes.ROUND_BRACKETS, ['\\(', '\\)']), (0, _defineProperty2["default"])(_PAIRS, BracketTypes.SQUARE_BRACKETS, ['\\[', '\\]']), (0, _defineProperty2["default"])(_PAIRS, BracketTypes.DOLLAR, ['$', '$']), (0, _defineProperty2["default"])(_PAIRS, BracketTypes.DOUBLE_DOLLAR, ['$$', '$$']), _PAIRS);
23
-
24
- var wrapMath = function wrapMath(content, wrapType) {
25
- if (wrapType === BracketTypes.SQUARE_BRACKETS) {
26
- console.warn('\\[...\\] is not supported yet'); // eslint-disable-line
27
-
28
- wrapType = BracketTypes.ROUND_BRACKETS;
29
- }
30
-
31
- if (wrapType === BracketTypes.DOUBLE_DOLLAR) {
32
- console.warn('$$...$$ is not supported yet'); // eslint-disable-line
33
-
34
- wrapType = BracketTypes.DOLLAR;
35
- }
36
-
37
- var _ref = PAIRS[wrapType] || PAIRS[BracketTypes.ROUND_BRACKETS],
38
- _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
39
- start = _ref2[0],
40
- end = _ref2[1];
41
-
42
- return "".concat(start).concat(content).concat(end);
43
- };
44
-
45
- exports.wrapMath = wrapMath;
46
-
47
- var unWrapMath = function unWrapMath(content) {
48
- var displayStyleIndex = content.indexOf('\\displaystyle');
49
-
50
- if (displayStyleIndex !== -1) {
51
- console.warn('\\displaystyle is not supported - removing'); // eslint-disable-line
52
-
53
- content = content.replace('\\displaystyle', '').trim();
54
- }
55
-
56
- if (content.startsWith('$$') && content.endsWith('$$')) {
57
- console.warn('$$ syntax is not yet supported'); // eslint-disable-line
58
-
59
- return {
60
- unwrapped: content.substring(2, content.length - 2),
61
- wrapType: BracketTypes.DOLLAR
62
- };
63
- }
64
-
65
- if (content.startsWith('$') && content.endsWith('$')) {
66
- return {
67
- unwrapped: content.substring(1, content.length - 1),
68
- wrapType: BracketTypes.DOLLAR
69
- };
70
- }
71
-
72
- if (content.startsWith('\\[') && content.endsWith('\\]')) {
73
- console.warn('\\[..\\] syntax is not yet supported'); // eslint-disable-line
74
-
75
- return {
76
- unwrapped: content.substring(2, content.length - 2),
77
- wrapType: BracketTypes.ROUND_BRACKETS
78
- };
79
- }
80
-
81
- if (content.startsWith('\\(') && content.endsWith('\\)')) {
82
- return {
83
- unwrapped: content.substring(2, content.length - 2),
84
- wrapType: BracketTypes.ROUND_BRACKETS
85
- };
86
- }
87
-
88
- return {
89
- unwrapped: content,
90
- wrapType: BracketTypes.ROUND_BRACKETS
91
- };
92
- };
93
-
94
- exports.unWrapMath = unWrapMath;
95
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9ub3JtYWxpemF0aW9uLmpzIl0sIm5hbWVzIjpbIkJyYWNrZXRUeXBlcyIsIlJPVU5EX0JSQUNLRVRTIiwiU1FVQVJFX0JSQUNLRVRTIiwiRE9MTEFSIiwiRE9VQkxFX0RPTExBUiIsIlBBSVJTIiwid3JhcE1hdGgiLCJjb250ZW50Iiwid3JhcFR5cGUiLCJjb25zb2xlIiwid2FybiIsInN0YXJ0IiwiZW5kIiwidW5XcmFwTWF0aCIsImRpc3BsYXlTdHlsZUluZGV4IiwiaW5kZXhPZiIsInJlcGxhY2UiLCJ0cmltIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwidW53cmFwcGVkIiwic3Vic3RyaW5nIiwibGVuZ3RoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBTyxJQUFNQSxZQUFZLEdBQUcsRUFBckI7O0FBRVBBLFlBQVksQ0FBQ0MsY0FBYixHQUE4QixnQkFBOUI7QUFDQUQsWUFBWSxDQUFDRSxlQUFiLEdBQStCLGlCQUEvQjtBQUNBRixZQUFZLENBQUNHLE1BQWIsR0FBc0IsUUFBdEI7QUFDQUgsWUFBWSxDQUFDSSxhQUFiLEdBQTZCLGVBQTdCO0FBRUEsSUFBTUMsS0FBSywwREFDUkwsWUFBWSxDQUFDQyxjQURMLEVBQ3NCLENBQUMsS0FBRCxFQUFRLEtBQVIsQ0FEdEIsNENBRVJELFlBQVksQ0FBQ0UsZUFGTCxFQUV1QixDQUFDLEtBQUQsRUFBUSxLQUFSLENBRnZCLDRDQUdSRixZQUFZLENBQUNHLE1BSEwsRUFHYyxDQUFDLEdBQUQsRUFBTSxHQUFOLENBSGQsNENBSVJILFlBQVksQ0FBQ0ksYUFKTCxFQUlxQixDQUFDLElBQUQsRUFBTyxJQUFQLENBSnJCLFVBQVg7O0FBT08sSUFBTUUsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQ0MsT0FBRCxFQUFVQyxRQUFWLEVBQXVCO0FBQzdDLE1BQUlBLFFBQVEsS0FBS1IsWUFBWSxDQUFDRSxlQUE5QixFQUErQztBQUM3Q08sSUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWEsZ0NB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bEIsR0FBUDtBQUlELENBeENNIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IEJyYWNrZXRUeXBlcyA9IHt9O1xuXG5CcmFja2V0VHlwZXMuUk9VTkRfQlJBQ0tFVFMgPSAncm91bmRfYnJhY2tldHMnO1xuQnJhY2tldFR5cGVzLlNRVUFSRV9CUkFDS0VUUyA9ICdzcXVhcmVfYnJhY2tldHMnO1xuQnJhY2tldFR5cGVzLkRPTExBUiA9ICdkb2xsYXInO1xuQnJhY2tldFR5cGVzLkRPVUJMRV9ET0xMQVIgPSAnZG91YmxlX2RvbGxhcic7XG5cbmNvbnN0IFBBSVJTID0ge1xuICBbQnJhY2tldFR5cGVzLlJPVU5EX0JSQUNLRVRTXTogWydcXFxcKCcsICdcXFxcKSddLFxuICBbQnJhY2tldFR5cGVzLlNRVUFSRV9CUkFDS0VUU106IFsnXFxcXFsnLCAnXFxcXF0nXSxcbiAgW0JyYWNrZXRUeXBlcy5ET0xMQVJdOiBbJyQnLCAnJCddLFxuICBbQnJhY2tldFR5cGVzLkRPVUJMRV9ET0xMQVJdOiBbJyQkJywgJyQkJ10sXG59O1xuXG5leHBvcnQgY29uc3Qgd3JhcE1hdGggPSAoY29udGVudCwgd3JhcFR5cGUpID0+IHtcbiAgaWYgKHdyYXBUeXBlID09PSBCcmFja2V0VHlwZXMuU1FVQVJFX0JSQUNLRVRTKSB7XG4gICAgY29uc29sZS53YXJuKCdcXFxcWy4uLlxcXFxdIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB3cmFwVHlwZSA9IEJyYWNrZXRUeXBlcy5ST1VORF9CUkFDS0VUUztcbiAgfVxuICBpZiAod3JhcFR5cGUgPT09IEJyYWNrZXRUeXBlcy5ET1VCTEVfRE9MTEFSKSB7XG4gICAgY29uc29sZS53YXJuKCckJC4uLiQkIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Jyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICB3cmFwVHlwZSA9IEJyYWNrZXRUeXBlcy5ET0xMQVI7XG4gIH1cblxuICBjb25zdCBbc3RhcnQsIGVuZF0gPSBQQUlSU1t3cmFwVHlwZV0gfHwgUEFJUlNbQnJhY2tldFR5cGVzLlJPVU5EX0JSQUNLRVRTXTtcbiAgcmV0dXJuIGAke3N0YXJ0fSR7Y29udGVudH0ke2VuZH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IHVuV3JhcE1hdGggPSAoY29udGVudCkgPT4ge1xuICBjb25zdCBkaXNwbGF5U3R5bGVJbmRleCA9IGNvbnRlbnQuaW5kZXhPZignXFxcXGRpc3BsYXlzdHlsZScpO1xuICBpZiAoZGlzcGxheVN0eWxlSW5kZXggIT09IC0xKSB7XG4gICAgY29uc29sZS53YXJuKCdcXFxcZGlzcGxheXN0eWxlIGlzIG5vdCBzdXBwb3J0ZWQgLSByZW1vdmluZycpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZSgnXFxcXGRpc3BsYXlzdHlsZScsICcnKS50cmltKCk7XG4gIH1cblxuICBpZiAoY29udGVudC5zdGFydHNXaXRoKCckJCcpICYmIGNvbnRlbnQuZW5kc1dpdGgoJyQkJykpIHtcbiAgICBjb25zb2xlLndhcm4oJyQkIHN5bnRheCBpcyBub3QgeWV0IHN1cHBvcnRlZCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgcmV0dXJuIHtcbiAgICAgIHVud3JhcHBlZDogY29udGVudC5zdWJzdHJpbmcoMiwgY29udGVudC5sZW5ndGggLSAyKSxcbiAgICAgIHdyYXBUeXBlOiBCcmFja2V0VHlwZXMuRE9MTEFSLFxuICAgIH07XG4gIH1cbiAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnJCcpICYmIGNvbnRlbnQuZW5kc1dpdGgoJyQnKSkge1xuICAgIHJldHVybiB7XG4gICAgICB1bndyYXBwZWQ6IGNvbnRlbnQuc3Vic3RyaW5nKDEsIGNvbnRlbnQubGVuZ3RoIC0gMSksXG4gICAgICB3cmFwVHlwZTogQnJhY2tldFR5cGVzLkRPTExBUixcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnXFxcXFsnKSAmJiBjb250ZW50LmVuZHNXaXRoKCdcXFxcXScpKSB7XG4gICAgY29uc29sZS53YXJuKCdcXFxcWy4uXFxcXF0gc3ludGF4IGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICByZXR1cm4ge1xuICAgICAgdW53cmFwcGVkOiBjb250ZW50LnN1YnN0cmluZygyLCBjb250ZW50Lmxlbmd0aCAtIDIpLFxuICAgICAgd3JhcFR5cGU6IEJyYWNrZXRUeXBlcy5ST1VORF9CUkFDS0VUUyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKGNvbnRlbnQuc3RhcnRzV2l0aCgnXFxcXCgnKSAmJiBjb250ZW50LmVuZHNXaXRoKCdcXFxcKScpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVud3JhcHBlZDogY29udGVudC5zdWJzdHJpbmcoMiwgY29udGVudC5sZW5ndGggLSAyKSxcbiAgICAgIHdyYXBUeXBlOiBCcmFja2V0VHlwZXMuUk9VTkRfQlJBQ0tFVFMsXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdW53cmFwcGVkOiBjb250ZW50LFxuICAgIHdyYXBUeXBlOiBCcmFja2V0VHlwZXMuUk9VTkRfQlJBQ0tFVFMsXG4gIH07XG59O1xuIl19
@@ -1,438 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.fixMathElements = exports.fixMathElement = exports["default"] = void 0;
9
-
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
-
12
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
-
14
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
-
16
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
-
18
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
-
20
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
21
-
22
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
23
-
24
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
25
-
26
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
27
-
28
- var _mathjax = require("mathjax-full/js/mathjax");
29
-
30
- var _global = require("mathjax-full/js/components/global");
31
-
32
- var _assistiveMml = require("mathjax-full/js/a11y/assistive-mml");
33
-
34
- var _semanticEnrich = require("mathjax-full/js/a11y/semantic-enrich");
35
-
36
- var _MenuHandler = require("mathjax-full/js/ui/menu/MenuHandler");
37
-
38
- var _FindMathML2 = require("mathjax-full/js/input/mathml/FindMathML");
39
-
40
- var _mathml = require("mathjax-full/js/input/mathml");
41
-
42
- var _tex = require("mathjax-full/js/input/tex");
43
-
44
- var _chtml = require("mathjax-full/js/output/chtml");
45
-
46
- var _html = require("mathjax-full/js/handlers/html");
47
-
48
- var _browserAdaptor = require("mathjax-full/js/adaptors/browserAdaptor");
49
-
50
- var _AllPackages = require("mathjax-full/js/input/tex/AllPackages");
51
-
52
- var _system = require("speech-rule-engine/js/common/system");
53
-
54
- var _mstack = require("./mstack");
55
-
56
- var _debug = _interopRequireDefault(require("debug"));
57
-
58
- var _normalization = require("./normalization");
59
-
60
- var _MmlFactory = require("mathjax-full/js/core/MmlTree/MmlFactory");
61
-
62
- var _SerializedMmlVisitor = require("mathjax-full/js/core/MmlTree/SerializedMmlVisitor");
63
-
64
- var _WrapperFactory = require("mathjax-full/js/output/chtml/WrapperFactory");
65
-
66
- var _mspace = require("mathjax-full/js/output/chtml/Wrappers/mspace");
67
-
68
- var _HTMLDomStrings = require("mathjax-full/js/handlers/html/HTMLDomStrings");
69
-
70
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
71
-
72
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
73
-
74
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
75
-
76
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
77
-
78
- if (typeof window !== 'undefined') {
79
- (0, _html.RegisterHTMLHandler)((0, _browserAdaptor.browserAdaptor)());
80
- }
81
-
82
- var sreReady = false;
83
- (0, _system.engineReady)().then(function () {
84
- sreReady = true;
85
- }); // import pkg from '../../package.json';
86
-
87
- var visitor = new _SerializedMmlVisitor.SerializedMmlVisitor();
88
-
89
- var toMMl = function toMMl(node) {
90
- return visitor.visitTree(node);
91
- };
92
-
93
- var log = (0, _debug["default"])('pie-lib:math-rendering');
94
- var NEWLINE_BLOCK_REGEX = /\\embed\{newLine\}\[\]/g;
95
- var NEWLINE_LATEX = '\\newline ';
96
-
97
- var getGlobal = function getGlobal() {
98
- // TODO does it make sense to use version?
99
- // const key = `${pkg.name}@${pkg.version.split('.')[0]}`;
100
- // It looks like Ed made this change when he switched from mathjax3 to mathjax-full
101
- // I think it was supposed to make sure version 1 (using mathjax3) is not used
102
- // in combination with version 2 (using mathjax-full)
103
- // TODO higher level wrappers use this instance of math-rendering, and if 2 different instances are used, math rendering is not working
104
- // so I will hardcode this for now until a better solution is found
105
- var key = '@pie-lib/math-rendering@2';
106
-
107
- if (typeof window !== 'undefined') {
108
- if (!window[key]) {
109
- window[key] = {};
110
- }
111
-
112
- return window[key];
113
- } else {
114
- return {};
115
- }
116
- };
117
- /** Add temporary support for a global singleDollar override
118
- * <code>
119
- * // This will enable single dollar rendering
120
- * window.pie = window.pie || {};
121
- * window.pie.mathRendering = {useSingleDollar: true };
122
- * </code>
123
- */
124
-
125
-
126
- var defaultOpts = function defaultOpts() {
127
- return getGlobal().opts || {};
128
- };
129
-
130
- var fixMathElement = function fixMathElement(element) {
131
- if (element.dataset.mathHandled) {
132
- return;
133
- }
134
-
135
- var property = 'innerText';
136
-
137
- if (element.textContent) {
138
- property = 'textContent';
139
- }
140
-
141
- if (element[property]) {
142
- element[property] = (0, _normalization.wrapMath)((0, _normalization.unWrapMath)(element[property]).unwrapped); // because mathquill doesn't understand line breaks, sometimes we end up with custom elements on prompts/rationale/etc.
143
- // we need to replace the custom embedded elements with valid latex that Mathjax can understand
144
-
145
- element[property] = element[property].replace(NEWLINE_BLOCK_REGEX, NEWLINE_LATEX);
146
- element.dataset.mathHandled = true;
147
- }
148
- };
149
-
150
- exports.fixMathElement = fixMathElement;
151
-
152
- var fixMathElements = function fixMathElements() {
153
- var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
154
- var mathElements = el.querySelectorAll('[data-latex]');
155
- mathElements.forEach(function (item) {
156
- return fixMathElement(item);
157
- });
158
- };
159
-
160
- exports.fixMathElements = fixMathElements;
161
-
162
- var adjustMathMLStyle = function adjustMathMLStyle() {
163
- var el = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document;
164
- var nodes = el.querySelectorAll('math');
165
- nodes.forEach(function (node) {
166
- return node.setAttribute('displaystyle', 'true');
167
- });
168
- };
169
-
170
- var myFindMathML = /*#__PURE__*/function (_FindMathML) {
171
- (0, _inherits2["default"])(myFindMathML, _FindMathML);
172
-
173
- var _super = _createSuper(myFindMathML);
174
-
175
- function myFindMathML() {
176
- (0, _classCallCheck2["default"])(this, myFindMathML);
177
- return _super.apply(this, arguments);
178
- }
179
-
180
- (0, _createClass2["default"])(myFindMathML, [{
181
- key: "processMath",
182
- value: function processMath(set) {
183
- var adaptor = this.adaptor;
184
-
185
- for (var _i = 0, _Array$from = Array.from(set); _i < _Array$from.length; _i++) {
186
- var mml = _Array$from[_i];
187
-
188
- if (adaptor.kind(adaptor.parent(mml)) === 'mjx-assistive-mml') {
189
- set["delete"](mml);
190
- }
191
- }
192
-
193
- return (0, _get2["default"])((0, _getPrototypeOf2["default"])(myFindMathML.prototype), "processMath", this).call(this, set);
194
- }
195
- }]);
196
- return myFindMathML;
197
- }(_FindMathML2.FindMathML);
198
-
199
- var createMathMLInstance = function createMathMLInstance(opts) {
200
- var docProvided = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document;
201
- opts = opts || defaultOpts();
202
-
203
- if (opts.useSingleDollar) {
204
- // eslint-disable-next-line
205
- console.warn('[math-rendering] using $ is not advisable, please use $$..$$ or \\(...\\)');
206
- }
207
-
208
- var packages = _AllPackages.AllPackages.filter(function (name) {
209
- return name !== 'bussproofs';
210
- }); // Bussproofs needs an output jax
211
- // The autoload extension predefines all the macros from the extensions that haven't been loaded already
212
- // so that they automatically load the needed extension when they are first used
213
-
214
-
215
- packages.push('autoload');
216
- var macros = {
217
- parallelogram: "\\lower.2em{\\Huge\\unicode{x25B1}}",
218
- overarc: '\\overparen',
219
- napprox: '\\not\\approx',
220
- longdiv: '\\enclose{longdiv}'
221
- };
222
- var texConfig = opts.useSingleDollar ? {
223
- packages: packages,
224
- macros: macros,
225
- inlineMath: [['$', '$'], ['\\(', '\\)']],
226
- processEscapes: true
227
- } : {
228
- packages: packages,
229
- macros: macros
230
- };
231
- var mmlConfig = {
232
- parseError: function parseError(node) {
233
- // function to process parsing errors
234
- // eslint-disable-next-line no-console
235
- console.log('error:', node);
236
- this.error(this.adaptor.textContent(node).replace(/\n.*/g, ''));
237
- },
238
- FindMathML: new myFindMathML()
239
- };
240
- var cachedMathjax;
241
-
242
- if (_global.MathJax && _global.MathJax.version !== _mathjax.mathjax.version) {
243
- // handling other MathJax version on the page
244
- // replacing it temporarily with the version we have
245
- window.MathJax._ = window.MathJax._ || {};
246
- window.MathJax.config = window.MathJax.config || {};
247
- cachedMathjax = window.MathJax;
248
- Object.assign(_global.MathJax, _mathjax.mathjax);
249
- }
250
-
251
- var fontURL = "https://unpkg.com/mathjax-full@".concat(_mathjax.mathjax.version, "/ts/output/chtml/fonts/tex-woff-v2");
252
- var htmlConfig = {
253
- fontURL: fontURL,
254
- wrapperFactory: new _WrapperFactory.CHTMLWrapperFactory(_objectSpread(_objectSpread({}, _WrapperFactory.CHTMLWrapperFactory.defaultNodes), _mstack.chtmlNodes))
255
- };
256
- var mml = new _mathml.MathML(mmlConfig);
257
- var customMmlFactory = new _MmlFactory.MmlFactory(_objectSpread(_objectSpread({}, _MmlFactory.MmlFactory.defaultNodes), _mstack.mmlNodes));
258
- var classFactory = (0, _semanticEnrich.EnrichHandler)((0, _MenuHandler.MenuHandler)((0, _assistiveMml.AssistiveMmlHandler)(_mathjax.mathjax.handlers.handlesDocument(docProvided))), mml);
259
- var html = classFactory.create(docProvided, {
260
- compileError: function compileError(mj, math, err) {
261
- // eslint-disable-next-line no-console
262
- console.log('bad math?:', math); // eslint-disable-next-line no-console
263
-
264
- console.error(err);
265
- },
266
- typesetError: function typesetError(doc, math, err) {
267
- // eslint-disable-next-line no-console
268
- console.log('typeset error'); // eslint-disable-next-line no-console
269
-
270
- console.error(err);
271
- doc.typesetError(math, err);
272
- },
273
- sre: {
274
- speech: 'deep'
275
- },
276
- enrichSpeech: 'deep',
277
- InputJax: [new _tex.TeX(texConfig), mml],
278
- OutputJax: new _chtml.CHTML(htmlConfig),
279
- DomStrings: new _HTMLDomStrings.HTMLDomStrings({
280
- skipHtmlTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code', 'annotation', 'annotation-xml', 'mjx-assistive-mml', 'mjx-container']
281
- })
282
- }); // Note: we must set this *after* mathjax.document (no idea why)
283
-
284
- mml.setMmlFactory(customMmlFactory);
285
-
286
- if (cachedMathjax) {
287
- // if we have a cached version, we replace it here
288
- window.MathJax = cachedMathjax;
289
- }
290
-
291
- return html;
292
- };
293
-
294
- var enrichSpeechInitialized = false;
295
-
296
- var bootstrap = function bootstrap(opts) {
297
- if (typeof window === 'undefined') {
298
- return {
299
- Typeset: function Typeset() {
300
- return {};
301
- }
302
- };
303
- }
304
-
305
- var html = createMathMLInstance(opts);
306
- return {
307
- version: _mathjax.mathjax.version,
308
- html: html,
309
- Typeset: function Typeset() {
310
- var _this = this;
311
-
312
- for (var _len = arguments.length, elements = new Array(_len), _key = 0; _key < _len; _key++) {
313
- elements[_key] = arguments[_key];
314
- }
315
-
316
- var attemptRender = function attemptRender() {
317
- var _updatedDocument$math, _updatedDocument$math2;
318
-
319
- var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
320
-
321
- var updatedDocument = _this.html.findMath(elements.length ? {
322
- elements: elements
323
- } : {}).compile();
324
-
325
- if (!temporary && sreReady) {
326
- updatedDocument = updatedDocument.enrich();
327
- }
328
-
329
- updatedDocument = updatedDocument.getMetrics().typeset().assistiveMml().attachSpeech().addMenu().updateDocument();
330
-
331
- if (!enrichSpeechInitialized && (0, _typeof2["default"])((_updatedDocument$math = updatedDocument.math.list) === null || _updatedDocument$math === void 0 ? void 0 : (_updatedDocument$math2 = _updatedDocument$math.next) === null || _updatedDocument$math2 === void 0 ? void 0 : _updatedDocument$math2.data) === 'object') {
332
- enrichSpeechInitialized = true;
333
- }
334
-
335
- try {
336
- var list = updatedDocument.math.list;
337
-
338
- if (list) {
339
- for (var item = list.next; (0, _typeof2["default"])(item.data) !== 'symbol'; item = item.next) {
340
- var mathMl = toMMl(item.data.root);
341
- var parsedMathMl = mathMl.replaceAll('\n', '');
342
- item.data.typesetRoot.setAttribute('data-mathml', parsedMathMl);
343
- item.data.typesetRoot.setAttribute('tabindex', '-1');
344
- }
345
- }
346
- } catch (e) {
347
- // eslint-disable-next-line no-console
348
- console.error(e.toString());
349
- }
350
-
351
- updatedDocument.clear();
352
- };
353
-
354
- if (!enrichSpeechInitialized) {
355
- attemptRender(true);
356
- }
357
-
358
- _mathjax.mathjax.handleRetriesFor(function () {
359
- attemptRender();
360
- });
361
- }
362
- };
363
- };
364
-
365
- var renderMath = function renderMath(el, renderOpts) {
366
- var _getGlobal$instance, _getGlobal$instance2;
367
-
368
- if (window && window.MathJax && window.MathJax.customKey && window.MathJax.customKey == '@pie-lib/math-rendering-accessible@1') {
369
- return;
370
- }
371
-
372
- var isString = typeof el === 'string';
373
- var executeOn = document.body;
374
-
375
- if (isString) {
376
- var div = document.createElement('div');
377
- div.innerHTML = el;
378
- executeOn = div;
379
- }
380
-
381
- fixMathElements(executeOn);
382
- adjustMathMLStyle(executeOn);
383
-
384
- if (isString) {
385
- var html = createMathMLInstance(undefined, executeOn);
386
- var updatedDocument = html.findMath().compile().getMetrics().typeset().updateDocument();
387
- var list = updatedDocument.math.list;
388
- var item = list.next;
389
-
390
- if (!item) {
391
- return '';
392
- }
393
-
394
- var mathMl = toMMl(item.data.root);
395
- var parsedMathMl = mathMl.replaceAll('\n', '');
396
- return parsedMathMl;
397
- }
398
-
399
- if (!getGlobal().instance) {
400
- getGlobal().instance = bootstrap(renderOpts);
401
- }
402
-
403
- if (!el) {
404
- log('el is undefined');
405
- return;
406
- }
407
-
408
- if (el instanceof Element && (_getGlobal$instance = getGlobal().instance) !== null && _getGlobal$instance !== void 0 && _getGlobal$instance.Typeset) {
409
- getGlobal().instance.Typeset(el);
410
- } else if (el.length && (_getGlobal$instance2 = getGlobal().instance) !== null && _getGlobal$instance2 !== void 0 && _getGlobal$instance2.Typeset) {
411
- var _getGlobal$instance3;
412
-
413
- var arr = Array.from(el);
414
-
415
- (_getGlobal$instance3 = getGlobal().instance).Typeset.apply(_getGlobal$instance3, (0, _toConsumableArray2["default"])(arr));
416
- }
417
- };
418
- /**
419
- * This style is added to overried default styling of mjx-mspace Mathjax tag
420
- * In mathjax src code \newline latex gets parsed to <mjx-mspace></mjx-mspace>,
421
- * but has the default style
422
- * 'mjx-mspace': {
423
- "display": 'in-line',
424
- "text-align": 'left'
425
- } which prevents it from showing as a newline value
426
- */
427
-
428
-
429
- _mspace.CHTMLmspace.styles = {
430
- 'mjx-mspace': {
431
- display: 'block',
432
- 'text-align': 'center',
433
- height: '5px'
434
- }
435
- };
436
- var _default = renderMath;
437
- exports["default"] = _default;
438
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yZW5kZXItbWF0aC5qcyJdLCJuYW1lcyI6WyJ3aW5kb3ciLCJzcmVSZWFkeSIsInRoZW4iLCJ2aXNpdG9yIiwiU2VyaWFsaXplZE1tbFZpc2l0b3IiLCJ0b01NbCIsIm5vZGUiLCJ2aXNpdFRyZWUiLCJsb2ciLCJORVdMSU5FX0JMT0NLX1JFR0VYIiwiTkVXTElORV9MQVRFWCIsImdldEdsb2JhbCIsImtleSIsImRlZmF1bHRPcHRzIiwib3B0cyIsImZpeE1hdGhFbGVtZW50IiwiZWxlbWVudCIsImRhdGFzZXQiLCJtYXRoSGFuZGxlZCIsInByb3BlcnR5IiwidGV4dENvbnRlbnQiLCJ1bndyYXBwZWQiLCJyZXBsYWNlIiwiZml4TWF0aEVsZW1lbnRzIiwiZWwiLCJkb2N1bWVudCIsIm1hdGhFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmb3JFYWNoIiwiaXRlbSIsImFkanVzdE1hdGhNTFN0eWxlIiwibm9kZXMiLCJzZXRBdHRyaWJ1dGUiLCJteUZpbmRNYXRoTUwiLCJzZXQiLCJhZGFwdG9yIiwiQXJyYXkiLCJmcm9tIiwibW1sIiwia2luZCIsInBhcmVudCIsIkZpbmRNYXRoTUwiLCJjcmVhdGVNYXRoTUxJbnN0YW5jZSIsImRvY1Byb3ZpZGVkIiwidXNlU2luZ2xlRG9sbGFyIiwiY29uc29sZSIsIndhcm4iLCJwYWNrYWdlcyIsIkFsbFBhY2thZ2VzIiwiZmlsdGVyIiwibmFtZSIsInB1c2giLCJtYWNyb3MiLCJwYXJhbGxlbG9ncmFtIiwib3ZlcmFyYyIsIm5hcHByb3giLCJsb25nZGl2IiwidGV4Q29uZmlnIiwiaW5saW5lTWF0aCIsInByb2Nlc3NFc2NhcGVzIiwibW1sQ29uZmlnIiwicGFyc2VFcnJvciIsImVycm9yIiwiY2FjaGVkTWF0aGpheCIsImdsb2JhbE1hdGhqYXgiLCJ2ZXJzaW9uIiwibWF0aGpheCIsIk1hdGhKYXgiLCJfIiwiY29uZmlnIiwiT2JqZWN0IiwiYXNzaWduIiwiZm9udFVSTCIsImh0bWxDb25maWciLCJ3cmFwcGVyRmFjdG9yeSIsIkNIVE1MV3JhcHBlckZhY3RvcnkiLCJkZWZhdWx0Tm9kZXMiLCJjaHRtbE5vZGVzIiwiTWF0aE1MIiwiY3VzdG9tTW1sRmFjdG9yeSIsIk1tbEZhY3RvcnkiLCJtbWxOb2RlcyIsImNsYXNzRmFjdG9yeSIsImhhbmRsZXJzIiwiaGFuZGxlc0RvY3VtZW50IiwiaHRtbCIsImNyZWF0ZSIsImNvbXBpbGVFcnJvciIsIm1qIiwibWF0aCIsImVyciIsInR5cGVzZXRFcnJvciIsImRvYyIsInNyZSIsInNwZWVjaCIsImVucmljaFNwZWVjaCIsIklucHV0SmF4IiwiVGVYIiwiT3V0cHV0SmF4IiwiQ0hUTUwiLCJEb21TdHJpbmdzIiwiSFRNTERvbVN0cmluZ3MiLCJza2lwSHRtbFRhZ3MiLCJzZXRNbWxGYWN0b3J5IiwiZW5yaWNoU3BlZWNoSW5pdGlhbGl6ZWQiLCJib290c3RyYXAiLCJUeXBlc2V0IiwiZWxlbWVudHMiLCJhdHRlbXB0UmVuZGVyIiwidGVtcG9yYXJ5IiwidXBkYXRlZERvY3VtZW50IiwiZmluZE1hdGgiLCJsZW5ndGgiLCJjb21waWxlIiwiZW5yaWNoIiwiZ2V0TWV0cmljcyIsInR5cGVzZXQiLCJhc3Npc3RpdmVNbWwiLCJhdHRhY2hTcGVlY2giLCJhZGRNZW51IiwidXBkYXRlRG9jdW1lbnQiLCJsaXN0IiwibmV4dCIsImRhdGEiLCJtYXRoTWwiLCJyb290IiwicGFyc2VkTWF0aE1sIiwicmVwbGFjZUFsbCIsInR5cGVzZXRSb290IiwiZSIsInRvU3RyaW5nIiwiY2xlYXIiLCJoYW5kbGVSZXRyaWVzRm9yIiwicmVuZGVyTWF0aCIsInJlbmRlck9wdHMiLCJjdXN0b21LZXkiLCJpc1N0cmluZyIsImV4ZWN1dGVPbiIsImJvZHkiLCJkaXYiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwidW5kZWZpbmVkIiwiaW5zdGFuY2UiLCJFbGVtZW50IiwiYXJyIiwiQ0hUTUxtc3BhY2UiLCJzdHlsZXMiLCJkaXNwbGF5IiwiaGVpZ2h0Il0sIm1hcHBpbmdz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LFNBQVMsR0FBR29JLFFBQWpCLEVBQTJCO0FBQ3pCcEksSUFBQUEsU0FBUyxHQUFHb0ksUUFBWixHQUF1QnRDLFNBQVMsQ0FBQzZCLFVBQUQsQ0FBaEM7QUFDRDs7QUFFRCxNQUFJLENBQUM5RyxFQUFMLEVBQVM7QUFDUGhCLElBQUFBLEdBQUcsQ0FBQyxpQkFBRCxDQUFIO0FBQ0E7QUFDRDs7QUFFRCxNQUFJZ0IsRUFBRSxZQUFZd0gsT0FBZCwyQkFBeUJySSxTQUFTLEdBQUdvSSxRQUFyQyxnREFBeUIsb0JBQXNCckMsT0FBbkQsRUFBNEQ7QUFDMUQvRixJQUFBQSxTQUFTLEdBQUdvSSxRQUFaLENBQXFCckMsT0FBckIsQ0FBNkJsRixFQUE3QjtBQUNELEdBRkQsTUFFTyxJQUFJQSxFQUFFLENBQUN3RixNQUFILDRCQUFhckcsU0FBUyxHQUFHb0ksUUFBekIsaURBQWEscUJBQXNCckMsT0FBdkMsRUFBZ0Q7QUFBQTs7QUFDckQsUUFBTXVDLEdBQUcsR0FBRzdHLEtBQUssQ0FBQ0MsSUFBTixDQUFXYixFQUFYLENBQVo7O0FBQ0EsNEJBQUFiLFNBQVMsR0FBR29JLFFBQVosRUFBcUJyQyxPQUFyQixpRUFBZ0N1QyxHQUFoQztBQUNEO0FBQ0YsQ0E3REQ7QUErREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQUMsb0JBQVlDLE1BQVosR0FBcUI7QUFDbkIsZ0JBQWM7QUFDWkMsSUFBQUEsT0FBTyxFQUFFLE9BREc7QUFFWixrQkFBYyxRQUZGO0FBR1pDLElBQUFBLE1BQU0sRUFBRTtBQUhJO0FBREssQ0FBckI7ZUFRZWhCLFUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXRoamF4IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL21hdGhqYXgnO1xuaW1wb3J0IHsgTWF0aEpheCBhcyBnbG9iYWxNYXRoamF4IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvbXBvbmVudHMvZ2xvYmFsJztcbmltcG9ydCB7IEFzc2lzdGl2ZU1tbEhhbmRsZXIgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvYTExeS9hc3Npc3RpdmUtbW1sJztcbmltcG9ydCB7IEVucmljaEhhbmRsZXIgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvYTExeS9zZW1hbnRpYy1lbnJpY2gnO1xuaW1wb3J0IHsgTWVudUhhbmRsZXIgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvdWkvbWVudS9NZW51SGFuZGxlcic7XG5pbXBvcnQgeyBGaW5kTWF0aE1MIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2lucHV0L21hdGhtbC9GaW5kTWF0aE1MJztcbmltcG9ydCB7IE1hdGhNTCB9IGZyb20gJ21hdGhqYXgtZnVsbC9qcy9pbnB1dC9tYXRobWwnO1xuaW1wb3J0IHsgVGVYIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2lucHV0L3RleCc7XG5cbmltcG9ydCB7IENIVE1MIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL291dHB1dC9jaHRtbCc7XG5pbXBvcnQgeyBSZWdpc3RlckhUTUxIYW5kbGVyIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2hhbmRsZXJzL2h0bWwnO1xuaW1wb3J0IHsgYnJvd3NlckFkYXB0b3IgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvYWRhcHRvcnMvYnJvd3NlckFkYXB0b3InO1xuaW1wb3J0IHsgQWxsUGFja2FnZXMgfSBmcm9tICdtYXRoamF4LWZ1bGwvanMvaW5wdXQvdGV4L0FsbFBhY2thZ2VzJztcbmltcG9ydCB7IGVuZ2luZVJlYWR5IH0gZnJvbSAnc3BlZWNoLXJ1bGUtZW5naW5lL2pzL2NvbW1vbi9zeXN0ZW0nO1xuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgUmVnaXN0ZXJIVE1MSGFuZGxlcihicm93c2VyQWRhcHRvcigpKTtcbn1cblxubGV0IHNyZVJlYWR5ID0gZmFsc2U7XG5cbmVuZ2luZVJlYWR5KCkudGhlbigoKSA9PiB7XG4gIHNyZVJlYWR5ID0gdHJ1ZTtcbn0pO1xuXG4vLyBpbXBvcnQgcGtnIGZyb20gJy4uLy4uL3BhY2thZ2UuanNvbic7XG5pbXBvcnQgeyBtbWxOb2RlcywgY2h0bWxOb2RlcyB9IGZyb20gJy4vbXN0YWNrJztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyB3cmFwTWF0aCwgdW5XcmFwTWF0aCB9IGZyb20gJy4vbm9ybWFsaXphdGlvbic7XG5pbXBvcnQgeyBNbWxGYWN0b3J5IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvcmUvTW1sVHJlZS9NbWxGYWN0b3J5JztcbmltcG9ydCB7IFNlcmlhbGl6ZWRNbWxWaXNpdG9yIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2NvcmUvTW1sVHJlZS9TZXJpYWxpemVkTW1sVmlzaXRvcic7XG5pbXBvcnQgeyBDSFRNTFdyYXBwZXJGYWN0b3J5IH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL291dHB1dC9jaHRtbC9XcmFwcGVyRmFjdG9yeSc7XG5pbXBvcnQgeyBDSFRNTG1zcGFjZSB9IGZyb20gJ21hdGhqYXgtZnVsbC9qcy9vdXRwdXQvY2h0bWwvV3JhcHBlcnMvbXNwYWNlJztcbmltcG9ydCB7IEhUTUxEb21TdHJpbmdzIH0gZnJvbSAnbWF0aGpheC1mdWxsL2pzL2hhbmRsZXJzL2h0bWwvSFRNTERvbVN0cmluZ3MnO1xuXG5jb25zdCB2aXNpdG9yID0gbmV3IFNlcmlhbGl6ZWRNbWxWaXNpdG9yKCk7XG5jb25zdCB0b01NbCA9IChub2RlKSA9PiB2aXNpdG9yLnZpc2l0VHJlZShub2RlKTtcblxuY29uc3QgbG9nID0gZGVidWcoJ3BpZS1saWI6bWF0aC1yZW5kZXJpbmcnKTtcblxuY29uc3QgTkVXTElORV9CTE9DS19SRUdFWCA9IC9cXFxcZW1iZWRcXHtuZXdMaW5lXFx9XFxbXFxdL2c7XG5jb25zdCBORVdMSU5FX0xBVEVYID0gJ1xcXFxuZXdsaW5lICc7XG5cbmNvbnN0IGdldEdsb2JhbCA9ICgpID0+IHtcbiAgLy8gVE9ETyBkb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gdXNlIHZlcnNpb24/XG4gIC8vIGNvbnN0IGtleSA9IGAke3BrZy5uYW1lfUAke3BrZy52ZXJzaW9uLnNwbGl0KCcuJylbMF19YDtcbiAgLy8gSXQgbG9va3MgbGlrZSBFZCBtYWRlIHRoaXMgY2hhbmdlIHdoZW4gaGUgc3dpdGNoZWQgZnJvbSBtYXRoamF4MyB0byBtYXRoamF4LWZ1bGxcbiAgLy8gSSB0aGluayBpdCB3YXMgc3VwcG9zZWQgdG8gbWFrZSBzdXJlIHZlcnNpb24gMSAodXNpbmcgbWF0aGpheDMpIGlzIG5vdCB1c2VkXG4gIC8vIGluIGNvbWJpbmF0aW9uIHdpdGggdmVyc2lvbiAyICh1c2luZyBtYXRoamF4LWZ1bGwpXG5cbiAgLy8gVE9ETyBoaWdoZXIgbGV2ZWwgd3JhcHBlcnMgdXNlIHRoaXMgaW5zdGFuY2Ugb2YgbWF0aC1yZW5kZXJpbmcsIGFuZCBpZiAyIGRpZmZlcmVudCBpbnN0YW5jZXMgYXJlIHVzZWQsIG1hdGggcmVuZGVyaW5nIGlzIG5vdCB3b3JraW5nXG4gIC8vICBzbyBJIHdpbGwgaGFyZGNvZGUgdGhpcyBmb3Igbm93IHVudGlsIGEgYmV0dGVyIHNvbHV0aW9uIGlzIGZvdW5kXG4gIGNvbnN0IGtleSA9ICdAcGllLWxpYi9tYXRoLXJlbmRlcmluZ0AyJztcblxuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBpZiAoIXdpbmRvd1trZXldKSB7XG4gICAgICB3aW5kb3dba2V5XSA9IHt9O1xuICAgIH1cbiAgICByZXR1cm4gd2luZG93W2tleV07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG4vKiogQWRkIHRlbXBvcmFyeSBzdXBwb3J0IGZvciBhIGdsb2JhbCBzaW5nbGVEb2xsYXIgb3ZlcnJpZGVcbiAqICA8Y29kZT5cbiAqICAgLy8gVGhpcyB3aWxsIGVuYWJsZSBzaW5nbGUgZG9sbGFyIHJlbmRlcmluZ1xuICogICB3aW5kb3cucGllID0gd2luZG93LnBpZSB8fCB7fTtcbiAqICAgd2luZG93LnBpZS5tYXRoUmVuZGVyaW5nID0gIHt1c2VTaW5nbGVEb2xsYXI6IHRydWUgfTtcbiAqICA8L2NvZGU+XG4gKi9cbmNvbnN0IGRlZmF1bHRPcHRzID0gKCkgPT4gZ2V0R2xvYmFsKCkub3B0cyB8fCB7fTtcblxuZXhwb3J0IGNvbnN0IGZpeE1hdGhFbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgaWYgKGVsZW1lbnQuZGF0YXNldC5tYXRoSGFuZGxlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwcm9wZXJ0eSA9ICdpbm5lclRleHQnO1xuXG4gIGlmIChlbGVtZW50LnRleHRDb250ZW50KSB7XG4gICAgcHJvcGVydHkgPSAndGV4dENvbnRlbnQnO1xuICB9XG5cbiAgaWYgKGVsZW1lbnRbcHJvcGVydHldKSB7XG4gICAgZWxlbWVudFtwcm9wZXJ0eV0gPSB3cmFwTWF0aCh1bldyYXBNYXRoKGVsZW1lbnRbcHJvcGVydHldKS51bndyYXBwZWQpO1xuICAgIC8vIGJlY2F1c2UgbWF0aHF1aWxsIGRvZXNuJ3QgdW5kZXJzdGFuZCBsaW5lIGJyZWFrcywgc29tZXRpbWVzIHdlIGVuZCB1cCB3aXRoIGN1c3RvbSBlbGVtZW50cyBvbiBwcm9tcHRzL3JhdGlvbmFsZS9ldGMuXG4gICAgLy8gd2UgbmVlZCB0byByZXBsYWNlIHRoZSBjdXN0b20gZW1iZWRkZWQgZWxlbWVudHMgd2l0aCB2YWxpZCBsYXRleCB0aGF0IE1hdGhqYXggY2FuIHVuZGVyc3RhbmRcbiAgICBlbGVtZW50W3Byb3BlcnR5XSA9IGVsZW1lbnRbcHJvcGVydHldLnJlcGxhY2UoTkVXTElORV9CTE9DS19SRUdFWCwgTkVXTElORV9MQVRFWCk7XG4gICAgZWxlbWVudC5kYXRhc2V0Lm1hdGhIYW5kbGVkID0gdHJ1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZpeE1hdGhFbGVtZW50cyA9IChlbCA9IGRvY3VtZW50KSA9PiB7XG4gIGNvbnN0IG1hdGhFbGVtZW50cyA9IGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLWxhdGV4XScpO1xuXG4gIG1hdGhFbGVtZW50cy5mb3JFYWNoKChpdGVtKSA9PiBmaXhNYXRoRWxlbWVudChpdGVtKSk7XG59O1xuXG5jb25zdCBhZGp1c3RNYXRoTUxTdHlsZSA9IChlbCA9IGRvY3VtZW50KSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gZWwucXVlcnlTZWxlY3RvckFsbCgnbWF0aCcpO1xuICBub2Rlcy5mb3JFYWNoKChub2RlKSA9PiBub2RlLnNldEF0dHJpYnV0ZSgnZGlzcGxheXN0eWxlJywgJ3RydWUnKSk7XG59O1xuXG5jbGFzcyBteUZpbmRNYXRoTUwgZXh0ZW5kcyBGaW5kTWF0aE1MIHtcbiAgcHJvY2Vzc01hdGgoc2V0KSB7XG4gICAgY29uc3QgYWRhcHRvciA9IHRoaXMuYWRhcHRvcjtcbiAgICBmb3IgKGNvbnN0IG1tbCBvZiBBcnJheS5mcm9tKHNldCkpIHtcbiAgICAgIGlmIChhZGFwdG9yLmtpbmQoYWRhcHRvci5wYXJlbnQobW1sKSkgPT09ICdtangtYXNzaXN0aXZlLW1tbCcpIHtcbiAgICAgICAgc2V0LmRlbGV0ZShtbWwpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHJvY2Vzc01hdGgoc2V0KTtcbiAgfVxufVxuXG5jb25zdCBjcmVhdGVNYXRoTUxJbnN0YW5jZSA9IChvcHRzLCBkb2NQcm92aWRlZCA9IGRvY3VtZW50KSA9PiB7XG4gIG9wdHMgPSBvcHRzIHx8IGRlZmF1bHRPcHRzKCk7XG5cbiAgaWYgKG9wdHMudXNlU2luZ2xlRG9sbGFyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgY29uc29sZS53YXJuKCdbbWF0aC1yZW5kZXJpbmddIHVzaW5nICQgaXMgbm90IGFkdmlzYWJsZSwgcGxlYXNlIHVzZSAkJC4uJCQgb3IgXFxcXCguLi5cXFxcKScpO1xuICB9XG5cbiAgY29uc3QgcGFja2FnZXMgPSBBbGxQYWNrYWdlcy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgIT09ICdidXNzcHJvb2ZzJyk7IC8vIEJ1c3Nwcm9vZnMgbmVlZHMgYW4gb3V0cHV0IGpheFxuXG4gIC8vIFRoZSBhdXRvbG9hZCBleHRlbnNpb24gcHJlZGVmaW5lcyBhbGwgdGhlIG1hY3JvcyBmcm9tIHRoZSBleHRlbnNpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIGxvYWRlZCBhbHJlYWR5XG4gIC8vIHNvIHRoYXQgdGhleSBhdXRvbWF0aWNhbGx5IGxvYWQgdGhlIG5lZWRlZCBleHRlbnNpb24gd2hlbiB0aGV5IGFyZSBmaXJzdCB1c2VkXG4gIHBhY2thZ2VzLnB1c2goJ2F1dG9sb2FkJyk7XG5cbiAgY29uc3QgbWFjcm9zID0ge1xuICAgIHBhcmFsbGVsb2dyYW06ICdcXFxcbG93ZXIuMmVte1xcXFxIdWdlXFxcXHVuaWNvZGV7eDI1QjF9fScsXG4gICAgb3ZlcmFyYzogJ1xcXFxvdmVycGFyZW4nLFxuICAgIG5hcHByb3g6ICdcXFxcbm90XFxcXGFwcHJveCcsXG4gICAgbG9uZ2RpdjogJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9JyxcbiAgfTtcblxuICBjb25zdCB0ZXhDb25maWcgPSBvcHRzLnVzZVNpbmdsZURvbGxhclxuICAgID8ge1xuICAgICAgICBwYWNrYWdlcyxcbiAgICAgICAgbWFjcm9zLFxuICAgICAgICBpbmxpbmVNYXRoOiBbXG4gICAgICAgICAgWyckJywgJyQnXSxcbiAgICAgICAgICBbJ1xcXFwoJywgJ1xcXFwpJ10sXG4gICAgICAgIF0sXG4gICAgICAgIHByb2Nlc3NFc2NhcGVzOiB0cnVlLFxuICAgICAgfVxuICAgIDoge1xuICAgICAgICBwYWNrYWdlcyxcbiAgICAgICAgbWFjcm9zLFxuICAgICAgfTtcblxuICBjb25zdCBtbWxDb25maWcgPSB7XG4gICAgcGFyc2VFcnJvcjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgLy8gZnVuY3Rpb24gdG8gcHJvY2VzcyBwYXJzaW5nIGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdlcnJvcjonLCBub2RlKTtcbiAgICAgIHRoaXMuZXJyb3IodGhpcy5hZGFwdG9yLnRleHRDb250ZW50KG5vZGUpLnJlcGxhY2UoL1xcbi4qL2csICcnKSk7XG4gICAgfSxcbiAgICBGaW5kTWF0aE1MOiBuZXcgbXlGaW5kTWF0aE1MKCksXG4gIH07XG5cbiAgbGV0IGNhY2hlZE1hdGhqYXg7XG5cbiAgaWYgKGdsb2JhbE1hdGhqYXggJiYgZ2xvYmFsTWF0aGpheC52ZXJzaW9uICE9PSBtYXRoamF4LnZlcnNpb24pIHtcbiAgICAvLyBoYW5kbGluZyBvdGhlciBNYXRoSmF4IHZlcnNpb24gb24gdGhlIHBhZ2VcbiAgICAvLyByZXBsYWNpbmcgaXQgdGVtcG9yYXJpbHkgd2l0aCB0aGUgdmVyc2lvbiB3ZSBoYXZlXG4gICAgd2luZG93Lk1hdGhKYXguXyA9IHdpbmRvdy5NYXRoSmF4Ll8gfHwge307XG4gICAgd2luZG93Lk1hdGhKYXguY29uZmlnID0gd2luZG93Lk1hdGhKYXguY29uZmlnIHx8IHt9O1xuICAgIGNhY2hlZE1hdGhqYXggPSB3aW5kb3cuTWF0aEpheDtcbiAgICBPYmplY3QuYXNzaWduKGdsb2JhbE1hdGhqYXgsIG1hdGhqYXgpO1xuICB9XG5cbiAgY29uc3QgZm9udFVSTCA9IGBodHRwczovL3VucGtnLmNvbS9tYXRoamF4LWZ1bGxAJHttYXRoamF4LnZlcnNpb259L3RzL291dHB1dC9jaHRtbC9mb250cy90ZXgtd29mZi12MmA7XG4gIGNvbnN0IGh0bWxDb25maWcgPSB7XG4gICAgZm9udFVSTCxcblxuICAgIHdyYXBwZXJGYWN0b3J5OiBuZXcgQ0hUTUxXcmFwcGVyRmFjdG9yeSh7XG4gICAgICAuLi5DSFRNTFdyYXBwZXJGYWN0b3J5LmRlZmF1bHROb2RlcyxcbiAgICAgIC4uLmNodG1sTm9kZXMsXG4gICAgfSksXG4gIH07XG5cbiAgY29uc3QgbW1sID0gbmV3IE1hdGhNTChtbWxDb25maWcpO1xuXG4gIGNvbnN0IGN1c3RvbU1tbEZhY3RvcnkgPSBuZXcgTW1sRmFjdG9yeSh7XG4gICAgLi4uTW1sRmFjdG9yeS5kZWZhdWx0Tm9kZXMsXG4gICAgLi4ubW1sTm9kZXMsXG4gIH0pO1xuICBjb25zdCBjbGFzc0ZhY3RvcnkgPSBFbnJpY2hIYW5kbGVyKFxuICAgIE1lbnVIYW5kbGVyKEFzc2lzdGl2ZU1tbEhhbmRsZXIobWF0aGpheC5oYW5kbGVycy5oYW5kbGVzRG9jdW1lbnQoZG9jUHJvdmlkZWQpKSksXG4gICAgbW1sLFxuICApO1xuXG4gIGNvbnN0IGh0bWwgPSBjbGFzc0ZhY3RvcnkuY3JlYXRlKGRvY1Byb3ZpZGVkLCB7XG4gICAgY29tcGlsZUVycm9yOiAobWosIG1hdGgsIGVycikgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdiYWQgbWF0aD86JywgbWF0aCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH0sXG4gICAgdHlwZXNldEVycm9yOiBmdW5jdGlvbihkb2MsIG1hdGgsIGVycikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCd0eXBlc2V0IGVycm9yJyk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgZG9jLnR5cGVzZXRFcnJvcihtYXRoLCBlcnIpO1xuICAgIH0sXG5cbiAgICBzcmU6IHtcbiAgICAgIHNwZWVjaDogJ2RlZXAnLFxuICAgIH0sXG4gICAgZW5yaWNoU3BlZWNoOiAnZGVlcCcsXG5cbiAgICBJbnB1dEpheDogW25ldyBUZVgodGV4Q29uZmlnKSwgbW1sXSxcbiAgICBPdXRwdXRKYXg6IG5ldyBDSFRNTChodG1sQ29uZmlnKSxcbiAgICBEb21TdHJpbmdzOiBuZXcgSFRNTERvbVN0cmluZ3Moe1xuICAgICAgc2tpcEh0bWxUYWdzOiBbXG4gICAgICAgICdzY3JpcHQnLFxuICAgICAgICAnbm9zY3JpcHQnLFxuICAgICAgICAnc3R5bGUnLFxuICAgICAgICAndGV4dGFyZWEnLFxuICAgICAgICAncHJlJyxcbiAgICAgICAgJ2NvZGUnLFxuICAgICAgICAnYW5ub3RhdGlvbicsXG4gICAgICAgICdhbm5vdGF0aW9uLXhtbCcsXG4gICAgICAgICdtangtYXNzaXN0aXZlLW1tbCcsXG4gICAgICAgICdtangtY29udGFpbmVyJyxcbiAgICAgIF0sXG4gICAgfSksXG4gIH0pO1xuXG4gIC8vIE5vdGU6IHdlIG11c3Qgc2V0IHRoaXMgKmFmdGVyKiBtYXRoamF4LmRvY3VtZW50IChubyBpZGVhIHdoeSlcbiAgbW1sLnNldE1tbEZhY3RvcnkoY3VzdG9tTW1sRmFjdG9yeSk7XG5cbiAgaWYgKGNhY2hlZE1hdGhqYXgpIHtcbiAgICAvLyBpZiB3ZSBoYXZlIGEgY2FjaGVkIHZlcnNpb24sIHdlIHJlcGxhY2UgaXQgaGVyZVxuICAgIHdpbmRvdy5NYXRoSmF4ID0gY2FjaGVkTWF0aGpheDtcbiAgfVxuXG4gIHJldHVybiBodG1sO1xufTtcblxubGV0IGVucmljaFNwZWVjaEluaXRpYWxpemVkID0gZmFsc2U7XG5cbmNvbnN0IGJvb3RzdHJhcCA9IChvcHRzKSA9PiB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB7IFR5cGVzZXQ6ICgpID0+ICh7fSkgfTtcbiAgfVxuXG4gIGNvbnN0IGh0bWwgPSBjcmVhdGVNYXRoTUxJbnN0YW5jZShvcHRzKTtcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246IG1hdGhqYXgudmVyc2lvbixcbiAgICBodG1sOiBodG1sLFxuICAgIFR5cGVzZXQ6IGZ1bmN0aW9uKC4uLmVsZW1lbnRzKSB7XG4gICAgICBjb25zdCBhdHRlbXB0UmVuZGVyID0gKHRlbXBvcmFyeSA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGxldCB1cGRhdGVkRG9jdW1lbnQgPSB0aGlzLmh0bWwuZmluZE1hdGgoZWxlbWVudHMubGVuZ3RoID8geyBlbGVtZW50cyB9IDoge30pLmNvbXBpbGUoKTtcblxuICAgICAgICBpZiAoIXRlbXBvcmFyeSAmJiBzcmVSZWFkeSkge1xuICAgICAgICAgIHVwZGF0ZWREb2N1bWVudCA9IHVwZGF0ZWREb2N1bWVudC5lbnJpY2goKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZWREb2N1bWVudCA9IHVwZGF0ZWREb2N1bWVudFxuICAgICAgICAgIC5nZXRNZXRyaWNzKClcbiAgICAgICAgICAudHlwZXNldCgpXG4gICAgICAgICAgLmFzc2lzdGl2ZU1tbCgpXG4gICAgICAgICAgLmF0dGFjaFNwZWVjaCgpXG4gICAgICAgICAgLmFkZE1lbnUoKVxuICAgICAgICAgIC51cGRhdGVEb2N1bWVudCgpO1xuXG4gICAgICAgIGlmICghZW5yaWNoU3BlZWNoSW5pdGlhbGl6ZWQgJiYgdHlwZW9mIHVwZGF0ZWREb2N1bWVudC5tYXRoLmxpc3Q/Lm5leHQ/LmRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZW5yaWNoU3BlZWNoSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gdXBkYXRlZERvY3VtZW50Lm1hdGgubGlzdDtcblxuICAgICAgICAgIGlmIChsaXN0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtID0gbGlzdC5uZXh0OyB0eXBlb2YgaXRlbS5kYXRhICE9PSAnc3ltYm9sJzsgaXRlbSA9IGl0ZW0ubmV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRoTWwgPSB0b01NbChpdGVtLmRhdGEucm9vdCk7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZE1hdGhNbCA9IG1hdGhNbC5yZXBsYWNlQWxsKCdcXG4nLCAnJyk7XG5cbiAgICAgICAgICAgICAgaXRlbS5kYXRhLnR5cGVzZXRSb290LnNldEF0dHJpYnV0ZSgnZGF0YS1tYXRobWwnLCBwYXJzZWRNYXRoTWwpO1xuICAgICAgICAgICAgICBpdGVtLmRhdGEudHlwZXNldFJvb3Quc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlZERvY3VtZW50LmNsZWFyKCk7XG4gICAgICB9O1xuXG4gICAgICBpZiAoIWVucmljaFNwZWVjaEluaXRpYWxpemVkKSB7XG4gICAgICAgIGF0dGVtcHRSZW5kZXIodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIG1hdGhqYXguaGFuZGxlUmV0cmllc0ZvcigoKSA9PiB7XG4gICAgICAgIGF0dGVtcHRSZW5kZXIoKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gIH07XG59O1xuXG5jb25zdCByZW5kZXJNYXRoID0gKGVsLCByZW5kZXJPcHRzKSA9PiB7XG4gIGlmIChcbiAgICB3aW5kb3cgJiZcbiAgICB3aW5kb3cuTWF0aEpheCAmJlxuICAgIHdpbmRvdy5NYXRoSmF4LmN1c3RvbUtleSAmJlxuICAgIHdpbmRvdy5NYXRoSmF4LmN1c3RvbUtleSA9PSAnQHBpZS1saWIvbWF0aC1yZW5kZXJpbmctYWNjZXNzaWJsZUAxJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBlbCA9PT0gJ3N0cmluZyc7XG4gIGxldCBleGVjdXRlT24gPSBkb2N1bWVudC5ib2R5O1xuXG4gIGlmIChpc1N0cmluZykge1xuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgZGl2LmlubmVySFRNTCA9IGVsO1xuICAgIGV4ZWN1dGVPbiA9IGRpdjtcbiAgfVxuXG4gIGZpeE1hdGhFbGVtZW50cyhleGVjdXRlT24pO1xuICBhZGp1c3RNYXRoTUxTdHlsZShleGVjdXRlT24pO1xuXG4gIGlmIChpc1N0cmluZykge1xuICAgIGNvbnN0IGh0bWwgPSBjcmVhdGVNYXRoTUxJbnN0YW5jZSh1bmRlZmluZWQsIGV4ZWN1dGVPbik7XG5cbiAgICBjb25zdCB1cGRhdGVkRG9jdW1lbnQgPSBodG1sXG4gICAgICAuZmluZE1hdGgoKVxuICAgICAgLmNvbXBpbGUoKVxuICAgICAgLmdldE1ldHJpY3MoKVxuICAgICAgLnR5cGVzZXQoKVxuICAgICAgLnVwZGF0ZURvY3VtZW50KCk7XG5cbiAgICBjb25zdCBsaXN0ID0gdXBkYXRlZERvY3VtZW50Lm1hdGgubGlzdDtcbiAgICBjb25zdCBpdGVtID0gbGlzdC5uZXh0O1xuXG4gICAgaWYgKCFpdGVtKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0aE1sID0gdG9NTWwoaXRlbS5kYXRhLnJvb3QpO1xuICAgIGNvbnN0IHBhcnNlZE1hdGhNbCA9IG1hdGhNbC5yZXBsYWNlQWxsKCdcXG4nLCAnJyk7XG5cbiAgICByZXR1cm4gcGFyc2VkTWF0aE1sO1xuICB9XG5cbiAgaWYgKCFnZXRHbG9iYWwoKS5pbnN0YW5jZSkge1xuICAgIGdldEdsb2JhbCgpLmluc3RhbmNlID0gYm9vdHN0cmFwKHJlbmRlck9wdHMpO1xuICB9XG5cbiAgaWYgKCFlbCkge1xuICAgIGxvZygnZWwgaXMgdW5kZWZpbmVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGVsIGluc3RhbmNlb2YgRWxlbWVudCAmJiBnZXRHbG9iYWwoKS5pbnN0YW5jZT8uVHlwZXNldCkge1xuICAgIGdldEdsb2JhbCgpLmluc3RhbmNlLlR5cGVzZXQoZWwpO1xuICB9IGVsc2UgaWYgKGVsLmxlbmd0aCAmJiBnZXRHbG9iYWwoKS5pbnN0YW5jZT8uVHlwZXNldCkge1xuICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20oZWwpO1xuICAgIGdldEdsb2JhbCgpLmluc3RhbmNlLlR5cGVzZXQoLi4uYXJyKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGlzIHN0eWxlIGlzIGFkZGVkIHRvIG92ZXJyaWVkIGRlZmF1bHQgc3R5bGluZyBvZiBtangtbXNwYWNlIE1hdGhqYXggdGFnXG4gKiBJbiBtYXRoamF4IHNyYyBjb2RlIFxcbmV3bGluZSBsYXRleCBnZXRzIHBhcnNlZCB0byA8bWp4LW1zcGFjZT48L21qeC1tc3BhY2U+LFxuICogYnV0IGhhcyB0aGUgZGVmYXVsdCBzdHlsZVxuICogJ21qeC1tc3BhY2UnOiB7XG4gIFwiZGlzcGxheVwiOiAnaW4tbGluZScsXG4gIFwidGV4dC1hbGlnblwiOiAnbGVmdCdcbn0gd2hpY2ggcHJldmVudHMgaXQgZnJvbSBzaG93aW5nIGFzIGEgbmV3bGluZSB2YWx1ZVxuICovXG5DSFRNTG1zcGFjZS5zdHlsZXMgPSB7XG4gICdtangtbXNwYWNlJzoge1xuICAgIGRpc3BsYXk6ICdibG9jaycsXG4gICAgJ3RleHQtYWxpZ24nOiAnY2VudGVyJyxcbiAgICBoZWlnaHQ6ICc1cHgnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyTWF0aDtcbiJdfQ==