@surfside/ads-core-mock 0.1.0 → 0.1.1

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 (42) hide show
  1. package/README.md +15 -15
  2. package/lib/cjs/index.js +58 -6358
  3. package/lib/cjs/index.js.map +1 -41
  4. package/lib/cjs/mock/Bidder.js +451 -0
  5. package/lib/cjs/mock/Bidder.js.map +1 -0
  6. package/lib/cjs/mock/CheatCodes.js +9 -0
  7. package/lib/cjs/mock/CheatCodes.js.map +1 -0
  8. package/lib/cjs/mock/Configuration.js +309 -0
  9. package/lib/cjs/mock/Configuration.js.map +1 -0
  10. package/lib/cjs/mock/Device.js +15 -0
  11. package/lib/cjs/mock/Device.js.map +1 -0
  12. package/lib/cjs/mock/Dynamic.js +66 -0
  13. package/lib/cjs/mock/Dynamic.js.map +1 -0
  14. package/lib/cjs/mock/Geo.js +19 -0
  15. package/lib/cjs/mock/Geo.js.map +1 -0
  16. package/lib/cjs/mock/Product.js +146 -0
  17. package/lib/cjs/mock/Product.js.map +1 -0
  18. package/lib/cjs/mock/Recommender.js +13 -0
  19. package/lib/cjs/mock/Recommender.js.map +1 -0
  20. package/lib/cjs/mock/index.js +20 -0
  21. package/lib/cjs/mock/index.js.map +1 -0
  22. package/lib/esm/index.js +51 -6330
  23. package/lib/esm/index.js.map +1 -41
  24. package/lib/esm/mock/Bidder.js +446 -0
  25. package/lib/esm/mock/Bidder.js.map +1 -0
  26. package/lib/esm/mock/CheatCodes.js +6 -0
  27. package/lib/esm/mock/CheatCodes.js.map +1 -0
  28. package/lib/esm/mock/Configuration.js +305 -0
  29. package/lib/esm/mock/Configuration.js.map +1 -0
  30. package/lib/esm/mock/Device.js +11 -0
  31. package/lib/esm/mock/Device.js.map +1 -0
  32. package/lib/esm/mock/Dynamic.js +62 -0
  33. package/lib/esm/mock/Dynamic.js.map +1 -0
  34. package/lib/esm/mock/Geo.js +15 -0
  35. package/lib/esm/mock/Geo.js.map +1 -0
  36. package/lib/esm/mock/Product.js +139 -0
  37. package/lib/esm/mock/Product.js.map +1 -0
  38. package/lib/esm/mock/Recommender.js +9 -0
  39. package/lib/esm/mock/Recommender.js.map +1 -0
  40. package/lib/esm/mock/index.js +4 -0
  41. package/lib/esm/mock/index.js.map +1 -0
  42. package/package.json +30 -22
@@ -1,41 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../node_modules/handlebars/dist/cjs/handlebars/utils.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/exception.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/each.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/if.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/log.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers/with.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/helpers.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/decorators.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/logger.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/base.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/safe-string.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/runtime.js", "../../../../node_modules/handlebars/dist/cjs/handlebars/no-conflict.js", "../../../../node_modules/handlebars/dist/cjs/handlebars.runtime.js", "../../../../node_modules/handlebars/runtime.js", "../../../@surfside-ads-core-client/lib/esm/index.js", "../../../@surfside-ads-core/lib/esm/index.js", "../../src/mock/Configuration.ts", "../../src/mock/Geo.ts", "../../src/mock/Device.ts", "../../src/mock/CheatCodes.ts", "../../src/mock/Product.ts", "../../src/mock/Recommender.ts", "../../src/index.ts", "../../src/mock/Bidder.ts"],
4
- "sourcesContent": [
5
- "'use strict';\n\nexports.__esModule = true;\nexports.extend = extend;\nexports.indexOf = indexOf;\nexports.escapeExpression = escapeExpression;\nexports.isEmpty = isEmpty;\nexports.createFrame = createFrame;\nexports.blockParams = blockParams;\nexports.appendContextPath = appendContextPath;\nvar escape = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#x27;',\n '`': '&#x60;',\n '=': '&#x3D;'\n};\n\nvar badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nfunction extend(obj /* , ...source */) {\n for (var i = 1; i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nvar toString = Object.prototype.toString;\n\nexports.toString = toString;\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n exports.isFunction = isFunction = function (value) {\n return typeof value === 'function' && toString.call(value) === '[object Function]';\n };\n}\nexports.isFunction = isFunction;\n\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nvar isArray = Array.isArray || function (value) {\n return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;\n};\n\nexports.isArray = isArray;\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\n\nfunction indexOf(array, value) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nfunction escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nfunction isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nfunction createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nfunction blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nfunction appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=\n",
6
- "'use strict';\n\nexports.__esModule = true;\nvar errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n\nfunction Exception(message, node) {\n var loc = node && node.loc,\n line = undefined,\n endLineNumber = undefined,\n column = undefined,\n endColumn = undefined;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n var tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n}\n\nException.prototype = new Error();\n\nexports['default'] = Exception;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=\n",
7
- "'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerHelper('blockHelperMissing', function (context, options) {\n var inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (_utils.isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==\n",
8
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('each', function (context, options) {\n if (!options) {\n throw new _exception2['default']('Must pass iterator to #each');\n }\n\n var fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data = undefined,\n contextPath = undefined;\n\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret = ret + fn(context[field], {\n data: data,\n blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])\n });\n }\n\n if (context && typeof context === 'object') {\n if (_utils.isArray(context)) {\n for (var j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (typeof Symbol === 'function' && context[Symbol.iterator]) {\n var newContext = [];\n var iterator = context[Symbol.iterator]();\n for (var it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (var j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n (function () {\n var priorKey = undefined;\n\n Object.keys(context).forEach(function (key) {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkUsWUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFlBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUM1QyxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBjb250ZXh0W1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgICAgY29uc3QgbmV3Q29udGV4dCA9IFtdO1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IGNvbnRleHRbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICBmb3IgKGxldCBpdCA9IGl0ZXJhdG9yLm5leHQoKTsgIWl0LmRvbmU7IGl0ID0gaXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0ID0gbmV3Q29udGV4dDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGNvbnRleHQubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Lmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAvLyBhbiBpdGVybWVkaWF0ZSBrZXlzIGFycmF5LlxuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEsIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgIHJldCA9IGludmVyc2UodGhpcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0=\n",
9
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('helperMissing', function () /* [args, ]options */{\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new _exception2['default']('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19\n",
10
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('if', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#if requires exactly one argument');\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function (conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19\n",
11
- "'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('log', function () /* message, options */{\n var args = [undefined],\n options = arguments[arguments.length - 1];\n for (var i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log.apply(instance, args);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19\n",
12
- "'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (instance) {\n instance.registerHelper('lookup', function (obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==\n",
13
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('../utils');\n\nvar _exception = require('../exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nexports['default'] = function (instance) {\n instance.registerHelper('with', function (context, options) {\n if (arguments.length != 2) {\n throw new _exception2['default']('#with requires exactly one argument');\n }\n if (_utils.isFunction(context)) {\n context = context.call(this);\n }\n\n var fn = options.fn;\n\n if (!_utils.isEmpty(context)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n\n return fn(context, {\n data: data,\n blockParams: _utils.blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=\n",
14
- "'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultHelpers = registerDefaultHelpers;\nexports.moveHelperToHooks = moveHelperToHooks;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _helpersBlockHelperMissing = require('./helpers/block-helper-missing');\n\nvar _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n\nvar _helpersEach = require('./helpers/each');\n\nvar _helpersEach2 = _interopRequireDefault(_helpersEach);\n\nvar _helpersHelperMissing = require('./helpers/helper-missing');\n\nvar _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n\nvar _helpersIf = require('./helpers/if');\n\nvar _helpersIf2 = _interopRequireDefault(_helpersIf);\n\nvar _helpersLog = require('./helpers/log');\n\nvar _helpersLog2 = _interopRequireDefault(_helpersLog);\n\nvar _helpersLookup = require('./helpers/lookup');\n\nvar _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n\nvar _helpersWith = require('./helpers/with');\n\nvar _helpersWith2 = _interopRequireDefault(_helpersWith);\n\nfunction registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2['default'](instance);\n _helpersEach2['default'](instance);\n _helpersHelperMissing2['default'](instance);\n _helpersIf2['default'](instance);\n _helpersLog2['default'](instance);\n _helpersLookup2['default'](instance);\n _helpersWith2['default'](instance);\n}\n\nfunction moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19\n",
15
- "'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('../utils');\n\nexports['default'] = function (instance) {\n instance.registerDecorator('inline', function (fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function (context, options) {\n // Create a new partials stack frame prior to exec.\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==\n",
16
- "'use strict';\n\nexports.__esModule = true;\nexports.registerDefaultDecorators = registerDefaultDecorators;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _decoratorsInline = require('./decorators/inline');\n\nvar _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n\nfunction registerDefaultDecorators(instance) {\n _decoratorsInline2['default'](instance);\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=\n",
17
- "'use strict';\n\nexports.__esModule = true;\n\nvar _utils = require('./utils');\n\nvar logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function lookupLevel(level) {\n if (typeof level === 'string') {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function log(level) {\n level = logger.lookupLevel(level);\n\n if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n\n console[method].apply(console, message); // eslint-disable-line no-console\n }\n }\n};\n\nexports['default'] = logger;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=\n",
18
- "'use strict';\n\nexports.__esModule = true;\nexports.createNewLookupObject = createNewLookupObject;\n\nvar _utils = require('../utils');\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\n\nfunction createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19\n",
19
- "'use strict';\n\nexports.__esModule = true;\nexports.createProtoAccessControl = createProtoAccessControl;\nexports.resultIsAllowed = resultIsAllowed;\nexports.resetLoggedProperties = resetLoggedProperties;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _createNewLookupObject = require('./create-new-lookup-object');\n\nvar _logger = require('../logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar loggedProperties = Object.create(null);\n\nfunction createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n var defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nfunction resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property \"' + propertyName + '\" because it is not an \"own property\" of its parent.\\n' + 'You can add a runtime option to disable the check or this warning:\\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');\n }\n}\n\nfunction resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function (propertyName) {\n delete loggedProperties[propertyName];\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMvQyxXQUFXOzs7O0FBRTlCLElBQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFdEMsU0FBUyx3QkFBd0IsQ0FBQyxjQUFjLEVBQUU7QUFDdkQsTUFBSSxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELHdCQUFzQixDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM5Qyx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRCx3QkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFbkQsTUFBSSx3QkFBd0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVuRCwwQkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRTlDLFNBQU87QUFDTCxjQUFVLEVBQUU7QUFDVixlQUFTLEVBQUUsNkNBQ1Qsd0JBQXdCLEVBQ3hCLGNBQWMsQ0FBQyxzQkFBc0IsQ0FDdEM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQyw2QkFBNkI7S0FDM0Q7QUFDRCxXQUFPLEVBQUU7QUFDUCxlQUFTLEVBQUUsNkNBQ1Qsc0JBQXNCLEVBQ3RCLGNBQWMsQ0FBQyxtQkFBbUIsQ0FDbkM7QUFDRCxrQkFBWSxFQUFFLGNBQWMsQ0FBQywwQkFBMEI7S0FDeEQ7R0FDRixDQUFDO0NBQ0g7O0FBRU0sU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4RSxNQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtBQUNoQyxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDakUsTUFBTTtBQUNMLFdBQU8sY0FBYyxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztHQUNwRTtDQUNGOztBQUVELFNBQVMsY0FBYyxDQUFDLHlCQUF5QixFQUFFLFlBQVksRUFBRTtBQUMvRCxNQUFJLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsV0FBTyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDO0dBQ25FO0FBQ0QsTUFBSSx5QkFBeUIsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ3hELFdBQU8seUJBQXlCLENBQUMsWUFBWSxDQUFDO0dBQy9DO0FBQ0QsZ0NBQThCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0MsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFRCxTQUFTLDhCQUE4QixDQUFDLFlBQVksRUFBRTtBQUNwRCxNQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUMzQyxvQkFBZ0IsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdEMsd0JBQU8sR0FBRyxDQUNSLE9BQU8sRUFDUCxpRUFBK0QsWUFBWSxvSUFDSCxvSEFDMkMsQ0FDcEgsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxxQkFBcUIsR0FBRztBQUN0QyxRQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsWUFBWSxFQUFJO0FBQ3BELFdBQU8sZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7R0FDdkMsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoicHJvdG8tYWNjZXNzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlTmV3TG9va3VwT2JqZWN0IH0gZnJvbSAnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5jb25zdCBsb2dnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICBsZXQgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICBsZXQgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogY3JlYXRlTmV3TG9va3VwT2JqZWN0KFxuICAgICAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b1Byb3BlcnRpZXNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCxcbiAgICAgICAgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kc1xuICAgICAgKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICB9XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coXG4gICAgICAnZXJyb3InLFxuICAgICAgYEhhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCIke3Byb3BlcnR5TmFtZX1cIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuYCArXG4gICAgICAgIGBZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG5gICtcbiAgICAgICAgYFNlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlsc2BcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnRpZXMoKSB7XG4gIE9iamVjdC5rZXlzKGxvZ2dlZFByb3BlcnRpZXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbiJdfQ==\n",
20
- "'use strict';\n\nexports.__esModule = true;\nexports.HandlebarsEnvironment = HandlebarsEnvironment;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\nvar _utils = require('./utils');\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _helpers = require('./helpers');\n\nvar _decorators = require('./decorators');\n\nvar _logger = require('./logger');\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nvar VERSION = '4.7.8';\nexports.VERSION = VERSION;\nvar COMPILER_REVISION = 8;\nexports.COMPILER_REVISION = COMPILER_REVISION;\nvar LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\nvar REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nexports.REVISION_CHANGES = REVISION_CHANGES;\nvar objectType = '[object Object]';\n\nfunction HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: _logger2['default'],\n log: _logger2['default'].log,\n\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple helpers');\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new _exception2['default']('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2['default']('Arg not supported with multiple decorators');\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n};\n\nvar log = _logger2['default'].log;\n\nexports.log = log;\nexports.createFrame = _utils.createFrame;\nexports.logger = _logger2['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy44JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19\n",
21
- "// Build out our basic SafeString type\n'use strict';\n\nexports.__esModule = true;\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function () {\n return '' + this.string;\n};\n\nexports['default'] = SafeString;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==\n",
22
- "'use strict';\n\nexports.__esModule = true;\nexports.wrapHelper = wrapHelper;\n\nfunction wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n var wrapper = function wrapper() /* dynamic arguments */{\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=\n",
23
- "'use strict';\n\nexports.__esModule = true;\nexports.checkRevision = checkRevision;\nexports.template = template;\nexports.wrapProgram = wrapProgram;\nexports.resolvePartial = resolvePartial;\nexports.invokePartial = invokePartial;\nexports.noop = noop;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _utils = require('./utils');\n\nvar Utils = _interopRequireWildcard(_utils);\n\nvar _exception = require('./exception');\n\nvar _exception2 = _interopRequireDefault(_exception);\n\nvar _base = require('./base');\n\nvar _helpers = require('./helpers');\n\nvar _internalWrapHelper = require('./internal/wrapHelper');\n\nvar _internalProtoAccess = require('./internal/proto-access');\n\nfunction checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1,\n currentRevision = _base.COMPILER_REVISION;\n\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision],\n compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');\n }\n}\n\nfunction template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new _exception2['default']('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split('\\n');\n for (var i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');\n }\n }\n\n // Just add water\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2['default']('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0; i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function fn(i) {\n var ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n var depths = undefined,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);\n }\n\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function (options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function (i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2['default']('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2['default']('must pass parent depths');\n }\n\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n}\n\nfunction wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n var currentDepths = depths;\n if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\n\nfunction resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nfunction invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n var currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function () {\n options.data = _base.createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n var fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = _base.createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new _exception2['default']('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nfunction noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function (helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function (options) {\n return Utils.extend({ lookupProperty: lookupProperty }, options);\n });\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=\n",
24
- "/* global globalThis */\n'use strict';\n\nexports.__esModule = true;\n\nexports['default'] = function (Handlebars) {\n /* istanbul ignore next */\n // https://mathiasbynens.be/notes/globalthis\n (function () {\n if (typeof globalThis === 'object') return;\n Object.prototype.__defineGetter__('__magic__', function () {\n return this;\n });\n __magic__.globalThis = __magic__; // eslint-disable-line no-undef\n delete Object.prototype.__magic__;\n })();\n\n var $Handlebars = globalThis.Handlebars;\n\n /* istanbul ignore next */\n Handlebars.noConflict = function () {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n};\n\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOzs7QUFHbEMsR0FBQyxZQUFXO0FBQ1YsUUFBSSxPQUFPLFVBQVUsS0FBSyxRQUFRLEVBQUUsT0FBTztBQUMzQyxVQUFNLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxZQUFXO0FBQ3hELGFBQU8sSUFBSSxDQUFDO0tBQ2IsQ0FBQyxDQUFDO0FBQ0gsYUFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDakMsV0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztHQUNuQyxDQUFBLEVBQUcsQ0FBQzs7QUFFTCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDOzs7QUFHMUMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksVUFBVSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDeEMsZ0JBQVUsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQ3JDO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGdsb2JhbFRoaXMgKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKEhhbmRsZWJhcnMpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAgKGZ1bmN0aW9uKCkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybjtcbiAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oJ19fbWFnaWNfXycsIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gICAgX19tYWdpY19fLmdsb2JhbFRoaXMgPSBfX21hZ2ljX187IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5fX21hZ2ljX187XG4gIH0pKCk7XG5cbiAgY29uc3QgJEhhbmRsZWJhcnMgPSBnbG9iYWxUaGlzLkhhbmRsZWJhcnM7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGdsb2JhbFRoaXMuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19\n",
25
- "'use strict';\n\nexports.__esModule = true;\n// istanbul ignore next\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }\n\n// istanbul ignore next\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }\n\nvar _handlebarsBase = require('./handlebars/base');\n\nvar base = _interopRequireWildcard(_handlebarsBase);\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\n\nvar _handlebarsSafeString = require('./handlebars/safe-string');\n\nvar _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n\nvar _handlebarsException = require('./handlebars/exception');\n\nvar _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n\nvar _handlebarsUtils = require('./handlebars/utils');\n\nvar Utils = _interopRequireWildcard(_handlebarsUtils);\n\nvar _handlebarsRuntime = require('./handlebars/runtime');\n\nvar runtime = _interopRequireWildcard(_handlebarsRuntime);\n\nvar _handlebarsNoConflict = require('./handlebars/no-conflict');\n\nvar _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n var hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2['default'];\n hb.Exception = _handlebarsException2['default'];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function (spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nvar inst = create();\ninst.create = create;\n\n_handlebarsNoConflict2['default'](inst);\n\ninst['default'] = inst;\n\nexports['default'] = inst;\nmodule.exports = exports['default'];\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=\n",
26
- "// Create a simple path alias to allow browserify to resolve\n// the runtime on a supported path.\nmodule.exports = require('./dist/cjs/handlebars.runtime')['default'];\n",
27
- "// ../@surfside-ads-core/lib/esm/index.js\nvar __create = Object.create;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __toESM = (mod, isNodeMode, target) => {\n target = mod != null ? __create(__getProtoOf(mod)) : {};\n const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target;\n for (let key of __getOwnPropNames(mod))\n if (!__hasOwnProp.call(to, key))\n __defProp(to, key, {\n get: () => mod[key],\n enumerable: true\n });\n return to;\n};\nvar __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar require_utils = __commonJS((exports) => {\n exports.__esModule = true;\n exports.extend = extend;\n exports.indexOf = indexOf;\n exports.escapeExpression = escapeExpression;\n exports.isEmpty = isEmpty;\n exports.createFrame = createFrame;\n exports.blockParams = blockParams;\n exports.appendContextPath = appendContextPath;\n var escape = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#x27;\",\n \"`\": \"&#x60;\",\n \"=\": \"&#x3D;\"\n };\n var badChars = /[&<>\"'`=]/g;\n var possible = /[&<>\"'`=]/;\n function escapeChar(chr) {\n return escape[chr];\n }\n function extend(obj) {\n for (var i = 1;i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n return obj;\n }\n var toString = Object.prototype.toString;\n exports.toString = toString;\n var isFunction = function isFunction(value) {\n return typeof value === \"function\";\n };\n if (isFunction(/x/)) {\n exports.isFunction = isFunction = function(value) {\n return typeof value === \"function\" && toString.call(value) === \"[object Function]\";\n };\n }\n exports.isFunction = isFunction;\n var isArray = Array.isArray || function(value) {\n return value && typeof value === \"object\" ? toString.call(value) === \"[object Array]\" : false;\n };\n exports.isArray = isArray;\n function indexOf(array2, value) {\n for (var i = 0, len = array2.length;i < len; i++) {\n if (array2[i] === value) {\n return i;\n }\n }\n return -1;\n }\n function escapeExpression(string) {\n if (typeof string !== \"string\") {\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return \"\";\n } else if (!string) {\n return string + \"\";\n }\n string = \"\" + string;\n }\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n }\n function isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n }\n function createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n }\n function blockParams(params, ids) {\n params.path = ids;\n return params;\n }\n function appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + \".\" : \"\") + id;\n }\n});\nvar require_exception = __commonJS((exports, module) => {\n exports.__esModule = true;\n var errorProps = [\"description\", \"fileName\", \"lineNumber\", \"endLineNumber\", \"message\", \"name\", \"number\", \"stack\"];\n function Exception(message, node) {\n var loc = node && node.loc, line = undefined, endLineNumber = undefined, column = undefined, endColumn = undefined;\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n message += \" - \" + line + \":\" + column;\n }\n var tmp = Error.prototype.constructor.call(this, message);\n for (var idx = 0;idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n if (Object.defineProperty) {\n Object.defineProperty(this, \"column\", {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, \"endColumn\", {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {}\n }\n Exception.prototype = new Error;\n exports.default = Exception;\n module.exports = exports[\"default\"];\n});\nvar require_block_helper_missing = __commonJS((exports, module) => {\n exports.__esModule = true;\n var _utils = require_utils();\n exports.default = function(instance) {\n instance.registerHelper(\"blockHelperMissing\", function(context2, options) {\n var { inverse, fn } = options;\n if (context2 === true) {\n return fn(this);\n } else if (context2 === false || context2 == null) {\n return inverse(this);\n } else if (_utils.isArray(context2)) {\n if (context2.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n return instance.helpers.each(context2, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data };\n }\n return fn(context2, options);\n }\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_each = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"each\", function(context2, options) {\n if (!options) {\n throw new _exception2[\"default\"](\"Must pass iterator to #each\");\n }\n var { fn, inverse } = options, i = 0, ret = \"\", data = undefined, contextPath = undefined;\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + \".\";\n }\n if (_utils.isFunction(context2)) {\n context2 = context2.call(this);\n }\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n ret = ret + fn(context2[field], {\n data,\n blockParams: _utils.blockParams([context2[field], field], [contextPath + field, null])\n });\n }\n if (context2 && typeof context2 === \"object\") {\n if (_utils.isArray(context2)) {\n for (var j = context2.length;i < j; i++) {\n if (i in context2) {\n execIteration(i, i, i === context2.length - 1);\n }\n }\n } else if (typeof Symbol === \"function\" && context2[Symbol.iterator]) {\n var newContext = [];\n var iterator = context2[Symbol.iterator]();\n for (var it = iterator.next();!it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context2 = newContext;\n for (var j = context2.length;i < j; i++) {\n execIteration(i, i, i === context2.length - 1);\n }\n } else {\n (function() {\n var priorKey = undefined;\n Object.keys(context2).forEach(function(key) {\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n if (i === 0) {\n ret = inverse(this);\n }\n return ret;\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_helper_missing = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"helperMissing\", function() {\n if (arguments.length === 1) {\n return;\n } else {\n throw new _exception2[\"default\"]('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_if = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"if\", function(conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2[\"default\"](\"#if requires exactly one argument\");\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n instance.registerHelper(\"unless\", function(conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2[\"default\"](\"#unless requires exactly one argument\");\n }\n return instance.helpers[\"if\"].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_log = __commonJS((exports, module) => {\n exports.__esModule = true;\n exports.default = function(instance) {\n instance.registerHelper(\"log\", function() {\n var args = [undefined], options = arguments[arguments.length - 1];\n for (var i = 0;i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n instance.log.apply(instance, args);\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_lookup = __commonJS((exports, module) => {\n exports.__esModule = true;\n exports.default = function(instance) {\n instance.registerHelper(\"lookup\", function(obj, field, options) {\n if (!obj) {\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_with = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"with\", function(context2, options) {\n if (arguments.length != 2) {\n throw new _exception2[\"default\"](\"#with requires exactly one argument\");\n }\n if (_utils.isFunction(context2)) {\n context2 = context2.call(this);\n }\n var fn = options.fn;\n if (!_utils.isEmpty(context2)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n return fn(context2, {\n data,\n blockParams: _utils.blockParams([context2], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_helpers = __commonJS((exports) => {\n exports.__esModule = true;\n exports.registerDefaultHelpers = registerDefaultHelpers;\n exports.moveHelperToHooks = moveHelperToHooks;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _helpersBlockHelperMissing = require_block_helper_missing();\n var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n var _helpersEach = require_each();\n var _helpersEach2 = _interopRequireDefault(_helpersEach);\n var _helpersHelperMissing = require_helper_missing();\n var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n var _helpersIf = require_if();\n var _helpersIf2 = _interopRequireDefault(_helpersIf);\n var _helpersLog = require_log();\n var _helpersLog2 = _interopRequireDefault(_helpersLog);\n var _helpersLookup = require_lookup();\n var _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n var _helpersWith = require_with();\n var _helpersWith2 = _interopRequireDefault(_helpersWith);\n function registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2[\"default\"](instance);\n _helpersEach2[\"default\"](instance);\n _helpersHelperMissing2[\"default\"](instance);\n _helpersIf2[\"default\"](instance);\n _helpersLog2[\"default\"](instance);\n _helpersLookup2[\"default\"](instance);\n _helpersWith2[\"default\"](instance);\n }\n function moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n }\n});\nvar require_inline = __commonJS((exports, module) => {\n exports.__esModule = true;\n var _utils = require_utils();\n exports.default = function(instance) {\n instance.registerDecorator(\"inline\", function(fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function(context2, options2) {\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret2 = fn(context2, options2);\n container.partials = original;\n return ret2;\n };\n }\n props.partials[options.args[0]] = options.fn;\n return ret;\n });\n };\n module.exports = exports[\"default\"];\n});\nvar require_decorators = __commonJS((exports) => {\n exports.__esModule = true;\n exports.registerDefaultDecorators = registerDefaultDecorators;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _decoratorsInline = require_inline();\n var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n function registerDefaultDecorators(instance) {\n _decoratorsInline2[\"default\"](instance);\n }\n});\nvar require_logger = __commonJS((exports, module) => {\n exports.__esModule = true;\n var _utils = require_utils();\n var logger = {\n methodMap: [\"debug\", \"info\", \"warn\", \"error\"],\n level: \"info\",\n lookupLevel: function lookupLevel(level) {\n if (typeof level === \"string\") {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n return level;\n },\n log: function log(level) {\n level = logger.lookupLevel(level);\n if (typeof console !== \"undefined\" && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n if (!console[method]) {\n method = \"log\";\n }\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1;_key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n console[method].apply(console, message);\n }\n }\n };\n exports.default = logger;\n module.exports = exports[\"default\"];\n});\nvar require_create_new_lookup_object = __commonJS((exports) => {\n exports.__esModule = true;\n exports.createNewLookupObject = createNewLookupObject;\n var _utils = require_utils();\n function createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0;_key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n }\n});\nvar require_proto_access = __commonJS((exports) => {\n exports.__esModule = true;\n exports.createProtoAccessControl = createProtoAccessControl;\n exports.resultIsAllowed = resultIsAllowed;\n exports.resetLoggedProperties = resetLoggedProperties;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _createNewLookupObject = require_create_new_lookup_object();\n var _logger = require_logger();\n var _logger2 = _interopRequireDefault(_logger);\n var loggedProperties = Object.create(null);\n function createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList[\"constructor\"] = false;\n defaultMethodWhiteList[\"__defineGetter__\"] = false;\n defaultMethodWhiteList[\"__defineSetter__\"] = false;\n defaultMethodWhiteList[\"__lookupGetter__\"] = false;\n var defaultPropertyWhiteList = Object.create(null);\n defaultPropertyWhiteList[\"__proto__\"] = false;\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n }\n function resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === \"function\") {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n }\n function checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n }\n function logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n _logger2[\"default\"].log(\"error\", 'Handlebars: Access has been denied to resolve the property \"' + propertyName + `\" because it is not an \"own property\" of its parent.\n` + `You can add a runtime option to disable the check or this warning:\n` + \"See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details\");\n }\n }\n function resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function(propertyName) {\n delete loggedProperties[propertyName];\n });\n }\n});\nvar require_base = __commonJS((exports) => {\n exports.__esModule = true;\n exports.HandlebarsEnvironment = HandlebarsEnvironment;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n var _helpers = require_helpers();\n var _decorators = require_decorators();\n var _logger = require_logger();\n var _logger2 = _interopRequireDefault(_logger);\n var _internalProtoAccess = require_proto_access();\n var VERSION = \"4.7.8\";\n exports.VERSION = VERSION;\n var COMPILER_REVISION = 8;\n exports.COMPILER_REVISION = COMPILER_REVISION;\n var LAST_COMPATIBLE_COMPILER_REVISION = 7;\n exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\n var REVISION_CHANGES = {\n 1: \"<= 1.0.rc.2\",\n 2: \"== 1.0.0-rc.3\",\n 3: \"== 1.0.0-rc.4\",\n 4: \"== 1.x.x\",\n 5: \"== 2.0.0-alpha.x\",\n 6: \">= 2.0.0-beta.1\",\n 7: \">= 4.0.0 <4.3.0\",\n 8: \">= 4.3.0\"\n };\n exports.REVISION_CHANGES = REVISION_CHANGES;\n var objectType = \"[object Object]\";\n function HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n }\n HandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n logger: _logger2[\"default\"],\n log: _logger2[\"default\"].log,\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2[\"default\"](\"Arg not supported with multiple helpers\");\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === \"undefined\") {\n throw new _exception2[\"default\"]('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2[\"default\"](\"Arg not supported with multiple decorators\");\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n };\n var log2 = _logger2[\"default\"].log;\n exports.log = log2;\n exports.createFrame = _utils.createFrame;\n exports.logger = _logger2[\"default\"];\n});\nvar require_safe_string = __commonJS((exports, module) => {\n exports.__esModule = true;\n function SafeString(string) {\n this.string = string;\n }\n SafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n return \"\" + this.string;\n };\n exports.default = SafeString;\n module.exports = exports[\"default\"];\n});\nvar require_wrapHelper = __commonJS((exports) => {\n exports.__esModule = true;\n exports.wrapHelper = wrapHelper;\n function wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== \"function\") {\n return helper;\n }\n var wrapper = function wrapper() {\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n }\n});\nvar require_runtime = __commonJS((exports) => {\n exports.__esModule = true;\n exports.checkRevision = checkRevision;\n exports.template = template;\n exports.wrapProgram = wrapProgram;\n exports.resolvePartial = resolvePartial;\n exports.invokePartial = invokePartial;\n exports.noop = noop;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n newObj[key] = obj[key];\n }\n }\n newObj[\"default\"] = obj;\n return newObj;\n }\n }\n var _utils = require_utils();\n var Utils = _interopRequireWildcard(_utils);\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n var _base = require_base();\n var _helpers = require_helpers();\n var _internalWrapHelper = require_wrapHelper();\n var _internalProtoAccess = require_proto_access();\n function checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1, currentRevision = _base.COMPILER_REVISION;\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision], compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2[\"default\"](\"Template was precompiled with an older version of Handlebars than the current runtime. \" + \"Please update your precompiler to a newer version (\" + runtimeVersions + \") or downgrade your runtime to an older version (\" + compilerVersions + \").\");\n } else {\n throw new _exception2[\"default\"](\"Template was precompiled with a newer version of Handlebars than the current runtime. \" + \"Please update your runtime to a newer version (\" + compilerInfo[1] + \").\");\n }\n }\n function template(templateSpec, env) {\n if (!env) {\n throw new _exception2[\"default\"](\"No environment passed to template\");\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2[\"default\"](\"Unknown template object: \" + typeof templateSpec);\n }\n templateSpec.main.decorator = templateSpec.main_d;\n env.VM.checkRevision(templateSpec.compiler);\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n function invokePartialWrapper(partial, context2, options) {\n if (options.hash) {\n context2 = Utils.extend({}, context2, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context2, options);\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n var result = env.VM.invokePartial.call(this, partial, context2, extendedOptions);\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context2, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split(`\n`);\n for (var i = 0, l = lines.length;i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n lines[i] = options.indent + lines[i];\n }\n result = lines.join(`\n`);\n }\n return result;\n } else {\n throw new _exception2[\"default\"](\"The partial \" + options.name + \" could not be compiled when running in runtime-only mode\");\n }\n }\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2[\"default\"]('\"' + name + '\" not defined in ' + obj, {\n loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0;i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context2) {\n return typeof current === \"function\" ? current.call(context2) : current;\n },\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n fn: function fn(i) {\n var ret2 = templateSpec[i];\n ret2.decorator = templateSpec[i + \"_d\"];\n return ret2;\n },\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i], fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n return obj;\n },\n nullContext: Object.seal({}),\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n function ret(context2) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var data = options.data;\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context2, data);\n }\n var depths = undefined, blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context2 != options.depths[0] ? [context2].concat(options.depths) : options.depths;\n } else {\n depths = [context2];\n }\n }\n function main(context3) {\n return \"\" + templateSpec.main(container, context3, container.helpers, container.partials, data, blockParams, depths);\n }\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context2, options);\n }\n ret.isTop = true;\n ret._setup = function(options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n if (templateSpec.usePartial) {\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, \"helperMissing\", keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, \"blockHelperMissing\", keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl;\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n ret._child = function(i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2[\"default\"](\"must pass block params\");\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2[\"default\"](\"must pass parent depths\");\n }\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n }\n function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context2) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var currentDepths = depths;\n if (depths && context2 != depths[0] && !(context2 === container.nullContext && depths[0] === null)) {\n currentDepths = [context2].concat(depths);\n }\n return fn(container, context2, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n }\n function resolvePartial(partial, context2, options) {\n if (!partial) {\n if (options.name === \"@partial-block\") {\n partial = options.data[\"partial-block\"];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n }\n function invokePartial(partial, context2, options) {\n var currentPartialBlock = options.data && options.data[\"partial-block\"];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function() {\n options.data = _base.createFrame(options.data);\n var fn = options.fn;\n partialBlock = options.data[\"partial-block\"] = function partialBlockWrapper(context3) {\n var options2 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n options2.data = _base.createFrame(options2.data);\n options2.data[\"partial-block\"] = currentPartialBlock;\n return fn(context3, options2);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n if (partial === undefined) {\n throw new _exception2[\"default\"](\"The partial \" + options.name + \" could not be found\");\n } else if (partial instanceof Function) {\n return partial(context2, options);\n }\n }\n function noop() {\n return \"\";\n }\n function initData(context2, data) {\n if (!data || !(\"root\" in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context2;\n }\n return data;\n }\n function executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n }\n function wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function(helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n }\n function passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function(options) {\n return Utils.extend({ lookupProperty }, options);\n });\n }\n});\nvar require_no_conflict = __commonJS((exports, module) => {\n exports.__esModule = true;\n exports.default = function(Handlebars) {\n (function() {\n if (typeof globalThis === \"object\")\n return;\n Object.prototype.__defineGetter__(\"__magic__\", function() {\n return this;\n });\n __magic__.globalThis = __magic__;\n delete Object.prototype.__magic__;\n })();\n var $Handlebars = globalThis.Handlebars;\n Handlebars.noConflict = function() {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n };\n module.exports = exports[\"default\"];\n});\nvar require_handlebars_runtime = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n newObj[key] = obj[key];\n }\n }\n newObj[\"default\"] = obj;\n return newObj;\n }\n }\n var _handlebarsBase = require_base();\n var base = _interopRequireWildcard(_handlebarsBase);\n var _handlebarsSafeString = require_safe_string();\n var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n var _handlebarsException = require_exception();\n var _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n var _handlebarsUtils = require_utils();\n var Utils = _interopRequireWildcard(_handlebarsUtils);\n var _handlebarsRuntime = require_runtime();\n var runtime = _interopRequireWildcard(_handlebarsRuntime);\n var _handlebarsNoConflict = require_no_conflict();\n var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n function create() {\n var hb = new base.HandlebarsEnvironment;\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2[\"default\"];\n hb.Exception = _handlebarsException2[\"default\"];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n hb.VM = runtime;\n hb.template = function(spec) {\n return runtime.template(spec, hb);\n };\n return hb;\n }\n var inst = create();\n inst.create = create;\n _handlebarsNoConflict2[\"default\"](inst);\n inst[\"default\"] = inst;\n exports.default = inst;\n module.exports = exports[\"default\"];\n});\nvar require_runtime2 = __commonJS((exports, module) => {\n module.exports = require_handlebars_runtime()[\"default\"];\n});\nvar AgentTypes = {\n Session: 1,\n Device: 2,\n User: 3\n};\nvar AdCom10DeviceTypes = {\n Mobile: 1,\n PC: 2,\n CTV: 3,\n Phone: 4,\n Tablet: 5,\n Connected: 6,\n SetTop: 7,\n OOH: 8\n};\nvar NativePosition = {\n Unknown: 0,\n AboveTheFold: 1,\n BelowTheFold: 3,\n Header: 4,\n Footer: 5,\n Sidebar: 6,\n FullScreen: 7\n};\nvar NativeImageTypes = {\n Icon: 1,\n Main: 3\n};\nvar NativeDataTypes = {\n Sponsored: 1,\n Desc: 2,\n Rating: 3,\n Likes: 4,\n Downloads: 5,\n Price: 6,\n SalePrice: 7,\n Phone: 8,\n Address: 9,\n Desc2: 10,\n DisplayURL: 11,\n CTAText: 12,\n SurfStrain: 500,\n SurfTHC: 501,\n SurfCBD: 502,\n SurfCategory: 503,\n SurfMetaProduct: 599\n};\nvar NativeAssetId = {\n Title: 0,\n Image: 1,\n Sponsored: 2,\n Desc: 3,\n Rating: 4,\n Price: 5,\n SalePrice: 6,\n DisplayURL: 7,\n CTAText: 8,\n Video: 9,\n SurfStrain: 500,\n SurfTHC: 501,\n SurfCBD: 502,\n SurfCategory: 503,\n SurfMetaProduct: 599\n};\nvar EventTypes = {\n Imp: 1,\n ViewableMRC50: 2,\n ViewableMRC100: 3,\n ViewableVIDEO50: 4\n};\nvar ContextTypes = {\n Content: 1,\n Social: 2,\n Product: 3\n};\nvar ContextSubTypes = {\n General: 10,\n Article: 11,\n Video: 12,\n Audio: 13,\n Image: 14,\n UserGenerated: 15,\n GeneralSocial: 20,\n Email: 21,\n Chat: 22,\n Product: 30,\n Application: 31,\n ProductReviews: 32\n};\nvar PlacementTypes = {\n InFeed: 1,\n Atomic: 2,\n OutsideCore: 3,\n Recommendation: 4\n};\nvar VideoMimes = {\n MP4: \"video/mp4\",\n WEBM: \"video/webm\"\n};\nvar EventTrackingMethods = {\n Img: 1,\n JS: 2\n};\nvar findDataAssetByType = (assets, id) => assets?.find((asset) => asset.id === id)?.data?.value;\nfunction NativeResponseToProductInformation(native) {\n const brand = findDataAssetByType(native.native.assets, NativeAssetId.Sponsored);\n return {\n image: native.native.assets?.find((asset) => asset.img?.type === NativeImageTypes.Main)?.img?.url,\n name: native.native.assets?.find((asset) => asset.title !== undefined)?.title?.text,\n price: findDataAssetByType(native.native.assets, NativeAssetId.Price),\n salePrice: findDataAssetByType(native.native.assets, NativeAssetId.SalePrice),\n thc: findDataAssetByType(native.native.assets, NativeAssetId.SurfTHC),\n cbd: findDataAssetByType(native.native.assets, NativeAssetId.SurfCBD),\n strain: findDataAssetByType(native.native.assets, NativeAssetId.SurfStrain),\n brand_name: brand,\n brandName: brand,\n productType: findDataAssetByType(native.native.assets, NativeAssetId.SurfCategory),\n details: findDataAssetByType(native.native.assets, NativeAssetId.Desc),\n cta: findDataAssetByType(native.native.assets, NativeAssetId.CTAText),\n clickthroughUrl: native.native.link?.url ?? null,\n pixelUrl: native.native.eventtrackers?.find((event) => event.event === EventTypes.Imp)?.url\n };\n}\nvar SURF_PREFIX = \"%c[SURF]\";\nvar SEPARATOR = \" ›\";\nvar UNDEF = \"[ undefined ]\";\nvar LogColors = {\n Lavender: \"#c0abff\",\n UltraRed: \"#f97585\",\n SoftGold: \"#f4bd5d\",\n MagicMint: \"#baf7db\"\n};\nvar log = (log2, args, color) => {\n args.unshift(`border-radius: 3px; margin-left: 10px; background: ${color}; font-size: 12px; font-weight: bold;`);\n args.unshift(SURF_PREFIX);\n log2.apply(console, args);\n};\nvar info = (...args) => log(console.log, [\"(Info)\", ...args], LogColors.Lavender);\nvar warn = (...args) => log(console.warn, [\"(Warning)\", ...args], LogColors.SoftGold);\nvar debug = (...args) => log(console.debug, [\"(Debug)\", ...args], LogColors.MagicMint);\nvar error = (...args) => log(console.error, [\"(Error)\", ...args], LogColors.UltraRed);\nvar context = (logger, ...prefix) => {\n const newPrefix = joinCtx(prefix) + SEPARATOR;\n const newLogger = {\n info: logger.info.bind(undefined, newPrefix),\n warn: logger.warn.bind(undefined, newPrefix),\n debug: logger.debug.bind(undefined, newPrefix),\n error: logger.error.bind(undefined, newPrefix),\n table: console.table,\n with: logger.with\n };\n newLogger.with = context.bind(undefined, newLogger);\n return newLogger;\n};\nvar InitLogger = () => {\n const logger = {\n info,\n warn,\n debug,\n error,\n table: console.table\n };\n logger.with = context.bind(undefined, logger);\n return logger;\n};\nvar joinCtx = (ctx) => ctx.map((e) => e === undefined ? UNDEF : e).join(SEPARATOR);\nvar Ctx = (logger) => logger === undefined ? undefined : logger?.with === undefined ? { ...logger, with: () => Ctx(logger) } : logger;\nvar Ok = (t) => ({\n ok: true,\n value: t\n});\nvar Err = (e) => ({\n ok: false,\n error: e\n});\nvar TryDo = (fn) => {\n try {\n return Ok(fn());\n } catch (err) {\n return Err(err);\n }\n};\nvar GetValue = (result) => result?.ok ? result.value : undefined;\nvar ValueOr = (result, or) => result?.ok ? result.value : or;\nvar GetValueOrThrow = (result) => {\n if (result.ok) {\n return result.value;\n }\n throw result.error;\n};\nvar AssertValue = GetValueOrThrow;\nvar AllOrNone = (results) => {\n const failed = results.filter((res) => !res.ok).map((res) => res.error);\n if (failed.length > 0) {\n return Err(new MultipleErrorsError(failed));\n }\n const success = results.filter((res) => res.ok).map((res) => res.value);\n return Ok(success);\n};\nvar Some = (results) => {\n const success = results.filter((res) => res.ok).map((res) => res.value);\n return Ok(success);\n};\nvar Filter = (...results) => {\n const success = Some(results).value.map((val) => Ok(val));\n const failed = results.filter((res) => !res.ok);\n return [success, failed];\n};\nvar AnyFailed = (...results) => {\n const errors = results.filter((res) => !res.ok).map((res) => res.error);\n if (errors.length) {\n return [true, errors];\n }\n return [false];\n};\n\nclass MultipleErrorsError extends Error {\n errors;\n constructor(errors) {\n super(`Got multiple errors:\n` + errors.map((err) => \"\\t\" + err.message.substring(0, 32).padEnd(35, \".\")).join(`\n`));\n this.errors = errors;\n }\n}\nvar Pipe = (result) => ({\n then: pipeThen(result),\n result: pipeResult(result),\n value: pipeValue(result),\n valueOr: pipeValueOr(result),\n valueOrThrow: pipeValueOrThrow(result)\n});\nvar pipeThen = (result) => (fn) => {\n if (!result.ok) {\n return Pipe(result);\n }\n return Pipe(Ok(fn(result.value)));\n};\nvar pipeResult = (result) => () => result;\nvar pipeValue = (result) => () => GetValue(result);\nvar pipeValueOr = (result) => (or) => GetValue(result) ?? or;\nvar pipeValueOrThrow = (result) => () => {\n if (result.ok) {\n return result.value;\n }\n throw result.error;\n};\nvar AsyncPipe = (result) => ({\n then: asyncPipeThen(result),\n result: asyncPipeResult(result),\n value: asyncPipeValue(result),\n valueOr: asyncPipeValueOr(result),\n valueOrThrow: asyncPipeValueOrThrow(result)\n});\nvar asyncPipeThen = (result) => (fn) => {\n const wrappedPromiseResult = result.then((unwrappedResult) => {\n if (unwrappedResult.ok) {\n try {\n const fnRes = fn(unwrappedResult.value);\n return Promise.resolve(fnRes).catch(Err);\n } catch (err) {\n return Err(err);\n }\n } else {\n return unwrappedResult;\n }\n });\n return AsyncPipe(wrappedPromiseResult);\n};\nvar asyncPipeResult = (result) => () => result;\nvar asyncPipeValue = (result) => async () => {\n try {\n const res = await result;\n if (res.ok) {\n return res.value;\n }\n return;\n } catch {\n return;\n }\n};\nvar asyncPipeValueOr = (result) => async (or) => {\n try {\n const res = await result;\n if (res.ok) {\n return res.value;\n }\n return or;\n } catch {\n return or;\n }\n};\nvar asyncPipeValueOrThrow = (result) => async () => {\n const res = await result;\n if (res.ok) {\n return res.value;\n }\n throw res.error;\n};\nvar ResultStream = (results) => ({\n map: streamMap(results),\n filter: streamFilter(results),\n results: streamResults(results),\n value: streamValue(results),\n valueOr: streamValueOr(results),\n valueOrThrow: streamValueOrThrow(results)\n});\nvar streamMap = (results) => (fn) => {\n if (!results.ok) {\n return ResultStream(results);\n }\n return ResultStream(Ok(results.value.map(fn)));\n};\nvar streamFilter = (results) => (fn) => {\n if (!results.ok) {\n return ResultStream(results);\n }\n return ResultStream(Ok(results.value.filter(fn)));\n};\nvar streamResults = (results) => () => results;\nvar streamValue = (results) => () => results.ok ? results.value : undefined;\nvar streamValueOr = (results) => (or) => results.ok ? results.value : or;\nvar streamValueOrThrow = (results) => () => {\n if (results.ok) {\n return results.value;\n } else {\n throw results.error;\n }\n};\nvar SURF_GEO_SERVICE_URL = \"https://g.surfside.io/enrich\";\nvar LOCATION_TYPE_IP = 2;\nvar IP_SERVICES_MAXMIND = 3;\nvar GetGeo = async (logger, apiToken, ip) => {\n const log2 = Ctx(logger)?.with(\"GeoService\");\n log2?.info(\"Getting Geo info\");\n try {\n const response = await fetch(SURF_GEO_SERVICE_URL);\n log2?.debug(\"Geo Response\", response);\n return Ok(await response.json());\n } catch (err) {\n return Err(err);\n }\n};\nvar GeoContextToORTB = (logger, geoContext) => ({\n lat: geoContext.coords.latitude,\n lon: geoContext.coords.longitude,\n city: geoContext.city,\n region: geoContext.region,\n country: geoContext.country,\n zip: geoContext.zip,\n type: LOCATION_TYPE_IP,\n accuracy: geoContext.coords.accuracy,\n utcoffset: geoContext.utcoffset,\n ipservice: IP_SERVICES_MAXMIND\n});\nvar GetDevice = (logger, screen, navigator2, mobile) => {\n const log2 = Ctx(logger)?.with(\"DeviceService\");\n log2?.info(\"Getting device info\");\n const deviceInfo = getDeviceInfo(log2, navigator2.userAgent);\n const sua = {\n model: deviceInfo?.model,\n mobile: mobile ? 1 : 0,\n browsers: deviceInfo?.browser !== undefined ? [deviceInfo.browser] : undefined,\n platform: deviceInfo?.os !== undefined ? {\n brand: deviceInfo?.os,\n version: deviceInfo?.osv?.split(\".\")\n } : undefined,\n architecture: getCPUArchitecture(log2, navigator2.userAgent, mobile),\n source: 3\n };\n return Ok({\n make: deviceInfo?.make,\n model: deviceInfo?.model,\n w: screen.width,\n h: screen.height,\n language: navigator2.language,\n ua: navigator2.userAgent,\n devicetype: getDeviceType(log2, screen, mobile),\n os: deviceInfo?.os,\n osv: deviceInfo?.osv,\n sua\n });\n};\nvar getDeviceInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"tryGetDeviceInfo\");\n log2?.debug(\"getting device info\");\n const userAgentLower = userAgent.toLowerCase();\n const browser = getBrowserInfo(log2, navigator.userAgent);\n if (userAgentLower.includes(\"android\")) {\n return {\n ...getAndroidDeviceInfo(log2, userAgent),\n browser\n };\n } else if (userAgentLower.includes(\"iphone\") || userAgentLower.includes(\"ipad\")) {\n return {\n ...getiPhoneDeviceInfo(log2, userAgent),\n browser\n };\n } else if (userAgentLower.includes(\"windows nt\")) {\n return {\n make: \"Microsoft\",\n model: \"Windows\",\n os: \"Windows\",\n osv: /Windows NT (?<osv>[0-9.]+)/ig.exec(userAgent)?.groups?.osv,\n browser\n };\n } else if (userAgentLower.includes(\"macintosh\")) {\n return {\n make: \"Apple\",\n model: \"Macintosh\",\n os: \"MacOS\",\n osv: /Mac OS X (?<osv>[0-9_]+)/ig.exec(userAgent)?.groups?.osv?.replaceAll(\"_\", \".\"),\n browser\n };\n }\n return { browser };\n};\nvar getAndroidDeviceInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"getAndroidDeviceInfo\");\n log2?.debug(\"getting android info\");\n const match = /^[^\\s]+\\s\\((?<Linux>.*);\\s*(?<osv>[^)]+);\\s*(?<Model>[^)]+)\\)/ig.exec(userAgent);\n const osv = match?.groups?.osv;\n const model = match?.groups?.Model;\n const partialDevice = {\n os: \"Android\",\n osv,\n model\n };\n if (model !== undefined) {\n if (model.includes(\"Pixel\")) {\n return {\n ...partialDevice,\n make: \"Google\"\n };\n } else if (model.includes(\"SM-\")) {\n return {\n ...partialDevice,\n make: \"Samsung\"\n };\n } else if (model.startsWith(\"LG-\")) {\n return {\n ...partialDevice,\n make: \"LG\"\n };\n } else if (model.startsWith(\"moto\")) {\n return {\n ...partialDevice,\n make: \"Motorola\"\n };\n } else if (model.startsWith(\"Redmi\")) {\n return {\n ...partialDevice,\n make: \"Xiaomi\"\n };\n } else {\n return {\n ...partialDevice,\n make: \"Android\"\n };\n }\n }\n return {\n os: \"Android\",\n osv\n };\n};\nvar getiPhoneDeviceInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"getIphoneDeviceInfo\");\n log2?.debug(\"getting iPhone info\");\n const match = /^[^\\s]+\\s*\\((?<Device>[^;]+);\\s(?<Model>[^;)]+[;)])\\s(?<ModelExt>[^;)]+[;)])?/ig.exec(userAgent);\n const make = \"Apple\";\n const device = match?.groups?.Device;\n const model = device?.toLowerCase().includes(\"ipad\") ? \"iPad\" : \"iPhone\";\n const modelGroup = match?.groups?.Model;\n const os = \"iOS\";\n const osvSearch = modelGroup === \"U\" ? match?.groups?.ModelExt : modelGroup;\n const osv = osvSearch !== undefined ? /OS (?<ver>[0-9_]+)/ig.exec(osvSearch)?.groups?.ModelExt : undefined;\n return {\n make,\n model,\n os,\n osv\n };\n};\nvar getBrowserInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"getBrowserInfo\");\n log2?.debug(\"getting browser info\");\n try {\n if (userAgent.includes(\"Firefox/\")) {\n return {\n version: userAgent.split(\"Firefox/\")[1]?.split(\".\"),\n brand: \"Firefox\"\n };\n } else if (userAgent.includes(\"Chrome/\")) {\n return {\n version: userAgent.split(\"Chrome/\")[1]?.split(\" \")[0]?.split(\".\"),\n brand: \"Chrome\"\n };\n } else if (userAgent.includes(\"CriOS\")) {\n return {\n version: userAgent.split(\"CriOS/\")[1]?.split(\" \")[0]?.split(\".\"),\n brand: \"Chrome\"\n };\n } else if (userAgent.includes(\"Safari/\") && !userAgent.includes(\"Chrome\")) {\n return {\n version: userAgent.split(\"Version/\")[1]?.split(\" \")[0]?.split(\".\"),\n brand: \"Safari\"\n };\n } else if (userAgent.includes(\"Edg/\")) {\n return {\n version: userAgent.split(\"Edg/\")[1]?.split(\".\"),\n brand: \"Edge\"\n };\n }\n } catch (error2) {\n log2?.error(error2);\n }\n};\nvar getCPUArchitecture = (logger, userAgent, mobile) => {\n const log2 = Ctx(logger)?.with(\"getCPUArchitecture\");\n log2?.debug(\"Getting CPU arch\");\n if (/Win64|x64|x86_64|WOW64/.test(userAgent)) {\n return \"x64\";\n }\n if (/Win32|x86/.test(userAgent)) {\n return \"x86\";\n }\n if (/aarch64|arm64/.test(userAgent)) {\n return \"ARM64\";\n }\n if (/armv\\d+/.test(userAgent)) {\n return \"ARM\";\n }\n if (mobile) {\n return \"ARM\";\n }\n log2?.warn(\"Failed to get cpu architecture\");\n return;\n};\nvar getDeviceType = (logger, screen, mobile) => {\n const log2 = Ctx(logger)?.with(\"getDeviceType\");\n log2?.debug(\"getting device type\");\n const MINIMUM_SHORT_TABLET = 600;\n const MAXIMUM_LONG_TABLET = 960;\n const hasTouch = mobile;\n if (!hasTouch) {\n return AdCom10DeviceTypes.PC;\n }\n const width = screen.width;\n const height = screen.height;\n const [shorterSide, longerSide] = [width, height].sort((a, b) => a - b);\n if (hasTouch && shorterSide >= MINIMUM_SHORT_TABLET && longerSide >= MAXIMUM_LONG_TABLET) {\n return AdCom10DeviceTypes.Tablet;\n }\n return AdCom10DeviceTypes.Mobile;\n};\nvar GetConfiguration = async (logger, url, handlebars, accountId, siteId) => {\n const log2 = Ctx(logger)?.with(\"ConfigurationService\").with(url).with(accountId).with(siteId);\n log2?.info(\"Getting configuration\");\n try {\n const response = await fetch(`${url}/${accountId}/${siteId}/config.json`);\n if (!response.ok) {\n log2?.error(\"Failed to get configuration\", url, accountId, siteId);\n return Err(new Error(\"Failed to get configuration\"));\n }\n const config = await response.json();\n if (config.settings === undefined || config.templates === undefined) {\n log2?.error(\"configuration was an invalid format\");\n return Err(new Error(\"configuration was an invalid format\"));\n }\n log2?.debug(\"configuration: \", config);\n return await mapConfig(log2, handlebars, config);\n } catch (err) {\n return Err(err);\n }\n};\nvar mapConfig = async (logger, handlebars, config) => {\n const log2 = Ctx(logger)?.with(\"mapConfig\");\n log2?.debug(\"mapping configuration\");\n return Ok({\n settings: config.settings,\n templates: {\n clickThroughUrlTemplate: handlebars.template((await importModule(log2, `export default ${config.templates?.clickThroughUrlTemplate ?? \"\"}`)).default),\n productCardTemplate: handlebars.template((await importModule(log2, `export default ${config.templates?.productCardTemplate ?? \"\"}`)).default),\n javascriptCallbacks: await importModule(log2, config.templates?.javascriptCallbacks ?? \"\"),\n productCardStylesheet: config.templates?.productCardStylesheet,\n carouselStylesheet: config.templates?.carouselStylesheet\n }\n });\n};\nvar importModule = async (logger, script) => {\n const log2 = Ctx(logger)?.with(\"importModule\");\n log2?.debug(\"importing\", script);\n const blob = new Blob([script], { type: \"text/javascript\" });\n const moduleUrl = URL.createObjectURL(blob);\n log2?.debug(\"moduleUrl\", moduleUrl);\n const module = await import(moduleUrl);\n log2?.debug(\"module:\", module);\n return module;\n};\nvar AUCTION_PRICE_MACRO = /(?:\\$|%24)?(?:\\{|%7b)auction_price(?:\\}|%7d)/ig;\nvar RequestBids = async (logger, url, accountId, siteId, locationId, channelId, bidRequest) => {\n const log2 = Ctx(logger)?.with(\"RequestBids\").with(accountId).with(siteId).with(locationId).with(channelId);\n log2?.info(\"Requesting bids\");\n log2?.debug(bidRequest);\n try {\n const response = await fetch(url, {\n method: \"POST\",\n body: JSON.stringify(bidRequest)\n });\n log2?.debug(\"Got response\", response);\n if (response.status !== 200) {\n switch (response.status) {\n case 204:\n log2?.warn(\"No bids\", bidRequest, response);\n return Err(new NoBidsError(bidRequest, response));\n case 500:\n log2?.error(\"Bidder failed serverside. Report this error.\", bidRequest, response);\n return Err(new InternalServerError(bidRequest, response));\n case 503:\n log2?.error(\"Bidder starting up. Try again in a few minutes\", bidRequest, response);\n return Err(new BidderStartingUpError(bidRequest, response));\n default:\n log2?.error(\"Unknown bidder error\", bidRequest, response);\n return Err(new UnknownBidderError(bidRequest, response));\n }\n }\n log2?.debug(\"Successfully got bids\", bidRequest);\n const bidResponse = await response.json();\n if (bidResponse.seatbid === undefined || bidResponse.seatbid.length === 0) {\n log2?.error(\"Bidder didn't return any seatbids\");\n return Err(new MalformedBidResponseError(bidRequest, response, bidResponse));\n }\n for (let i = 0;i < bidResponse.seatbid.length; i++) {\n const seatbid = bidResponse.seatbid[i];\n if (seatbid === undefined) {\n log2?.warn(`Seatbid #${i} was undefined`, bidRequest, response, bidResponse);\n continue;\n }\n for (let j = 0;j < seatbid.bid.length; j++) {\n const bid = seatbid.bid[j];\n if (bid === undefined) {\n log2?.warn(`Bid #${j} in seatbid #${i} was undefined`);\n continue;\n }\n try {\n bid.adm = decodeURIComponent(bid?.adm ?? \"\").replaceAll(/\\\\\"/ig, '\"');\n } catch {\n log2?.debug(\"Adm is not encoded. This is not an issue. Moving on.\");\n }\n bid.nurl = bid.nurl?.replace(AUCTION_PRICE_MACRO, bid.price.toString());\n bid.adm = bid.adm?.replaceAll(AUCTION_PRICE_MACRO, bid.price.toString());\n }\n }\n log2?.debug(\"Returning bid responses\");\n return Ok(bidResponse);\n } catch (err) {\n return Err(err);\n }\n};\n\nclass NoBidsError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"204 - No bids available for request\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass InternalServerError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"500 - Bidder had an unknown serverside error\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass BidderStartingUpError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"503 - Bidder is starting up\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass UnknownBidderError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"Unknown bidder error\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass MalformedBidResponseError extends Error {\n request;\n response;\n bidResponse;\n constructor(request, response, bidResponse) {\n super(\"Malformed bid response error\");\n this.request = request;\n this.response = response;\n this.bidResponse = bidResponse;\n }\n}\nasync function* GetSponsoredProduct(logger, url, accountId, locationId, nativeId) {\n const log2 = Ctx(logger)?.with(\"GetSponsoredProduct\").with(accountId).with(locationId).with(nativeId);\n log2?.info(\"Getting sponsored product\");\n try {\n const rawResponse = await fetch(`${url}/native/${accountId}/${locationId}/${nativeId}.json`);\n if (rawResponse.status !== 200) {\n log2?.error(\"product feed service returned with non-200 response\", rawResponse.status);\n return;\n }\n const products = rawResponse;\n log2?.debug(\"response\", products);\n if (Array.isArray(products)) {\n log2?.debug(\"Brand level creative\");\n const productArr = products;\n for (const product of productArr) {\n yield mapResponseToProductInfo(log2, product);\n }\n } else {\n log2?.debug(\"Individual product creative\");\n const product = products;\n return mapResponseToProductInfo(log2, product);\n }\n } catch (err) {\n log2?.error(err);\n }\n}\nvar GetAllSponsoredProducts = async (logger, url, accountId, locationId, nativeId) => {\n const log2 = Ctx(logger)?.with(\"GetSponsoredProduct\").with(accountId).with(locationId).with(nativeId);\n log2?.info(\"Getting sponsored product\");\n try {\n const rawResponse = await fetch(`${url}/native/${accountId}/${locationId}/${nativeId}.json`);\n if (rawResponse.status !== 200) {\n log2?.error(\"product feed service returned with non-200 response\", rawResponse.status);\n return Err(new NoNativeError(nativeId));\n }\n const products = rawResponse;\n log2?.debug(\"response\", products);\n if (Array.isArray(products)) {\n log2?.debug(\"Brand level creative\");\n const productArr = products;\n const mapResponseToProductInfoLogged = mapResponseToProductInfo.bind(undefined, log2);\n return Ok(productArr.map(mapResponseToProductInfoLogged));\n } else {\n log2?.debug(\"Individual product creative\");\n const product = products;\n return Ok([mapResponseToProductInfo(log2, product)]);\n }\n } catch (err) {\n log2?.error(err);\n return Err(err);\n }\n};\nvar GetRecommendedProduct = async (logger, url, accountId, locationId, productId) => {\n const log2 = Ctx(logger)?.with(\"GetRecommendedProduct\").with(accountId).with(locationId).with(productId);\n log2?.info(\"Getting recommended product\");\n try {\n const rawResponse = await fetch(`${url}product/${accountId}/${locationId}/${productId}.json`);\n if (rawResponse.status !== 200) {\n log2?.error(\"product feed service returned with non-200 response\", rawResponse.status);\n return Err(new Error(\"product feed service returned with non-200 response\"));\n }\n const rawProduct = await rawResponse.json();\n log2?.debug(\"response\", rawProduct);\n const productInfo = mapResponseToProductInfo(log2, rawProduct);\n log2?.debug(\"mapped\", productInfo);\n return Ok(productInfo);\n } catch (err) {\n log2?.error(err);\n return Err(err);\n }\n};\nvar mapResponseToProductInfo = (logger, data) => {\n const log2 = Ctx(logger)?.with(\"mapResponseToProductInfo\");\n log2?.debug(\"Mapping product\");\n const getField = fieldOrUndef.bind(undefined, data);\n return {\n image: getField(\"image_link\"),\n price: getField(\"price\"),\n salePrice: getField(\"sale_price\"),\n thc: getField(\"thc\"),\n cbd: getField(\"cbd\"),\n strain: getField(\"strain\"),\n name: getField(\"name\"),\n brand_name: getField(\"brand\"),\n brandName: getField(\"brand\"),\n productType: getField(\"productType\"),\n details: getField(\"details\"),\n cta: getField(\"cta\"),\n clickthroughUrl: getField(\"clickthroughUrl\"),\n winUrl: getField(\"winUrl\"),\n pixelUrl: getField(\"pixelUrl\"),\n ext: data\n };\n};\nvar fieldOrUndef = (data, field) => {\n if (field in data) {\n return String(data[field]);\n }\n return;\n};\n\nclass NoNativeError extends Error {\n nativeId;\n constructor(nativeId) {\n super(\"Native ID did not exist in product feed: \" + nativeId);\n this.nativeId = nativeId;\n }\n}\nasync function* GenerateTopProducts(logger, productFeed, url, accountId, siteId, locationId) {\n const log2 = Ctx(logger)?.with(\"GenerateTopProducts\").with(accountId).with(siteId).with(locationId);\n log2?.info(\"Generating top products\");\n yield* generateProductRecommendation(logger, productFeed, url, accountId, siteId, locationId, undefined, \"top-products\");\n}\nasync function* GenerateForYou(logger, productFeed, url, accountId, siteId, locationId, userId) {\n const log2 = Ctx(logger)?.with(\"GenerateForYou\").with(accountId).with(siteId).with(locationId).with(userId);\n log2?.info(\"Generating for you\");\n yield* generateProductRecommendation(logger, productFeed, url, accountId, siteId, locationId, userId, \"for-you\");\n}\nasync function* GeneratePreviousPurchases(logger, productFeed, url, accountId, siteId, locationId, userId) {\n const log2 = Ctx(logger)?.with(\"GeneratePreviousPurchases\").with(accountId).with(siteId).with(locationId).with(userId);\n log2?.info(\"Generating previous purchases\");\n yield* generateProductRecommendation(log2, productFeed, url, accountId, siteId, locationId, userId, \"buy-again\");\n}\nasync function* generateProductRecommendation(logger, productFeed, url, accountId, siteId, locationId, userId, type) {\n const log2 = Ctx(logger)?.with(\"generatreProductRecommendation\");\n log2?.debug(\"Generating product recommendation\");\n const recommendations = await fetchRecommendations(log2, url, accountId, siteId, locationId, userId, type);\n if (!recommendations.ok) {\n log2?.error(recommendations.error);\n return;\n }\n yield* generateProduct(log2, productFeed, accountId, locationId, recommendations.value);\n log2?.debug(\"out of recommendations\");\n}\nvar fetchRecommendations = async (logger, url, accountId, siteId, locationId, userId, type) => {\n const log2 = Ctx(logger)?.with(\"fetchRecommendations\");\n log2?.debug(\"Fetching recommendations\");\n const key = `accountId=${accountId}&siteId=${siteId}&locationId=${locationId}&userId=${userId ?? \"null\"}`;\n try {\n const results = await fetch(`${url}/r/${type}?${key}&limit=100`);\n if (!results.ok) {\n return Err(new Error(\"Failed to load recommendations. Service returned \" + results.status));\n }\n const recommendations = await results.json();\n const error2 = recommendations.error;\n if (error2 !== undefined) {\n return Err(new Error(error2));\n }\n return Ok(recommendations);\n } catch (err) {\n return Err(err);\n }\n};\nasync function* generateProduct(logger, productFeed, accountId, locationId, results) {\n const log2 = Ctx(logger)?.with(\"generateProduct\");\n log2?.debug(\"generating product info\");\n for (const item of results) {\n const itemId = item.item_id;\n try {\n log2?.debug(\"itemId\", itemId);\n const product = await productFeed(itemId);\n log2?.debug(\"product\", itemId, product);\n if (product.ok) {\n yield product.value;\n } else {\n log2?.warn(\"item was missing from product feed\", itemId);\n }\n } catch (err) {\n log2?.warn(\"couldn't get product\", err);\n }\n }\n log2?.info(\"no more products. Exiting\");\n}\nvar DEFAULT_LENGTH = 80;\nvar VAST_3_0 = 3;\nvar builderWithVer = (logger, state, ver) => {\n logger?.debug(\"Adding version to native request\", ver);\n return botsBuildBots(logger, { ...state, ver });\n};\nvar builderWithContext = (logger, state, context2) => {\n logger?.debug(\"Adding context to native request\", context2);\n return botsBuildBots(logger, { ...state, context: context2 });\n};\nvar builderWithContextSubType = (logger, state, contextSubType) => {\n logger?.debug(\"Adding context subtype to native request\", contextSubType);\n return botsBuildBots(logger, { ...state, contextSubType });\n};\nvar builderWithPlacementType = (logger, state, placementType) => {\n logger?.debug(\"Adding placement type to native request\", placementType);\n return botsBuildBots(logger, { ...state, placementType });\n};\nvar builderWithTitle = (logger, state, length = DEFAULT_LENGTH, required = true) => {\n logger?.debug(\"Adding title to native request\", length, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Title,\n required: required ? 1 : 0,\n title: {\n len: length\n }\n }\n ]\n });\n};\nvar builderWithImage = (logger, state, width, height, minWidth, minHeight, required = true) => {\n logger?.debug(\"Adding image to native request\", width, height, minWidth, minHeight, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Image,\n required: required ? 1 : 0,\n img: {\n w: width,\n h: height,\n wmin: minWidth,\n hmin: minHeight\n }\n }\n ]\n });\n};\nvar builderWithVideo = (logger, state, mimes, minDuration, maxDuration, required = true) => {\n logger?.debug(\"Adding video to native request\", mimes, minDuration, maxDuration, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Video,\n required: required ? 1 : 0,\n video: {\n mimes,\n minduration: minDuration,\n maxduration: maxDuration,\n protocols: [VAST_3_0]\n }\n }\n ]\n });\n};\nvar builderWithData = (logger, state, type, id, length = DEFAULT_LENGTH, required = true) => {\n logger?.debug(\"Adding data to request\", type, id, length, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id,\n required: required ? 1 : 0,\n data: {\n type,\n len: length\n }\n }\n ]\n });\n};\nvar passToData = (type, id) => (logger, state, length = DEFAULT_LENGTH, required = true) => builderWithData(logger, state, type, id, length, required);\nvar builderWithSponsored = passToData(NativeDataTypes.Sponsored, NativeAssetId.Sponsored);\nvar builderWithDescription = passToData(NativeDataTypes.Desc, NativeAssetId.Desc);\nvar builderWithRating = passToData(NativeDataTypes.Rating, NativeAssetId.Rating);\nvar builderWithPrice = passToData(NativeDataTypes.Price, NativeAssetId.Price);\nvar builderWithSalePrice = passToData(NativeDataTypes.SalePrice, NativeAssetId.SalePrice);\nvar builderWithDisplayURL = passToData(NativeDataTypes.DisplayURL, NativeAssetId.DisplayURL);\nvar builderWithCTAText = passToData(NativeDataTypes.CTAText, NativeAssetId.CTAText);\nvar builderWithCategory = passToData(NativeDataTypes.SurfCategory, NativeAssetId.SurfCategory);\nvar builderWithTHC = passToData(NativeDataTypes.SurfTHC, NativeAssetId.SurfTHC);\nvar builderWithCBD = passToData(NativeDataTypes.SurfCBD, NativeAssetId.SurfCBD);\nvar builderWithStrain = passToData(NativeDataTypes.SurfStrain, NativeAssetId.SurfStrain);\nvar builderWithMetaProduct = passToData(NativeDataTypes.SurfMetaProduct, NativeAssetId.SurfMetaProduct);\nvar builderWithEventTracker = (logger, state, event, methods) => {\n logger?.debug(\"Adding event tracker to big request\");\n return botsBuildBots(logger, {\n ...state,\n eventTrackers: [\n ...state.eventTrackers,\n {\n event,\n methods\n }\n ]\n });\n};\nvar builderBuild = (logger, state) => {\n logger?.debug(\"Building bid request\", state);\n return {\n ver: state.ver,\n context: state.context,\n contextsubtype: state.contextSubType,\n assets: state.assets,\n eventtrackers: state.eventTrackers\n };\n};\nvar botsBuildBots = (logger, state) => ({\n withVer: builderWithVer.bind(undefined, logger, state),\n withContext: builderWithContext.bind(undefined, logger, state),\n withContextSubType: builderWithContextSubType.bind(undefined, logger, state),\n withPlacementType: builderWithPlacementType.bind(undefined, logger, state),\n withTitle: builderWithTitle.bind(undefined, logger, state),\n withImage: builderWithImage.bind(undefined, logger, state),\n withVideo: builderWithVideo.bind(undefined, logger, state),\n withData: builderWithData.bind(undefined, logger, state),\n withSponsored: builderWithSponsored.bind(undefined, logger, state),\n withDescription: builderWithDescription.bind(undefined, logger, state),\n withRating: builderWithRating.bind(undefined, logger, state),\n withPrice: builderWithPrice.bind(undefined, logger, state),\n withSalePrice: builderWithSalePrice.bind(undefined, logger, state),\n withDisplayURL: builderWithDisplayURL.bind(undefined, logger, state),\n withCTAText: builderWithCTAText.bind(undefined, logger, state),\n withCategory: builderWithCategory.bind(undefined, logger, state),\n withTHC: builderWithTHC.bind(undefined, logger, state),\n withCBD: builderWithCBD.bind(undefined, logger, state),\n withStrain: builderWithStrain.bind(undefined, logger, state),\n withMetaProduct: builderWithMetaProduct.bind(undefined, logger, state),\n withEventTracker: builderWithEventTracker.bind(undefined, logger, state),\n build: builderBuild.bind(undefined, logger, state)\n});\nvar StartNative = (logger) => {\n const log2 = Ctx(logger)?.with(\"StartNative\");\n return botsBuildBots(log2, {\n assets: [],\n eventTrackers: []\n });\n};\nvar DefaultNative = (logger) => {\n const log2 = Ctx(logger)?.with(\"DefaultNative\");\n return StartNative(log2).withVer(\"1.2\").withContext(ContextTypes.Product).withContextSubType(ContextSubTypes.Product).withPlacementType(PlacementTypes.InFeed).withEventTracker(EventTypes.Imp, [EventTrackingMethods.Img, EventTrackingMethods.Img]);\n};\nvar SURF_EID_SOURCE = \"surf-domain-id\";\nfunction StartRequest(logger, accountId, siteId, channelId, locationId, device, geo, userId, zoneId, id) {\n const log2 = Ctx(logger)?.with(\"StartRequest\").with(accountId).with(siteId).with(channelId).with(locationId).with(id);\n log2?.info(\"Starting request\");\n return botsBuildBots2(logger, {\n context: {\n accountId,\n siteId,\n channelId,\n locationId,\n zoneId,\n storeId: locationId,\n placementId: zoneId\n },\n geo,\n device,\n id,\n user: userId !== undefined ? {\n eids: [{\n source: SURF_EID_SOURCE,\n uids: [{\n id: userId,\n atype: AgentTypes.Session\n }]\n }]\n } : undefined,\n imp: []\n });\n}\nvar builderWithUser = (logger, state, user) => {\n logger?.debug(\"Adding user to request\", user);\n return botsBuildBots2(logger, {\n ...state,\n user: {\n ...user,\n eids: [\n ...state.user?.eids !== undefined ? state.user.eids : [],\n ...user.eids !== undefined ? user.eids : []\n ]\n }\n });\n};\nvar builderWithRegulations = (logger, state, regs) => {\n logger?.debug(\"Added regulations to request\", regs);\n return botsBuildBots2(logger, { ...state, regs });\n};\nvar builderWithApp = (logger, state, app) => {\n logger?.debug(\"Adding app to request\");\n return botsBuildBots2(logger, { ...state, app });\n};\nvar builderWithBanner = (logger, state, w, h, options, impOptions) => {\n logger?.debug(\"Addig banner to request\", w, h, options, impOptions);\n return botsBuildImp(logger, state, {\n id: generateId(),\n banner: {\n w,\n h,\n ...options\n },\n ...impOptions\n });\n};\nvar builderWithVideo2 = (logger, state, w, h, minduration, maxduration, mimes, options, impOptions) => {\n logger?.debug(\"Adding video to request\", w, h, minduration, maxduration, mimes, options, impOptions);\n return botsBuildImp(logger, state, {\n id: generateId(),\n video: {\n w,\n h,\n mimes: mimes ?? [\"video/mp4\", \"video/webm\"],\n minduration,\n maxduration,\n ...options\n },\n ...impOptions\n });\n};\nvar builderWithKeywords = (logger, state, keywords) => {\n logger?.debug(\"Adding keyword to request\", keywords);\n return botsBuildBots2(logger, {\n ...state,\n context: {\n ...state.context,\n keywords\n }\n });\n};\nvar builderWithNative = (logger, state, request, options, impOptions) => {\n logger?.debug(\"Adding native to request\", request, options, impOptions);\n return typeof request === \"string\" ? builderWithNativeStr(logger, state, request, options, impOptions) : builderWithNativeStr(logger, state, JSON.stringify(request), options, impOptions);\n};\nvar builderWithNativeStr = (logger, state, request, options, impOptions) => botsBuildImp(logger, state, {\n id: generateId(),\n native: {\n ver: \"1.2\",\n request,\n ...options\n },\n ...impOptions\n});\nvar builderBuild2 = (logger, state) => {\n logger?.debug(\"Building request\", state);\n return {\n id: state.id ?? generateId(),\n imp: state.imp.map((imp) => ({\n ...imp,\n ext: imp.ext === undefined ? undefined : { ...imp.ext, ...state.context }\n })),\n device: {\n ...state.device,\n geo: state.geo === undefined ? undefined : GeoContextToORTB(undefined, state.geo)\n },\n user: state.user,\n app: state.app,\n site: state.site,\n ext: state.context\n };\n};\nvar botsBuildBots2 = (logger, state) => ({\n withUser: builderWithUser.bind(undefined, logger, state),\n withRegulations: builderWithRegulations.bind(undefined, logger, state),\n withBanner: builderWithBanner.bind(undefined, logger, state),\n withVideo: builderWithVideo2.bind(undefined, logger, state),\n withNative: builderWithNative.bind(undefined, logger, state),\n withApp: builderWithApp.bind(undefined, logger, state),\n withKeywords: builderWithKeywords.bind(undefined, logger, state),\n build: builderBuild2.bind(undefined, logger, state)\n});\nvar botsBuildImp = (logger, state, imp) => botsBuildBots2(logger, { ...state, imp: [...state.imp, imp] });\nvar generateId = () => crypto.randomUUID();\nvar CreativeType = {\n Banner: 0,\n Video: 1,\n ProductCard: 2,\n Carousel: 3\n};\n\nclass MissingAdmError extends Error {\n bid;\n constructor(bid) {\n super(\"Cannot build creative; missing adm field\");\n this.bid = bid;\n }\n}\n\nclass MissingProductError extends Error {\n bid;\n constructor(bid) {\n super(\"Could not find product data for creative while building clickthrough URL. Some data fields are missing\");\n this.bid = bid;\n }\n}\nvar BuildClickthroughUrl = (logger, windowInfo, configuration, product) => {\n const log2 = Ctx(logger)?.with(\"BuildClickthroughUrl\");\n log2?.info(\"Building clickthrough URL\");\n log2?.debug(windowInfo, product, configuration);\n try {\n return Ok(configuration.templates.clickThroughUrlTemplate({\n product,\n catalog: product,\n window: windowInfo,\n publisher: configuration,\n ...product\n }, {\n helpers: GetHelpers()\n }));\n } catch (e) {\n log2?.error(\"Failed to execute clickthrough URL template\", product, configuration, windowInfo);\n return Err(e);\n }\n};\nvar ConsumeN = (generator, n) => {\n const consumed = [];\n for (let i = 0;i < n; i++) {\n const value = generator.next();\n if (value.done) {\n break;\n }\n consumed.push(value.value);\n }\n return consumed;\n};\nvar ConsumeAll = (generator) => {\n const consumed = [];\n for (const value of generator) {\n consumed.push(value);\n }\n return consumed;\n};\nvar ConsumeNAsync = async (generator, n) => {\n const consumed = [];\n while (consumed.length < n) {\n const result = await generator.next();\n if (result.done) {\n break;\n }\n consumed.push(result.value);\n }\n return consumed;\n};\nvar ConsumeAllAsync = async (generator) => {\n const consumed = [];\n for await (const value of generator) {\n consumed.push(value);\n }\n return consumed;\n};\nfunction* GenerateArray(data) {\n for (const t of data) {\n yield t;\n }\n}\nvar TryGet = (get) => {\n try {\n return Ok(get());\n } catch (error2) {\n return Err(error2);\n }\n};\nvar BuildAllSponsoredProductCardResponses = async (logger, getAllSponsoredProducts, windowInfo, configuration, bids) => {\n const log2 = Ctx(logger)?.with(\"BuildProductCardResponse\");\n log2?.info(\"Building product card responses\");\n if (bids === undefined || bids === null) {\n return Err(new MissingBidsError);\n }\n const bidPromises = bids.map(buildAllProductCardResponsesFromBid.bind(undefined, log2, getAllSponsoredProducts, windowInfo, configuration));\n const productCardResponseResults = await Promise.allSettled(bidPromises);\n productCardResponseResults.filter((res) => res.status === \"rejected\").map((res) => res.reason).forEach((err) => log2?.warn(err));\n const fulfilled = productCardResponseResults.filter((res) => res.status === \"fulfilled\");\n fulfilled.filter((res) => !res.value.ok).map((res) => res.value).map((res) => res.error).forEach((err) => log2?.warn(err));\n return Ok(productCardResponseResults.filter((res) => res.status === \"fulfilled\").filter((res) => res.value.ok).map((res) => res.value).flatMap((res) => res.value));\n};\nasync function* GenerateSponsoredProductCardResponse(logger, getAllSponsoredProducts, windowInfo, configuration, bids) {\n const log2 = Ctx(logger)?.with(\"GenerateProductCardResponse\");\n log2?.info(\"Entering product card response generator\", bids);\n for (const bid of bids) {\n log2?.info(\"Generating product card response\", bid);\n const result = await buildAllProductCardResponsesFromBid(log2, getAllSponsoredProducts, windowInfo, configuration, bid);\n if (!result.ok) {\n log2?.warn(result.error);\n continue;\n }\n yield* GenerateArray(result.value);\n }\n}\nvar getField = (native) => (id) => native.native.assets?.find((asset) => asset.id === id)?.data?.value;\nvar getTrackers = (logger, bid, native) => {\n const log2 = Ctx(logger)?.with(\"getTrackers\");\n log2?.info(\"Getting trackers\");\n const win = bid.nurl;\n if (win === undefined) {\n return Err(new MissingWinUrlError(bid));\n }\n const imp = native.native.eventtrackers?.filter((tracker) => tracker.event === EventTypes.Imp && tracker.method === EventTrackingMethods.Img).map((tracker) => tracker.url).filter((url) => url !== undefined) ?? [];\n const others = native.native.eventtrackers?.filter((tracker) => tracker.url !== undefined).map((tracker) => ({\n type: tracker.method,\n url: tracker.url\n })) ?? [];\n return Ok({ win, imp, others });\n};\nvar fetchProductsFromBid = async (logger, getAllSponsoredProducts, bid) => {\n try {\n const log2 = Ctx(logger)?.with(\"fetchProductsFromBid\");\n log2?.info(\"Fetching products from IBid\");\n const productCardResponses = [];\n if (bid.adm === undefined) {\n log2?.warn(\"Bid is missing ADM\", bid);\n return Err(new MissingAdmError(bid));\n }\n const adm = bid.adm;\n const nativeRes = TryGet(() => JSON.parse(adm));\n if (!nativeRes.ok) {\n log2?.error(\"Bid adm failed to deserialize\", bid, adm);\n return Err(new MalformedNativeResponseError(bid));\n }\n const native = nativeRes.value;\n const metaProductId = getField(native)(NativeAssetId.SurfMetaProduct);\n if (metaProductId === undefined) {\n return Err(new MissingProductIdError(bid, native));\n }\n const productRes = await getAllSponsoredProducts(metaProductId);\n if (!productRes.ok) {\n return productRes;\n }\n return Ok({\n products: productRes.value,\n native\n });\n } catch (err) {\n return Err(err);\n }\n};\nfunction* buildProductCardResponseFromProductInfo(logger, windowInfo, configuration, bid, native, products) {\n const log2 = Ctx(logger)?.with(\"buildProductCardResponseFromProductInfo\");\n for (const product of products) {\n const clickthrough = BuildClickthroughUrl(log2, windowInfo, configuration, product);\n if (!clickthrough.ok) {\n return clickthrough;\n }\n const trackers = getTrackers(log2, bid, native);\n if (!trackers.ok) {\n return trackers;\n }\n const finalClickthrough = TryDo(() => {\n const bidderClickthrough = new URL(native.native.link.url);\n bidderClickthrough.searchParams.set(\"url\", clickthrough.value);\n return bidderClickthrough.toString();\n });\n if (!finalClickthrough.ok) {\n return finalClickthrough;\n }\n yield {\n type: 2,\n native,\n product,\n bid,\n clickthrough: finalClickthrough.value,\n trackers: trackers.value,\n sponsored: true\n };\n }\n}\nvar buildAllProductCardResponsesFromBid = async (logger, getAllSponsoredProducts, windowInfo, configuration, bid) => {\n const log2 = Ctx(logger)?.with(\"buildAllProductCardResponseBids\");\n log2?.info(\"Building all product card responses\");\n try {\n return Ok(await ConsumeAllAsync(generateProductCardResponseFromBid(log2, getAllSponsoredProducts, windowInfo, configuration, bid)));\n } catch (err) {\n return Err(err);\n }\n};\nasync function* generateProductCardResponseFromBid(logger, getAllSponsoredProducts, windowInfo, configuration, bid) {\n const log2 = Ctx(logger)?.with(\"generateProductCardResponseFromBid\");\n log2?.info(\"generating product card response from bid\");\n try {\n const productResult = await fetchProductsFromBid(log2, getAllSponsoredProducts, bid);\n if (!productResult.ok) {\n log2?.info(\"No products!\");\n return productResult;\n }\n const { products, native } = productResult.value;\n const builtProductCardResponses = [];\n yield* buildProductCardResponseFromProductInfo(log2, windowInfo, configuration, bid, native, products);\n } catch (err) {\n return;\n }\n}\n\nclass MissingBidsError extends Error {\n constructor() {\n super(\"Unable to build product cards - no bids were provided\");\n }\n}\n\nclass MalformedNativeResponseError extends Error {\n bid;\n constructor(bid) {\n super(\"Unable to build product card - missing native response\");\n this.bid = bid;\n }\n}\n\nclass MissingWinUrlError extends Error {\n bid;\n constructor(bid) {\n super(\"Unable to build product card - no win URL was provided\");\n this.bid = bid;\n }\n}\n\nclass MissingProductIdError extends Error {\n bid;\n native;\n constructor(bid, native) {\n super(\"Unable to build product card - no product ID was provided\");\n this.bid = bid;\n this.native = native;\n }\n}\nvar DEFAULT_MAX_SLUG = 5;\nfunction slug(name, options) {\n if (name === undefined || name === null || typeof name !== \"string\") {\n return \"\";\n }\n const hyphenate = options.hash.hyphenate !== undefined ? new RegExp(options.hash.hyphenate, \"ig\") : /[\\s_\\-,]/ig;\n const drop = options.hash.drop !== undefined ? new RegExp(options.hash.drop, \"ig\") : /[^A-Za-z0-9-]/ig;\n const dropBefore = options.hash.dropBefore !== undefined ? new RegExp(options.hash.dropBefore) : undefined;\n const maxSlug = options.hash.length ?? DEFAULT_MAX_SLUG;\n const separator = options.hash.separator ?? \"-\";\n if (dropBefore !== undefined) {\n name = name.replace(dropBefore, \"\");\n }\n return name.replace(hyphenate, separator).replace(drop, \"\").toLowerCase().split(separator).slice(0, maxSlug).join(separator);\n}\nfunction lower(name) {\n if (name === undefined || name === null || typeof name !== \"string\") {\n return \"\";\n }\n return name.toLowerCase();\n}\nfunction path(position) {\n if (position === 0 || position === undefined || position === null) {\n return \"\";\n }\n const paths = window.location.pathname.split(\"/\");\n if (paths.length <= position) {\n return \"\";\n }\n return paths[position];\n}\nfunction sed(input, searchRegex, replacement) {\n return input.replace(new RegExp(searchRegex), (...args) => {\n const END = -2;\n const groups = args.slice(1, END);\n let result = replacement;\n result = result.replace(/\\\\(\\d+)/g, (_, groupIndex) => groups[groupIndex - 1] ?? \"\");\n result = result.replace(/\\\\U(\\d+)/g, (_, groupIndex) => (groups[groupIndex - 1] ?? \"\").toUpperCase());\n result = sedCommand(result, \"U\", groups, (str) => str?.toUpperCase());\n result = sedCommand(result, \"L\", groups, (str) => str?.toLowerCase());\n result = sedCommand(result, \"I\", groups, (str) => str?.[0]);\n return result ?? \"\";\n });\n}\nfunction sedCommand(input, char, groups, transform) {\n if (input === undefined) {\n return;\n }\n return input.replace(new RegExp(`\\\\\\\\${char}(\\\\d+)`, \"g\"), (_, groupIndex) => transform(groups[groupIndex - 1] ?? \"\") ?? \"\");\n}\nfunction search(name) {\n if (name?.length === undefined || name.length === 0) {\n return \"\";\n }\n const search2 = window.location.search;\n if (search2.length === 0) {\n return \"\";\n }\n const params = new URLSearchParams(search2);\n return params.get(name) ?? \"\";\n}\nfunction coalesce() {\n for (let i = 0;i < arguments.length - 1; i++) {\n const arg = arguments[i];\n if (arg !== null && arg !== undefined && arg !== \"\" && arg !== false) {\n return arg;\n }\n }\n return \"\";\n}\nfunction join() {\n const args = [...arguments].slice(0, arguments.length - 1);\n const options = arguments[arguments.length - 1];\n const separator = options.hash.separator ?? \"/\";\n return args.filter((arg) => arg !== undefined && arg !== null && arg !== \"\").join(separator);\n}\nfunction uri(component) {\n if (component?.length === undefined || component.length === 0) {\n return \"\";\n }\n const encoded = encodeURIComponent(component);\n return encoded.replaceAll(\"'\", \"%27\");\n}\nfunction eq(a, b) {\n return a === b;\n}\nfunction or(a, b) {\n return Boolean(a) || Boolean(b);\n}\nfunction and(a, b) {\n return Boolean(a) && Boolean(b);\n}\nfunction isIn(a, b) {\n if (b?.length === undefined || b.length === 0) {\n return false;\n }\n return b.includes(a);\n}\nfunction array() {\n return Array.from(arguments).slice(0, -1);\n}\nvar GetHelpers = () => ({\n slug,\n lower,\n path,\n sed,\n replace: sed,\n search,\n coalesce,\n join,\n get_first: coalesce,\n uri,\n or,\n and,\n isIn,\n array\n});\nvar import_runtime = __toESM(require_runtime2(), 1);\nvar BuildSponsoredCarousel = (logger, requestBids, generateProductCardResponse, request) => {\n const log2 = Ctx(logger)?.with(\"BuildSponsoredCarousel\");\n log2?.info(\"Building sponsored carousel\");\n return Ok({\n type: 3,\n getProduct: getNextSponsoredCarouselProduct.bind(undefined, log2, requestBids, generateProductCardResponse, request)\n });\n};\nvar BuildRecommendedCarousel = (logger, windowInfo, config, topProductGenerator, forYouProductGenerator, pastPurchasesProductGenerator, userId, recommenderType) => {\n switch (recommenderType.type) {\n case \"top-products\": {\n return buildRecommendedCarouselInternal(logger, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator\n });\n }\n case \"for-you\": {\n return buildRecommendedCarouselInternal(logger, windowInfo, config, {\n recommenderType: \"for-you\",\n forYouProductGenerator,\n topProductGenerator,\n userId\n });\n }\n case \"past-purchases\": {\n return buildRecommendedCarouselInternal(logger, windowInfo, config, {\n recommenderType: \"past-purchases\",\n pastPurchasesProductGenerator,\n topProductGenerator,\n userId\n });\n }\n }\n};\nvar buildRecommendedCarouselInternal = (logger, windowInfo, config, recommenderType) => {\n const log2 = Ctx(logger)?.with(\"buildRecommendedCarouselInternal\");\n log2?.info(\"Building Recommended Carousel\");\n return Ok({\n type: 3,\n getProduct: getNextRecommendedCarouselProduct.bind(undefined, log2, windowInfo, config, recommenderType)\n });\n};\nvar BuildHybridCarousel = (logger, windowInfo, config, requestBids, generateProductCardResponse, topProductGenerator, forYouProductGenerator, pastPurchasesProductGenerator, userId, request, recommenderType) => {\n switch (recommenderType.type) {\n case \"top-products\": {\n return buildHybridCarouselInternal(logger, windowInfo, config, requestBids, generateProductCardResponse, request, {\n recommenderType: \"top-products\",\n topProductGenerator\n });\n }\n case \"for-you\": {\n return buildHybridCarouselInternal(logger, windowInfo, config, requestBids, generateProductCardResponse, request, {\n recommenderType: \"for-you\",\n forYouProductGenerator,\n topProductGenerator,\n userId\n });\n }\n case \"past-purchases\": {\n return buildHybridCarouselInternal(logger, windowInfo, config, requestBids, generateProductCardResponse, request, {\n recommenderType: \"past-purchases\",\n pastPurchasesProductGenerator,\n topProductGenerator,\n userId\n });\n }\n }\n};\nvar buildHybridCarouselInternal = (logger, windowInfo, config, requestBids, generateProductCardResponse, request, recommenderType) => {\n const log2 = Ctx(logger)?.with(\"BuildHybridCarousel\");\n log2?.info(\"Building hybrid carousel\", request, recommenderType);\n return Ok({\n type: 3,\n getProduct: getNextHybridCarouselProduct.bind(undefined, log2, windowInfo, config, requestBids, generateProductCardResponse, request, recommenderType)\n });\n};\nasync function* getNextHybridCarouselProduct(logger, windowInfo, config, requestBids, generateProductCardResponse, request, recommenderType) {\n const log2 = Ctx(logger)?.with(\"getNextHybridCarouselProduct\");\n log2?.info(\"Entering hybrid carousel product generator\");\n yield* getNextSponsoredCarouselProduct(log2, requestBids, generateProductCardResponse, request);\n log2?.info(\"Done getting next sponsoredCarouselProduct\");\n yield* getNextRecommendedCarouselProduct(log2, windowInfo, config, recommenderType);\n}\nasync function* getNextSponsoredCarouselProduct(logger, requestBids, generateProductCardResponse, request) {\n const log2 = Ctx(logger)?.with(\"getNextSponsoredCarouselProduct\");\n try {\n log2?.info(\"Entering sponsored carousel product generator\");\n log2?.info(\"Getting next sponsored carousel products\", request);\n const response = await requestBids(request);\n if (!response.ok) {\n log2?.info(\"No response from bidder\", response.error);\n return;\n }\n const bids = response.value.seatbid?.[0]?.bid;\n if (bids === undefined) {\n log2?.info(\"Got no bids in response!\");\n return;\n }\n const generator = generateProductCardResponse(bids);\n for await (const product of generator) {\n log2?.debug(\"Getting next product from existing bidder response\", product);\n yield product;\n }\n log2?.debug(\"Out of bids from previous response. Requesting new bid response\");\n return;\n } catch (err) {\n log2?.error(\"product carousel generator failed! Got\", err);\n } finally {\n log2?.warn(\"Exiting carousel product generator\");\n }\n}\nasync function* getNextRecommendedCarouselProduct(logger, windowInfo, config, recommenderType) {\n const log2 = Ctx(logger)?.with(\"getNextRecommendedCarouselProduct\");\n log2?.info(\"Entering recommended carousel product generator\");\n log2?.info(\"Getting next recommended carousel product\");\n switch (recommenderType.recommenderType) {\n case \"top-products\": {\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, recommenderType);\n return;\n }\n case \"for-you\": {\n if (recommenderType.userId !== undefined) {\n yield* getNextForYouRecommendedCarouselProduct(log2, windowInfo, config, recommenderType, recommenderType.userId);\n }\n break;\n }\n case \"past-purchases\": {\n if (recommenderType.userId !== undefined) {\n yield* getNextPastPurchasesRecommendedCarouselProduct(log2, windowInfo, config, recommenderType, recommenderType.userId);\n }\n break;\n }\n }\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator: recommenderType.topProductGenerator\n });\n}\nasync function* getNextTopAllRecommendedCarouselProduct(logger, windowInfo, config, recommenderType) {\n const log2 = Ctx(logger)?.with(\"getNextTopAllRecommendedCarouselProduct\");\n log2?.info(\"Getting next top all product\");\n for await (const product of recommenderType.topProductGenerator()) {\n const built = recommendedProductToBuiltProduct(log2, windowInfo, config, product);\n if (!built.ok) {\n log2?.warn(\"Failed to build product response from recommended product. Skipping this one\", product);\n continue;\n }\n yield built.value;\n }\n}\nasync function* getNextForYouRecommendedCarouselProduct(logger, windowInfo, config, recommenderType, userId) {\n const log2 = Ctx(logger)?.with(\"getNextForYouRecommendedCarouselProduct\");\n log2?.info('Getting next \"for-you\" recommended product');\n for await (const product of recommenderType.forYouProductGenerator(userId)) {\n const built = recommendedProductToBuiltProduct(log2, windowInfo, config, product);\n if (!built.ok) {\n log2?.warn(\"Failed to build product response from recommended product. Skipping this one\", product);\n continue;\n }\n yield built.value;\n }\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator: recommenderType.topProductGenerator\n });\n}\nasync function* getNextPastPurchasesRecommendedCarouselProduct(logger, windowInfo, config, recommenderType, userId) {\n const log2 = Ctx(logger)?.with(\"getNextPastPurchasesRecommendedCarouselProduct\");\n log2?.info('Getting next \"buy-again\" recommended product');\n for await (const product of recommenderType.pastPurchasesProductGenerator(userId)) {\n const built = recommendedProductToBuiltProduct(log2, windowInfo, config, product);\n if (!built.ok) {\n log2?.warn(\"Failed to build product response from recommended product. Skipping this one\", product);\n continue;\n }\n yield built.value;\n }\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator: recommenderType.topProductGenerator\n });\n}\nvar recommendedProductToBuiltProduct = (logger, windowInfo, config, product) => {\n const log2 = Ctx(logger)?.with(\"recommendedProductToBuiltProduct\");\n log2?.info(\"Converting recommended product to built product card response\");\n const clickthrough = BuildClickthroughUrl(log2, windowInfo, config, product);\n if (!clickthrough.ok) {\n return clickthrough;\n }\n return Ok({\n type: 2,\n clickthrough: clickthrough.value + \"_recommended\",\n product,\n sponsored: false\n });\n};\nvar PROD_BIDDER = \"//bid.surfside.io\";\nvar PROD_CONFIGURATION_SERVICE = \"//r.surfside.io\";\nvar PROD_SPONSORED_PRODUCT_FEED = \"//creative.surfside.io\";\nvar PROD_RECOMMENDED_PRODUCT_FEED = \"//creative.surfside.io\";\nvar PROD_RECOMMENDER_SERVICE = \"//t.surfside.io\";\nvar TLS = (url) => \"https:\" + url;\nasync function InitSurfAdsCoreInternal(logger, requestBids, getConfiguration, getGeo, getDevice, getSponsoredProduct, getAllSponsoredProducts, getRecommendedProduct, generateTopProducts, generateForYou, generatePreviousPurchases, buildAllSponsoredProductCardResponses, generateSponsoredProductCardResponse, handlebars, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId) {\n const device = getDevice(screen, navigator2, mobile);\n const geo = await getGeo(ip, geoProviderToken);\n const configuration = await getConfiguration();\n if (!configuration.ok) {\n return Err(new MissingConfigurationError(accountId, siteId));\n }\n const startRequest = StartRequest.bind(undefined, logger, accountId, siteId, channelId, locationId, GetValue(device), GetValue(geo), userId);\n const startNative = StartNative.bind(undefined, logger);\n const defaultNative = DefaultNative.bind(undefined, logger);\n return Ok({\n logger,\n getDevice,\n device: GetValue(device),\n getGeo,\n geo: GetValue(geo),\n configuration: configuration.value,\n getConfiguration,\n handlebars,\n requestBids,\n startRequest,\n startNative,\n defaultNative,\n getSponsoredProduct,\n getAllSponsoredProducts,\n getRecommendedProduct,\n generateTopProducts,\n generateForYou,\n generatePreviousPurchases,\n buildAllSponsoredProductCardResponses,\n generateSponsoredProductCardResponse,\n buildSponsoredCarousel: BuildSponsoredCarousel.bind(undefined, logger, requestBids, generateSponsoredProductCardResponse),\n buildRecommendedCarousel: BuildRecommendedCarousel.bind(undefined, logger, windowInfo, configuration.value, generateTopProducts, generatePreviousPurchases, generateForYou, userId),\n buildHybridCarousel: BuildHybridCarousel.bind(undefined, logger, windowInfo, configuration.value, requestBids, generateSponsoredProductCardResponse, generateTopProducts, generatePreviousPurchases, generateForYou, userId)\n });\n}\nvar InitSurfAdsCoreServices = async (logger, bidderServiceUrl, configurationServiceUrl, productFeedUrl, recommendedProductFeedUrl, recommenderServiceUrl, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId) => {\n const handlebars = import_runtime.default.create();\n const recommendedProductFeed = GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId);\n const configurationService = GetConfiguration.bind(undefined, logger, configurationServiceUrl, handlebars, accountId, siteId);\n const configuration = await configurationService();\n if (!configuration.ok) {\n return configuration;\n }\n const getAllSponsoredProducts = GetAllSponsoredProducts.bind(undefined, logger, productFeedUrl, accountId, locationId);\n const generateProductCardResponse = GenerateSponsoredProductCardResponse.bind(undefined, logger, getAllSponsoredProducts, windowInfo, configuration.value);\n return await InitSurfAdsCoreInternal(logger, RequestBids.bind(undefined, logger, bidderServiceUrl, accountId, siteId, locationId, channelId), configurationService, GetGeo.bind(undefined, logger), GetDevice.bind(undefined, logger), GetSponsoredProduct.bind(undefined, logger, productFeedUrl, accountId, locationId), getAllSponsoredProducts, GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId), GenerateTopProducts.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId), GenerateForYou.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId, userId ?? \"undefined\"), GeneratePreviousPurchases.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId, userId ?? \"undefined\"), BuildAllSponsoredProductCardResponses.bind(undefined, logger, getAllSponsoredProducts, windowInfo, configuration.value), generateProductCardResponse, handlebars, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);\n};\nvar InitSurfAdsCoreSSR = async (windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId, logger) => InitSurfAdsCoreServices(logger, TLS(PROD_BIDDER), TLS(PROD_CONFIGURATION_SERVICE), TLS(PROD_SPONSORED_PRODUCT_FEED), TLS(PROD_RECOMMENDED_PRODUCT_FEED), TLS(PROD_RECOMMENDER_SERVICE), windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);\nvar InitSurfAdsCore = async (accountId, siteId, channelId, locationId, userId, logger) => {\n const windowInfo = GetWindowInfo();\n if (!windowInfo.ok) {\n return windowInfo;\n }\n return InitSurfAdsCoreServices(logger, TLS(PROD_BIDDER), TLS(PROD_CONFIGURATION_SERVICE), TLS(PROD_SPONSORED_PRODUCT_FEED), TLS(PROD_RECOMMENDED_PRODUCT_FEED), TLS(PROD_RECOMMENDER_SERVICE), windowInfo.value, window.screen, window.navigator, isMobile(), undefined, undefined, accountId, siteId, channelId, locationId, userId);\n};\n\nclass MissingConfigurationError extends Error {\n constructor(accountId, siteId) {\n super(`Missing configuration for\n accountId: ${accountId}\n siteId: ${siteId}\n1. Check to make sure that these are the correct values for each field2. Check your publisher configuration at https://app.surfside.io/inventory/sites/publisher/${accountId}/${siteId}`);\n }\n}\n\nclass NotABrowserError extends Error {\n constructor() {\n super(`You are not running Surfside Ads Core in a Web browser, so you cannot use \"InitSurfAdsCore\". Instead, use InitSurfAdsCoreSSR, and pass the user's screen, navigator, and IP address explicitly so that Surfside Ads Core can initialize geo and device information services. e.g: \n InitSurfAdsCoreSSR(\n /* width and height of the user's screen: */\n { width: screenWidth, height: screenHeight },\n /* userAgent string and language of the user: */\n { userAgent: userAgent, language: userLanguage },\n /* whether the user is on mobile or not: */\n true,\n /* the requesting User's IP */\n request.ipAddress,\n /* Your API Token for the Surfside Geo Service: */\n geoProviderToken,\n accountId,\n siteId,\n channelId,\n locationId,\n userId,\n /* Optional logger: */\n logger\n )`);\n }\n}\nvar isMobile = () => typeof window !== \"undefined\" ? window.ontouchstart !== undefined : false;\nvar GetWindowInfo = () => {\n if (typeof window === \"undefined\") {\n return Err(new NotABrowserError);\n }\n return Ok({\n origin: window.location.origin,\n port: window.location.port,\n path: \"/\" + window.location.pathname.split(\"/\").filter((part) => part.length > 0).join(\"/\"),\n host: window.location.host,\n host_name: window.location.hostname,\n search: window.location.search,\n hash: window.location.hash,\n protocol: window.location.protocol\n });\n};\nconsole.log(\"test?!1!\");\n\n// src/helpers/response/Banner.ts\nvar BuildBannerResponse = (logger, windowInfo, config, bid) => {\n const log2 = Ctx(logger)?.with(\"BuildBannerResponse\");\n log2?.info(\"Building banner response\");\n log2?.debug(bid);\n const adm = bid?.adm;\n if (adm === undefined || adm === null) {\n return Err(new MissingAdmError(bid ?? null));\n }\n const parser = new DOMParser;\n const admDoc = parser.parseFromString(adm, \"text/html\");\n const dataTag = admDoc.getElementById(\"surf-product-info\");\n admDoc.childNodes.forEach((child) => log2?.debug(child.outerHTML));\n const productData = getProductInfoFromDivTag(log2, dataTag, bid);\n const clickthrough = buildBidderClickCallback(log2, windowInfo, config, GetValue(productData), admDoc);\n if (!clickthrough.ok) {\n log2?.error(\"Failed to build banner\", clickthrough.error);\n return clickthrough;\n }\n const serializer = new XMLSerializer;\n const html = serializer.serializeToString(admDoc);\n return Ok({\n type: 0,\n adm: html,\n clickthrough: clickthrough.value,\n bid\n });\n};\nvar buildBidderClickCallback = (logger, windowInfo, configuration, productData, document) => {\n const log2 = Ctx(logger)?.with(\"buildBidderClickCallback\");\n log2?.info(\"Building bidder click callback\");\n const bidderClickCallbackUrlAnchors = document.querySelectorAll(\"a[href*=\\\\{SURF_COMMERCE_URL\\\\}]\");\n if (bidderClickCallbackUrlAnchors.length > 0) {\n if (productData === undefined) {\n log2?.error(\"The banner had {SURF_COMMERCE_URL} in its clickthrough link, so it is expecting a rendered \" + \"clickthrough URL, but there was no product info provided. Therefore, the banner cannot be rendered, \" + \"or else it might redirect to an invalid page\");\n return Err(new MissingProductInfoError);\n }\n const clickthrough = BuildClickthroughUrl(log2, windowInfo, configuration, productData);\n if (clickthrough.ok === false) {\n log2?.error(\"The banner had {SURF_COMMERCE_URL} in its clickthrough link, so it is expecting a rendered \" + \"clickthrough URL, but the clickthrough failed to render. Therefore, the banner cannot be rendered, \" + \"or else it might redirect to an invalid page\", clickthrough.error);\n return clickthrough;\n }\n bidderClickCallbackUrlAnchors.forEach((a) => {\n const href = a.getAttribute(\"href\");\n if (href === null) {\n return;\n }\n const finalClick = href.replace(\"{SURF_COMMERCE_URL}\", clickthrough.value);\n a.setAttribute(\"href\", finalClick);\n });\n return Ok(clickthrough.value);\n }\n return Ok(undefined);\n};\nvar getProductInfoFromDivTag = (logger, div, bid) => {\n const log2 = Ctx(logger)?.with(\"getProductInfoFromDivTag\");\n log2?.info(\"Getting product info for banner\");\n if (div === null) {\n log2?.warn(\"No product data for banner in div tag\");\n return Err(new MissingProductInfoError);\n }\n const {\n image,\n price,\n saleprice,\n thc,\n strain,\n cbd,\n name,\n brandname,\n producttype,\n details,\n cta,\n clickthroughurl,\n winurl,\n pixelurl\n } = div.dataset;\n log2?.debug(\"Brand Name:\" + brandname + `\nProduct Type` + producttype);\n if (brandname === undefined) {\n log2?.warn(\"Missing brand name field in banner creative. The brand name was probably not set on the banner. \" + \"Technically, this isn't an *error*, but almost all banner creatives rely on brand info, so the \" + \"banner probably isn't working. CHECK THE CREATIVE. Banner ID is: \" + bid.crid);\n }\n const productData = {\n image,\n price,\n salePrice: saleprice,\n thc,\n strain,\n cbd,\n name,\n brand_name: brandname,\n brandName: brandname,\n productType: producttype,\n details,\n cta,\n clickthroughUrl: clickthroughurl,\n winurl,\n pixelurl\n };\n if (Object.keys(productData).length === 0) {\n return Err(new MissingProductInfoError);\n }\n return Ok(productData);\n};\n\nclass MissingProductInfoError extends Error {\n constructor() {\n super(\"Missing product info in banner\");\n }\n}\n// src/helpers/response/Video.ts\nvar BuildVideoResponse = (logger, windowInfo, configuration, bid) => {\n const log2 = Ctx(logger)?.with(\"BuildVideoResponse\");\n log2?.info(\"Building video response\");\n const video = DeserializeVideo(logger, bid);\n if (!video.ok) {\n return video;\n }\n const creative = video.value.ads[0]?.inline.creatives?.[0];\n if (creative === undefined) {\n return Err(new MissingCreativeError(video.value));\n }\n const clickthrough = creative.videoClicks[0]?.url;\n if (clickthrough === undefined) {\n return Err(new MissingClickthroughUrlError(video.value));\n }\n if (clickthrough === \"{SURF_COMMERCE_URL}\") {\n const product = getProductInfoFromVast(log2, video.value, bid);\n if (!product.ok) {\n return product;\n }\n const clickthrough2 = BuildClickthroughUrl(log2, windowInfo, configuration, product.value);\n if (!clickthrough2.ok) {\n return clickthrough2;\n }\n return Ok({\n clickthrough: clickthrough2.value,\n video: video.value,\n bid,\n type: 1\n });\n }\n return Ok({\n clickthrough,\n video: video.value,\n bid,\n type: 1\n });\n};\nvar getProductInfoFromVast = (logger, vast, bid) => {\n const log2 = Ctx(logger)?.with(\"getProductInfoFromVast\");\n log2?.info(\"Getting product info from vast\");\n log2?.debug(vast);\n const product = vast.ads[0]?.inline.product;\n if (product === undefined || Object.keys(product).length === 0) {\n log2?.error(\"Missing product info from vast\");\n return Err(new MissingProductError(bid));\n }\n log2?.debug(product);\n if (product.brandName === undefined || product.brand_name === undefined) {\n log2?.warn(\"Missing brand name field in banner creative. The brand name was probably not set on the banner. \" + \"Technically, this isn't an *error*, but almost all banner creatives rely on brand info, so the \" + \"banner probably isn't working. CHECK THE CREATIVE. Banner ID is: \" + bid.crid);\n }\n return Ok(product);\n};\nvar getChild = (logger, element, tagName) => {\n const log2 = Ctx(logger)?.with(\"getChildOrThrow\");\n log2?.debug(\"name\", tagName);\n const child = element.querySelector(tagName);\n if (child === null) {\n return Err(new MissingChildTagError(element, tagName));\n }\n log2?.debug(\"child \" + tagName, child);\n return Ok(child);\n};\nvar getTextContent = (logger, element, tagName) => {\n const log2 = Ctx(logger)?.with(\"getTextContent\");\n log2?.info(\"Getting text content for \", tagName);\n if (tagName !== undefined) {\n const child = getChild(log2, element, tagName);\n if (!child.ok) {\n return child;\n }\n const text = child.value.textContent;\n if (text === null) {\n return Err(new MissingTextContentError(element, tagName));\n }\n return Ok(text);\n } else {\n const text = element.textContent;\n if (text === null) {\n return Err(new MissingTextContentError(element, element.tagName));\n }\n return Ok(text);\n }\n};\nvar getAttribute = (logger, element, attributeName) => {\n const log2 = Ctx(logger)?.with(\"getAttribute\");\n log2?.debug(\"name\", attributeName);\n const attribute = element.getAttribute(attributeName);\n if (attribute === null) {\n return Err(new MissingAttributeError(element, attributeName));\n }\n log2?.debug(\"attribute \" + attributeName, attribute);\n return Ok(attribute);\n};\nvar getNumber = (logger, element, attributeName) => {\n const log2 = Ctx(logger)?.with(\"getNumber\");\n const num = getAttribute(log2, element, attributeName);\n if (!num.ok) {\n return num;\n }\n const parsed = Number(num.value);\n if (isNaN(parsed)) {\n log2?.debug(\"Attribute was not a number\", element.tagName, attributeName);\n return Err(new NotANumberError(element, attributeName));\n }\n return Ok(parsed);\n};\nvar DeserializeVideo = (logger, bid) => {\n const log2 = Ctx(logger)?.with(\"DeserializeVideo\");\n const adm = bid.adm;\n if (adm === undefined) {\n return Err(new MissingAdmError(bid));\n }\n return DeserializeVast(log2, adm);\n};\nfunction DeserializeVast(logger, adm) {\n const log2 = Ctx(logger)?.with(\"DeserializeVast\");\n log2?.debug(\"adm\", adm);\n const doc = new DOMParser().parseFromString(adm, \"text/xml\");\n log2?.debug(\"doc\", doc);\n const root = doc.querySelector(\"VAST\");\n if (root === null) {\n return Err(new MissingChildTagError(undefined, \"VAST\"));\n }\n log2?.debug(\"root\", root);\n const version = getAttribute(log2, root, \"version\");\n if (!version.ok) {\n return version;\n }\n const ads = AllOrNone(Array.from(root.querySelectorAll(\"Ad\")).map(deserializeAd.bind(undefined, log2)));\n if (!ads.ok) {\n return ads;\n }\n return Ok({\n version: version.value,\n ads: ads.value\n });\n}\nfunction deserializeAd(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeAd\");\n log2?.debug(\"element\", element);\n const id = GetValue(getAttribute(log2, element, \"id\"));\n const inlineElement = getChild(log2, element, \"InLine\");\n if (!inlineElement.ok) {\n return inlineElement;\n }\n const inline = deserializeInline(log2, inlineElement.value);\n if (!inline.ok) {\n return inline;\n }\n return Ok({\n id,\n inline: inline.value\n });\n}\nfunction deserializeInline(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeInline\");\n log2?.debug(\"element\", element);\n const adSystem = getTextContent(log2, element, \"AdSystem\");\n const adTitle = getTextContent(log2, element, \"AdTitle\");\n const impressionElement = getChild(log2, element, \"Impression\");\n if (!impressionElement.ok) {\n return impressionElement;\n }\n const impression = deserializeImpression(log2, impressionElement.value);\n const creatives = Array.from(element.querySelectorAll(\"Linear\")).map(deserializeLinear.bind(null, log2));\n const extensions = Array.from(element.querySelectorAll(\"Extensions Extension\"));\n const productExtension = extensions[0];\n const product = productExtension === undefined ? undefined : {\n image: GetValue(getTextContent(log2, productExtension, \"Image\")),\n price: GetValue(getTextContent(log2, productExtension, \"Price\")),\n salePrice: GetValue(getTextContent(log2, productExtension, \"SalePrice\")),\n thc: GetValue(getTextContent(log2, productExtension, \"THC\")),\n strain: GetValue(getTextContent(log2, productExtension, \"Strain\")),\n cbd: GetValue(getTextContent(log2, productExtension, \"CBD\")),\n name: GetValue(getTextContent(log2, productExtension, \"Name\")),\n brandName: GetValue(getTextContent(log2, productExtension, \"BrandName\")),\n productType: GetValue(getTextContent(log2, productExtension, \"ProductType\")),\n details: GetValue(getTextContent(log2, productExtension, \"Details\")),\n cta: GetValue(getTextContent(log2, productExtension, \"CTA\"))\n };\n if (!impression.ok) {\n return impression;\n }\n if (!adSystem.ok) {\n return adSystem;\n }\n if (!adTitle.ok) {\n return adTitle;\n }\n const creativeResults = AllOrNone(creatives);\n if (!creativeResults.ok) {\n return creativeResults;\n }\n return Ok({\n impression: impression.value,\n adSystem: adSystem.value,\n adTitle: adTitle.value,\n creatives,\n product\n });\n}\nfunction deserializeImpression(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeImpression\");\n log2?.debug(\"element\", element);\n const id = getAttribute(log2, element, \"id\");\n if (!id.ok) {\n return id;\n }\n const value = getTextContent(log2, element);\n if (!value.ok) {\n return value;\n }\n log2?.debug(\"value\", value);\n return Ok({\n id: id.value,\n value: value.value\n });\n}\nfunction deserializeLinear(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeLinear\");\n log2?.debug(\"element\", element);\n const duration = getTextContent(log2, element, \"Duration\");\n if (!duration.ok) {\n return duration;\n }\n log2?.debug(\"deserializeLinear duration\", duration.value);\n const trackingEvents = AllOrNone(Array.from(element.querySelectorAll(\"TrackingEvents Tracking\")).map(deserializeTrackingEvent.bind(null, logger)));\n log2?.debug(\"deserializeLinear trackingEvents\", trackingEvents);\n const mediaFiles = AllOrNone(Array.from(element.querySelectorAll(\"MediaFiles MediaFile\")).map(deserializeMediaFile.bind(null, logger)));\n log2?.debug(\"deserializeLinear mediaFiles\", mediaFiles);\n const videoClicks = AllOrNone(Array.from(element.querySelectorAll(\"VideoClicks ClickThrough\")).map(deserializeVideoClick.bind(null, logger)));\n log2?.debug(\"deserializeLinear videoClicks\", videoClicks);\n if (!trackingEvents.ok) {\n return trackingEvents;\n }\n if (!mediaFiles.ok) {\n return mediaFiles;\n }\n if (!videoClicks.ok) {\n return videoClicks;\n }\n return Ok({\n duration: duration.value,\n trackingEvents: trackingEvents.value,\n mediaFiles: mediaFiles.value,\n videoClicks: videoClicks.value\n });\n}\nfunction deserializeTrackingEvent(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeTrackingEvent\");\n log2?.debug(\"element\", element);\n const event = getAttribute(log2, element, \"event\");\n if (!event.ok) {\n return event;\n }\n const url = getTextContent(log2, element);\n if (!url.ok) {\n return url;\n }\n log2?.debug(\"url\", url);\n return Ok({\n event: event.value,\n url: url.value\n });\n}\nfunction deserializeMediaFile(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeMediaFile\");\n log2?.debug(\"element\", element);\n const id = GetValue(getAttribute(log2, element, \"id\"));\n const bitrate = GetValue(getAttribute(log2, element, \"bitrate\"));\n log2?.debug(\"id\", id);\n const delivery = getAttribute(log2, element, \"delivery\");\n const type = getAttribute(log2, element, \"type\");\n const width = getNumber(log2, element, \"width\");\n const height = getNumber(log2, element, \"height\");\n const url = getTextContent(log2, element);\n const [failed, errors] = AnyFailed(delivery, type, width, height, url);\n if (failed) {\n return Err(new MultipleErrorsError(errors));\n }\n log2?.debug(\"url\", url);\n return Ok({\n id,\n bitrate,\n delivery: AssertValue(delivery),\n type: AssertValue(type),\n width: AssertValue(width),\n height: AssertValue(height),\n url: AssertValue(url)\n });\n}\nfunction deserializeVideoClick(logger, element) {\n const log2 = Ctx(logger)?.with(\"deserializeVideoClick\");\n log2?.debug(\"element\", element);\n const id = GetValue(getAttribute(log2, element, \"id\"));\n log2?.debug(\"id\", id);\n const url = getTextContent(log2, element);\n if (!url.ok) {\n return url;\n }\n log2?.debug(\"url\", url);\n return Ok({\n id,\n url: url.value\n });\n}\n\nclass MissingChildTagError extends Error {\n element;\n tagName;\n constructor(element, tagName) {\n super(`Missing child tag '${tagName}' in parent element '${element?.tagName ?? \"document\"}'`);\n this.element = element;\n this.tagName = tagName;\n }\n}\n\nclass MissingAttributeError extends Error {\n element;\n attributeName;\n constructor(element, attributeName) {\n super(`Missing attribute '${attributeName}' in element '${element.tagName}`);\n this.element = element;\n this.attributeName = attributeName;\n }\n}\n\nclass NotANumberError extends Error {\n element;\n attributeName;\n constructor(element, attributeName) {\n super(`Attribute '${attributeName}' on element '${element.tagName}' is not a numer`);\n this.element = element;\n this.attributeName = attributeName;\n }\n}\n\nclass MissingTextContentError extends Error {\n element;\n attributeName;\n constructor(element, attributeName) {\n super(`Missing text content on attribute '${attributeName}' on element '${element.tagName}'`);\n this.element = element;\n this.attributeName = attributeName;\n }\n}\n\nclass MissingCreativeError extends Error {\n vast;\n constructor(vast) {\n super(\"Vast video was missing creative\");\n this.vast = vast;\n }\n}\n\nclass MissingClickthroughUrlError extends Error {\n vast;\n constructor(vast) {\n super(\"Vast video was missing clickthrough URL\");\n this.vast = vast;\n }\n}\n// src/helpers/response/BuildAll.ts\nvar BuildAllResponses = async (logger, buildBannerResponse, buildVideoResponse, buildAllProductCardResponses, request, response) => {\n const log2 = Ctx(logger)?.with(\"BuildAllResponses\");\n log2?.info(\"Building all bid responses\");\n log2?.debug(request, response);\n const bannerRequestIds = request.imp.filter((imp) => imp.banner !== undefined).map((imp) => imp.id);\n const videoRequestIds = request.imp.filter((imp) => imp.video !== undefined).map((imp) => imp.id);\n const nativeRequestIds = request.imp.filter((imp) => imp.native !== undefined).map((imp) => imp.id);\n log2?.debug(bannerRequestIds, videoRequestIds, nativeRequestIds);\n const bannerBids = response.seatbid?.[0]?.bid.filter((bid) => bannerRequestIds.includes(bid.impid)) ?? [];\n const videoBids = response.seatbid?.[0]?.bid.filter((bid) => videoRequestIds.includes(bid.impid)) ?? [];\n const nativeBids = response.seatbid?.[0]?.bid.filter((bid) => nativeRequestIds.includes(bid.impid)) ?? [];\n log2?.debug(bannerBids, videoBids, nativeBids);\n return Ok({\n banners: ValueOr(AllOrNone(bannerBids.map(buildBannerResponse)), []),\n videos: ValueOr(AllOrNone(videoBids.map(buildVideoResponse)), []),\n productCards: ValueOr(await buildAllProductCardResponses(nativeBids), [])\n });\n};\nvar GenerateAllResponses = async (logger, buildBannerResponse, buildVideoResponse, buildProductCard, request, response) => {\n const log2 = Ctx(logger)?.with(\"GenerateAllResponses\");\n log2?.info(\"Generating all responses\");\n log2?.debug(request, response);\n const bannerRequestIds = request.imp.filter((imp) => imp.banner !== undefined).map((imp) => imp.id);\n const videoRequestIds = request.imp.filter((imp) => imp.video !== undefined).map((imp) => imp.id);\n const nativeRequestIds = request.imp.filter((imp) => imp.native !== undefined).map((imp) => imp.id);\n log2?.debug(bannerRequestIds, videoRequestIds, nativeRequestIds);\n const bannerBids = response.seatbid?.[0]?.bid.filter((bid) => bannerRequestIds.includes(bid.impid)) ?? [];\n const videoBids = response.seatbid?.[0]?.bid.filter((bid) => videoRequestIds.includes(bid.impid)) ?? [];\n const nativeBids = response.seatbid?.[0]?.bid.filter((bid) => nativeRequestIds.includes(bid.impid)) ?? [];\n log2?.debug(bannerBids, videoBids, nativeBids);\n return Ok({\n banners: ValueOr(AllOrNone(bannerBids.map(buildBannerResponse)), []),\n videos: ValueOr(AllOrNone(videoBids.map(buildVideoResponse)), []),\n productCards: GetValue(await buildProductCard(nativeBids))\n });\n};\n// src/index.ts\nvar TLS2 = (url) => \"https:\" + url;\nvar InitSurfAdsCoreClientInternal = async (logger, requestBids, getConfiguration, getGeo, getDevice, getSponsoredProduct, getAllSponsoredProducts, getRecommendedProduct, generateTopProducts, generateForYou, generatePreviousPurchases, buildAllProductCardResponses, generateProductCardResponse, buildBannerResponse, buildVideoResponse, buildAllResponses, generateAllResponses, handlebars, screen, navigator2, mobile, ip, geoProviderToken, windowInfo, accountId, siteId, channelId, locationId, userId) => {\n const apiRes = await InitSurfAdsCoreInternal(logger, requestBids, getConfiguration, getGeo, getDevice, getSponsoredProduct, getAllSponsoredProducts, getRecommendedProduct, generateTopProducts, generateForYou, generatePreviousPurchases, buildAllProductCardResponses, generateProductCardResponse, handlebars, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);\n if (!apiRes.ok) {\n return apiRes;\n }\n return Ok({\n ...apiRes.value,\n buildBannerResponse,\n buildVideoResponse,\n buildAllResponses,\n generateAllResponses\n });\n};\nvar InitSurfAdsCoreClientServices = async (logger, bidderServiceUrl, configurationServiceUrl, productFeedUrl, recommendedProductFeedUrl, recommenderServiceUrl, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId) => {\n const apiRes = await InitSurfAdsCoreServices(logger, bidderServiceUrl, configurationServiceUrl, productFeedUrl, recommendedProductFeedUrl, recommenderServiceUrl, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);\n if (!apiRes.ok) {\n return apiRes;\n }\n const api = apiRes.value;\n const buildBannerResponse = BuildBannerResponse.bind(undefined, logger, windowInfo, api.configuration);\n const buildVideoResponse = BuildVideoResponse.bind(undefined, logger, windowInfo, api.configuration);\n return InitSurfAdsCoreClientInternal(logger, api.requestBids, api.getConfiguration, api.getGeo, api.getDevice, api.getSponsoredProduct, api.getAllSponsoredProducts, api.getRecommendedProduct, api.generateTopProducts, api.generateForYou, api.generatePreviousPurchases, api.buildAllSponsoredProductCardResponses, api.generateSponsoredProductCardResponse, buildBannerResponse, buildVideoResponse, BuildAllResponses.bind(undefined, logger, buildBannerResponse, buildVideoResponse, api.buildAllSponsoredProductCardResponses), GenerateAllResponses.bind(undefined, logger, buildBannerResponse, buildVideoResponse, api.buildAllSponsoredProductCardResponses), api.handlebars, screen, navigator2, mobile, ip, geoProviderToken, windowInfo, accountId, siteId, channelId, locationId, userId);\n};\nvar InitSurfAdsCoreClient = async (accountId, siteId, channelId, locationId, userId, logger) => {\n const windowInfo = GetWindowInfo();\n if (!windowInfo.ok) {\n return windowInfo;\n }\n return InitSurfAdsCoreClientServices(logger, TLS2(PROD_BIDDER), TLS2(PROD_CONFIGURATION_SERVICE), TLS2(PROD_SPONSORED_PRODUCT_FEED), TLS2(PROD_RECOMMENDED_PRODUCT_FEED), TLS2(PROD_RECOMMENDER_SERVICE), windowInfo.value, window.screen, window.navigator, isMobile2(), undefined, undefined, accountId, siteId, channelId, locationId, userId);\n};\nvar isMobile2 = () => typeof window !== \"undefined\" ? window.ontouchstart !== undefined : false;\nexport {\n uri,\n slug,\n sed,\n search,\n path,\n or,\n lower,\n join,\n isIn,\n getProductInfoFromDivTag,\n eq,\n coalesce,\n array,\n and,\n VideoMimes,\n ValueOr,\n UnknownBidderError,\n TryGet,\n TryDo,\n StartRequest,\n StartNative,\n Some,\n ResultStream,\n RequestBids,\n PlacementTypes,\n Pipe,\n PROD_SPONSORED_PRODUCT_FEED,\n PROD_RECOMMENDER_SERVICE,\n PROD_RECOMMENDED_PRODUCT_FEED,\n PROD_CONFIGURATION_SERVICE,\n PROD_BIDDER,\n Ok,\n NotANumberError,\n NotABrowserError,\n NoNativeError,\n NoBidsError,\n NativeResponseToProductInformation,\n NativePosition,\n NativeImageTypes,\n NativeDataTypes,\n NativeAssetId,\n MultipleErrorsError,\n MissingWinUrlError,\n MissingTextContentError,\n MissingProductInfoError,\n MissingProductIdError,\n MissingProductError,\n MissingCreativeError,\n MissingConfigurationError,\n MissingClickthroughUrlError,\n MissingChildTagError,\n MissingBidsError,\n MissingAttributeError,\n MissingAdmError,\n MalformedNativeResponseError,\n MalformedBidResponseError,\n InternalServerError,\n InitSurfAdsCoreServices,\n InitSurfAdsCoreSSR,\n InitSurfAdsCoreInternal,\n InitSurfAdsCoreClientServices,\n InitSurfAdsCoreClientInternal,\n InitSurfAdsCoreClient,\n InitSurfAdsCore,\n InitLogger,\n GetWindowInfo,\n GetValueOrThrow,\n GetValue,\n GetSponsoredProduct,\n GetRecommendedProduct,\n GetHelpers,\n GetGeo,\n GetDevice,\n GetConfiguration,\n GetAllSponsoredProducts,\n GeoContextToORTB,\n GenerateTopProducts,\n GenerateSponsoredProductCardResponse,\n GeneratePreviousPurchases,\n GenerateForYou,\n GenerateArray,\n GenerateAllResponses,\n Filter,\n EventTypes,\n EventTrackingMethods,\n Err,\n DeserializeVideo,\n DeserializeVast,\n DefaultNative,\n Ctx,\n CreativeType,\n ContextTypes,\n ContextSubTypes,\n ConsumeNAsync,\n ConsumeN,\n ConsumeAllAsync,\n ConsumeAll,\n BuildVideoResponse,\n BuildClickthroughUrl,\n BuildBannerResponse,\n BuildAllSponsoredProductCardResponses,\n BuildAllResponses,\n BidderStartingUpError,\n AsyncPipe,\n AssertValue,\n AnyFailed,\n AllOrNone,\n AgentTypes,\n AdCom10DeviceTypes\n};\n\n//# debugId=255763F5FC6772ED64756E2164756E21\n//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vQHN1cmZzaWRlLWFkcy1jb3JlL2xpYi9lc20vaW5kZXguanMiLCAiLi4vLi4vc3JjL2hlbHBlcnMvcmVzcG9uc2UvQmFubmVyLnRzIiwgIi4uLy4uL3NyYy9oZWxwZXJzL3Jlc3BvbnNlL1ZpZGVvLnRzIiwgIi4uLy4uL3NyYy9oZWxwZXJzL3Jlc3BvbnNlL0J1aWxkQWxsLnRzIiwgIi4uLy4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJ2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xudmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+IHtcbiAgdGFyZ2V0ID0gbW9kICE9IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fTtcbiAgY29uc3QgdG8gPSBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldDtcbiAgZm9yIChsZXQga2V5IG9mIF9fZ2V0T3duUHJvcE5hbWVzKG1vZCkpXG4gICAgaWYgKCFfX2hhc093blByb3AuY2FsbCh0bywga2V5KSlcbiAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7XG4gICAgICAgIGdldDogKCkgPT4gbW9kW2tleV0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICByZXR1cm4gdG87XG59O1xudmFyIF9fY29tbW9uSlMgPSAoY2IsIG1vZCkgPT4gKCkgPT4gKG1vZCB8fCBjYigobW9kID0geyBleHBvcnRzOiB7fSB9KS5leHBvcnRzLCBtb2QpLCBtb2QuZXhwb3J0cyk7XG5cbi8vIC4uLy4uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvdXRpbHMuanNcbnZhciByZXF1aXJlX3V0aWxzID0gX19jb21tb25KUygoZXhwb3J0cykgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbiAgZXhwb3J0cy5pbmRleE9mID0gaW5kZXhPZjtcbiAgZXhwb3J0cy5lc2NhcGVFeHByZXNzaW9uID0gZXNjYXBlRXhwcmVzc2lvbjtcbiAgZXhwb3J0cy5pc0VtcHR5ID0gaXNFbXB0eTtcbiAgZXhwb3J0cy5jcmVhdGVGcmFtZSA9IGNyZWF0ZUZyYW1lO1xuICBleHBvcnRzLmJsb2NrUGFyYW1zID0gYmxvY2tQYXJhbXM7XG4gIGV4cG9ydHMuYXBwZW5kQ29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aDtcbiAgdmFyIGVzY2FwZSA9IHtcbiAgICBcIiZcIjogXCImYW1wO1wiLFxuICAgIFwiPFwiOiBcIiZsdDtcIixcbiAgICBcIj5cIjogXCImZ3Q7XCIsXG4gICAgJ1wiJzogXCImcXVvdDtcIixcbiAgICBcIidcIjogXCImI3gyNztcIixcbiAgICBcImBcIjogXCImI3g2MDtcIixcbiAgICBcIj1cIjogXCImI3gzRDtcIlxuICB9O1xuICB2YXIgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nO1xuICB2YXIgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG4gIGZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gICAgcmV0dXJuIGVzY2FwZVtjaHJdO1xuICB9XG4gIGZ1bmN0aW9uIGV4dGVuZChvYmopIHtcbiAgICBmb3IgKHZhciBpID0gMTtpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBrZXkgaW4gYXJndW1lbnRzW2ldKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIGV4cG9ydHMudG9TdHJpbmcgPSB0b1N0cmluZztcbiAgdmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xuICB9O1xuICBpZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gICAgZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBGdW5jdGlvbl1cIjtcbiAgICB9O1xuICB9XG4gIGV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IEFycmF5XVwiIDogZmFsc2U7XG4gIH07XG4gIGV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG4gIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXkyLCB2YWx1ZSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcnJheTIubGVuZ3RoO2kgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGFycmF5MltpXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuICBmdW5jdGlvbiBlc2NhcGVFeHByZXNzaW9uKHN0cmluZykge1xuICAgIGlmICh0eXBlb2Ygc3RyaW5nICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaW5nID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZyArIFwiXCI7XG4gICAgICB9XG4gICAgICBzdHJpbmcgPSBcIlwiICsgc3RyaW5nO1xuICAgIH1cbiAgICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbiAgfVxuICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICAgIHZhciBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgICBmcmFtZS5fcGFyZW50ID0gb2JqZWN0O1xuICAgIHJldHVybiBmcmFtZTtcbiAgfVxuICBmdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICAgIHBhcmFtcy5wYXRoID0gaWRzO1xuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cbiAgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gICAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgXCIuXCIgOiBcIlwiKSArIGlkO1xuICB9XG59KTtcblxuLy8gLi4vLi4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9leGNlcHRpb24uanNcbnZhciByZXF1aXJlX2V4Y2VwdGlvbiA9IF9fY29tbW9uSlMoKGV4cG9ydHMsIG1vZHVsZSkgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICB2YXIgZXJyb3JQcm9wcyA9IFtcImRlc2NyaXB0aW9uXCIsIFwiZmlsZU5hbWVcIiwgXCJsaW5lTnVtYmVyXCIsIFwiZW5kTGluZU51bWJlclwiLCBcIm1lc3NhZ2VcIiwgXCJuYW1lXCIsIFwibnVtYmVyXCIsIFwic3RhY2tcIl07XG4gIGZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gICAgdmFyIGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsIGxpbmUgPSB1bmRlZmluZWQsIGVuZExpbmVOdW1iZXIgPSB1bmRlZmluZWQsIGNvbHVtbiA9IHVuZGVmaW5lZCwgZW5kQ29sdW1uID0gdW5kZWZpbmVkO1xuICAgIGlmIChsb2MpIHtcbiAgICAgIGxpbmUgPSBsb2Muc3RhcnQubGluZTtcbiAgICAgIGVuZExpbmVOdW1iZXIgPSBsb2MuZW5kLmxpbmU7XG4gICAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgICAgZW5kQ29sdW1uID0gbG9jLmVuZC5jb2x1bW47XG4gICAgICBtZXNzYWdlICs9IFwiIC0gXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW47XG4gICAgfVxuICAgIHZhciB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcbiAgICBmb3IgKHZhciBpZHggPSAwO2lkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gICAgfVxuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGlmIChsb2MpIHtcbiAgICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgICAgdGhpcy5lbmRMaW5lTnVtYmVyID0gZW5kTGluZU51bWJlcjtcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImNvbHVtblwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogY29sdW1uLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcImVuZENvbHVtblwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAobm9wKSB7fVxuICB9XG4gIEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG4gIGV4cG9ydHMuZGVmYXVsdCA9IEV4Y2VwdGlvbjtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanNcbnZhciByZXF1aXJlX2Jsb2NrX2hlbHBlcl9taXNzaW5nID0gX19jb21tb25KUygoZXhwb3J0cywgbW9kdWxlKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIHZhciBfdXRpbHMgPSByZXF1aXJlX3V0aWxzKCk7XG4gIGV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoXCJibG9ja0hlbHBlck1pc3NpbmdcIiwgZnVuY3Rpb24oY29udGV4dDIsIG9wdGlvbnMpIHtcbiAgICAgIHZhciB7IGludmVyc2UsIGZuIH0gPSBvcHRpb25zO1xuICAgICAgaWYgKGNvbnRleHQyID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBmbih0aGlzKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dDIgPT09IGZhbHNlIHx8IGNvbnRleHQyID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7XG4gICAgICB9IGVsc2UgaWYgKF91dGlscy5pc0FycmF5KGNvbnRleHQyKSkge1xuICAgICAgICBpZiAoY29udGV4dDIubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChvcHRpb25zLmlkcykge1xuICAgICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0Miwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGludmVyc2UodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBfdXRpbHMuYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLm5hbWUpO1xuICAgICAgICAgIG9wdGlvbnMgPSB7IGRhdGEgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4oY29udGV4dDIsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdO1xufSk7XG5cbi8vIC4uLy4uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9lYWNoLmpzXG52YXIgcmVxdWlyZV9lYWNoID0gX19jb21tb25KUygoZXhwb3J0cywgbW9kdWxlKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gIH1cbiAgdmFyIF91dGlscyA9IHJlcXVpcmVfdXRpbHMoKTtcbiAgdmFyIF9leGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpO1xuICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKFwiZWFjaFwiLCBmdW5jdGlvbihjb250ZXh0Miwgb3B0aW9ucykge1xuICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oXCJNdXN0IHBhc3MgaXRlcmF0b3IgdG8gI2VhY2hcIik7XG4gICAgICB9XG4gICAgICB2YXIgeyBmbiwgaW52ZXJzZSB9ID0gb3B0aW9ucywgaSA9IDAsIHJldCA9IFwiXCIsIGRhdGEgPSB1bmRlZmluZWQsIGNvbnRleHRQYXRoID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBjb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKSArIFwiLlwiO1xuICAgICAgfVxuICAgICAgaWYgKF91dGlscy5pc0Z1bmN0aW9uKGNvbnRleHQyKSkge1xuICAgICAgICBjb250ZXh0MiA9IGNvbnRleHQyLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIGRhdGEgPSBfdXRpbHMuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgZGF0YS5rZXkgPSBmaWVsZDtcbiAgICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICAgIGRhdGEubGFzdCA9ICEhbGFzdDtcbiAgICAgICAgICBpZiAoY29udGV4dFBhdGgpIHtcbiAgICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXQgPSByZXQgKyBmbihjb250ZXh0MltmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHQyW2ZpZWxkXSwgZmllbGRdLCBbY29udGV4dFBhdGggKyBmaWVsZCwgbnVsbF0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRleHQyICYmIHR5cGVvZiBjb250ZXh0MiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoX3V0aWxzLmlzQXJyYXkoY29udGV4dDIpKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IGNvbnRleHQyLmxlbmd0aDtpIDwgajsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0Mikge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQyLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgY29udGV4dDJbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICAgIHZhciBuZXdDb250ZXh0ID0gW107XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gY29udGV4dDJbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICAgICAgICAgIGZvciAodmFyIGl0ID0gaXRlcmF0b3IubmV4dCgpOyFpdC5kb25lOyBpdCA9IGl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgICAgbmV3Q29udGV4dC5wdXNoKGl0LnZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29udGV4dDIgPSBuZXdDb250ZXh0O1xuICAgICAgICAgIGZvciAodmFyIGogPSBjb250ZXh0Mi5sZW5ndGg7aSA8IGo7IGkrKykge1xuICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihpLCBpLCBpID09PSBjb250ZXh0Mi5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIHByaW9yS2V5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoY29udGV4dDIpLmZvckVhY2goZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0l0ZXJhdGlvbihwcmlvcktleSwgaSAtIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICByZXQgPSBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9KTtcbiAgfTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanNcbnZhciByZXF1aXJlX2hlbHBlcl9taXNzaW5nID0gX19jb21tb25KUygoZXhwb3J0cywgbW9kdWxlKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gIH1cbiAgdmFyIF9leGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpO1xuICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKFwiaGVscGVyTWlzc2luZ1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanNcbnZhciByZXF1aXJlX2lmID0gX19jb21tb25KUygoZXhwb3J0cywgbW9kdWxlKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gIH1cbiAgdmFyIF91dGlscyA9IHJlcXVpcmVfdXRpbHMoKTtcbiAgdmFyIF9leGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpO1xuICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKFwiaWZcIiwgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIiNpZiByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChfdXRpbHMuaXNGdW5jdGlvbihjb25kaXRpb25hbCkpIHtcbiAgICAgICAgY29uZGl0aW9uYWwgPSBjb25kaXRpb25hbC5jYWxsKHRoaXMpO1xuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsIHx8IF91dGlscy5pc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoXCJ1bmxlc3NcIiwgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIiN1bmxlc3MgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnRcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gaW5zdGFuY2UuaGVscGVyc1tcImlmXCJdLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgICAgZm46IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgICAgaW52ZXJzZTogb3B0aW9ucy5mbixcbiAgICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzXG52YXIgcmVxdWlyZV9sb2cgPSBfX2NvbW1vbkpTKChleHBvcnRzLCBtb2R1bGUpID0+IHtcbiAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcihcImxvZ1wiLCBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhcmdzID0gW3VuZGVmaW5lZF0sIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7aSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICB9XG4gICAgICB2YXIgbGV2ZWwgPSAxO1xuICAgICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICAgIGxldmVsID0gb3B0aW9ucy5oYXNoLmxldmVsO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgICB9XG4gICAgICBhcmdzWzBdID0gbGV2ZWw7XG4gICAgICBpbnN0YW5jZS5sb2cuYXBwbHkoaW5zdGFuY2UsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdO1xufSk7XG5cbi8vIC4uLy4uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9sb29rdXAuanNcbnZhciByZXF1aXJlX2xvb2t1cCA9IF9fY29tbW9uSlMoKGV4cG9ydHMsIG1vZHVsZSkgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKFwibG9va3VwXCIsIGZ1bmN0aW9uKG9iaiwgZmllbGQsIG9wdGlvbnMpIHtcbiAgICAgIGlmICghb2JqKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9ucy5sb29rdXBQcm9wZXJ0eShvYmosIGZpZWxkKTtcbiAgICB9KTtcbiAgfTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qc1xudmFyIHJlcXVpcmVfd2l0aCA9IF9fY29tbW9uSlMoKGV4cG9ydHMsIG1vZHVsZSkgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xuICB9XG4gIHZhciBfdXRpbHMgPSByZXF1aXJlX3V0aWxzKCk7XG4gIHZhciBfZXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTtcbiAgdmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTtcbiAgZXhwb3J0cy5kZWZhdWx0ID0gZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcihcIndpdGhcIiwgZnVuY3Rpb24oY29udGV4dDIsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIiN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50XCIpO1xuICAgICAgfVxuICAgICAgaWYgKF91dGlscy5pc0Z1bmN0aW9uKGNvbnRleHQyKSkge1xuICAgICAgICBjb250ZXh0MiA9IGNvbnRleHQyLmNhbGwodGhpcyk7XG4gICAgICB9XG4gICAgICB2YXIgZm4gPSBvcHRpb25zLmZuO1xuICAgICAgaWYgKCFfdXRpbHMuaXNFbXB0eShjb250ZXh0MikpIHtcbiAgICAgICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBkYXRhID0gX3V0aWxzLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4oY29udGV4dDIsIHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHQyXSwgW2RhdGEgJiYgZGF0YS5jb250ZXh0UGF0aF0pXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMuanNcbnZhciByZXF1aXJlX2hlbHBlcnMgPSBfX2NvbW1vbkpTKChleHBvcnRzKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGV4cG9ydHMucmVnaXN0ZXJEZWZhdWx0SGVscGVycyA9IHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnM7XG4gIGV4cG9ydHMubW92ZUhlbHBlclRvSG9va3MgPSBtb3ZlSGVscGVyVG9Ib29rcztcbiAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHtcbiAgICByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTtcbiAgfVxuICB2YXIgX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcgPSByZXF1aXJlX2Jsb2NrX2hlbHBlcl9taXNzaW5nKCk7XG4gIHZhciBfaGVscGVyc0Jsb2NrSGVscGVyTWlzc2luZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nKTtcbiAgdmFyIF9oZWxwZXJzRWFjaCA9IHJlcXVpcmVfZWFjaCgpO1xuICB2YXIgX2hlbHBlcnNFYWNoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNFYWNoKTtcbiAgdmFyIF9oZWxwZXJzSGVscGVyTWlzc2luZyA9IHJlcXVpcmVfaGVscGVyX21pc3NpbmcoKTtcbiAgdmFyIF9oZWxwZXJzSGVscGVyTWlzc2luZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzSGVscGVyTWlzc2luZyk7XG4gIHZhciBfaGVscGVyc0lmID0gcmVxdWlyZV9pZigpO1xuICB2YXIgX2hlbHBlcnNJZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzSWYpO1xuICB2YXIgX2hlbHBlcnNMb2cgPSByZXF1aXJlX2xvZygpO1xuICB2YXIgX2hlbHBlcnNMb2cyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc0xvZyk7XG4gIHZhciBfaGVscGVyc0xvb2t1cCA9IHJlcXVpcmVfbG9va3VwKCk7XG4gIHZhciBfaGVscGVyc0xvb2t1cDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzTG9va3VwKTtcbiAgdmFyIF9oZWxwZXJzV2l0aCA9IHJlcXVpcmVfd2l0aCgpO1xuICB2YXIgX2hlbHBlcnNXaXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNXaXRoKTtcbiAgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICAgIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nMltcImRlZmF1bHRcIl0oaW5zdGFuY2UpO1xuICAgIF9oZWxwZXJzRWFjaDJbXCJkZWZhdWx0XCJdKGluc3RhbmNlKTtcbiAgICBfaGVscGVyc0hlbHBlck1pc3NpbmcyW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gICAgX2hlbHBlcnNJZjJbXCJkZWZhdWx0XCJdKGluc3RhbmNlKTtcbiAgICBfaGVscGVyc0xvZzJbXCJkZWZhdWx0XCJdKGluc3RhbmNlKTtcbiAgICBfaGVscGVyc0xvb2t1cDJbXCJkZWZhdWx0XCJdKGluc3RhbmNlKTtcbiAgICBfaGVscGVyc1dpdGgyW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gIH1cbiAgZnVuY3Rpb24gbW92ZUhlbHBlclRvSG9va3MoaW5zdGFuY2UsIGhlbHBlck5hbWUsIGtlZXBIZWxwZXIpIHtcbiAgICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgICAgaW5zdGFuY2UuaG9va3NbaGVscGVyTmFtZV0gPSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgICAgaWYgKCFrZWVwSGVscGVyKSB7XG4gICAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8vIC4uLy4uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvZGVjb3JhdG9ycy9pbmxpbmUuanNcbnZhciByZXF1aXJlX2lubGluZSA9IF9fY29tbW9uSlMoKGV4cG9ydHMsIG1vZHVsZSkgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICB2YXIgX3V0aWxzID0gcmVxdWlyZV91dGlscygpO1xuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihpbnN0YW5jZSkge1xuICAgIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKFwiaW5saW5lXCIsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmV0ID0gZm47XG4gICAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICAgIHJldCA9IGZ1bmN0aW9uKGNvbnRleHQyLCBvcHRpb25zMikge1xuICAgICAgICAgIHZhciBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBfdXRpbHMuZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpO1xuICAgICAgICAgIHZhciByZXQyID0gZm4oY29udGV4dDIsIG9wdGlvbnMyKTtcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgICByZXR1cm4gcmV0MjtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9KTtcbiAgfTtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2RlY29yYXRvcnMuanNcbnZhciByZXF1aXJlX2RlY29yYXRvcnMgPSBfX2NvbW1vbkpTKChleHBvcnRzKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGV4cG9ydHMucmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyA9IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnM7XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gIH1cbiAgdmFyIF9kZWNvcmF0b3JzSW5saW5lID0gcmVxdWlyZV9pbmxpbmUoKTtcbiAgdmFyIF9kZWNvcmF0b3JzSW5saW5lMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RlY29yYXRvcnNJbmxpbmUpO1xuICBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKGluc3RhbmNlKSB7XG4gICAgX2RlY29yYXRvcnNJbmxpbmUyW1wiZGVmYXVsdFwiXShpbnN0YW5jZSk7XG4gIH1cbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2xvZ2dlci5qc1xudmFyIHJlcXVpcmVfbG9nZ2VyID0gX19jb21tb25KUygoZXhwb3J0cywgbW9kdWxlKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIHZhciBfdXRpbHMgPSByZXF1aXJlX3V0aWxzKCk7XG4gIHZhciBsb2dnZXIgPSB7XG4gICAgbWV0aG9kTWFwOiBbXCJkZWJ1Z1wiLCBcImluZm9cIiwgXCJ3YXJuXCIsIFwiZXJyb3JcIl0sXG4gICAgbGV2ZWw6IFwiaW5mb1wiLFxuICAgIGxvb2t1cExldmVsOiBmdW5jdGlvbiBsb29rdXBMZXZlbChsZXZlbCkge1xuICAgICAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICB2YXIgbGV2ZWxNYXAgPSBfdXRpbHMuaW5kZXhPZihsb2dnZXIubWV0aG9kTWFwLCBsZXZlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgICBsZXZlbCA9IGxldmVsTWFwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxldmVsO1xuICAgIH0sXG4gICAgbG9nOiBmdW5jdGlvbiBsb2cobGV2ZWwpIHtcbiAgICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBsb2dnZXIubG9va3VwTGV2ZWwobG9nZ2VyLmxldmVsKSA8PSBsZXZlbCkge1xuICAgICAgICB2YXIgbWV0aG9kID0gbG9nZ2VyLm1ldGhvZE1hcFtsZXZlbF07XG4gICAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7XG4gICAgICAgICAgbWV0aG9kID0gXCJsb2dcIjtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWVzc2FnZSA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7X2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICAgIG1lc3NhZ2VbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGVbbWV0aG9kXS5hcHBseShjb25zb2xlLCBtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGV4cG9ydHMuZGVmYXVsdCA9IGxvZ2dlcjtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qc1xudmFyIHJlcXVpcmVfY3JlYXRlX25ld19sb29rdXBfb2JqZWN0ID0gX19jb21tb25KUygoZXhwb3J0cykgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLmNyZWF0ZU5ld0xvb2t1cE9iamVjdCA9IGNyZWF0ZU5ld0xvb2t1cE9iamVjdDtcbiAgdmFyIF91dGlscyA9IHJlcXVpcmVfdXRpbHMoKTtcbiAgZnVuY3Rpb24gY3JlYXRlTmV3TG9va3VwT2JqZWN0KCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzb3VyY2VzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwO19rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHNvdXJjZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuICAgIHJldHVybiBfdXRpbHMuZXh0ZW5kLmFwcGx5KHVuZGVmaW5lZCwgW09iamVjdC5jcmVhdGUobnVsbCldLmNvbmNhdChzb3VyY2VzKSk7XG4gIH1cbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qc1xudmFyIHJlcXVpcmVfcHJvdG9fYWNjZXNzID0gX19jb21tb25KUygoZXhwb3J0cykgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLmNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbDtcbiAgZXhwb3J0cy5yZXN1bHRJc0FsbG93ZWQgPSByZXN1bHRJc0FsbG93ZWQ7XG4gIGV4cG9ydHMucmVzZXRMb2dnZWRQcm9wZXJ0aWVzID0gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzO1xuICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xuICB9XG4gIHZhciBfY3JlYXRlTmV3TG9va3VwT2JqZWN0ID0gcmVxdWlyZV9jcmVhdGVfbmV3X2xvb2t1cF9vYmplY3QoKTtcbiAgdmFyIF9sb2dnZXIgPSByZXF1aXJlX2xvZ2dlcigpO1xuICB2YXIgX2xvZ2dlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2dnZXIpO1xuICB2YXIgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICAgIHZhciBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0W1wiY29uc3RydWN0b3JcIl0gPSBmYWxzZTtcbiAgICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0W1wiX19kZWZpbmVHZXR0ZXJfX1wiXSA9IGZhbHNlO1xuICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbXCJfX2RlZmluZVNldHRlcl9fXCJdID0gZmFsc2U7XG4gICAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFtcIl9fbG9va3VwR2V0dGVyX19cIl0gPSBmYWxzZTtcbiAgICB2YXIgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbXCJfX3Byb3RvX19cIl0gPSBmYWxzZTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICB3aGl0ZWxpc3Q6IF9jcmVhdGVOZXdMb29rdXBPYmplY3QuY3JlYXRlTmV3TG9va3VwT2JqZWN0KGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCwgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvUHJvcGVydGllcyksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b1Byb3BlcnRpZXNCeURlZmF1bHRcbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG4gICAgICAgIHdoaXRlbGlzdDogX2NyZWF0ZU5ld0xvb2t1cE9iamVjdC5jcmVhdGVOZXdMb29rdXBPYmplY3QoZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCwgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kcyksXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHRcbiAgICAgIH1cbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIHByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5tZXRob2RzLCBwcm9wZXJ0eU5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICAgIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdID09PSB0cnVlO1xuICAgIH1cbiAgICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICAgIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICAgIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSA9IHRydWU7XG4gICAgICBfbG9nZ2VyMltcImRlZmF1bHRcIl0ubG9nKFwiZXJyb3JcIiwgJ0hhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCInICsgcHJvcGVydHlOYW1lICsgYFwiIGJlY2F1c2UgaXQgaXMgbm90IGFuIFwib3duIHByb3BlcnR5XCIgb2YgaXRzIHBhcmVudC5cbmAgKyBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XG5gICsgXCJTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNcIik7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHJlc2V0TG9nZ2VkUHJvcGVydGllcygpIHtcbiAgICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5TmFtZSkge1xuICAgICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbi8vIC4uLy4uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvYmFzZS5qc1xudmFyIHJlcXVpcmVfYmFzZSA9IF9fY29tbW9uSlMoKGV4cG9ydHMpID0+IHtcbiAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgZXhwb3J0cy5IYW5kbGViYXJzRW52aXJvbm1lbnQgPSBIYW5kbGViYXJzRW52aXJvbm1lbnQ7XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gIH1cbiAgdmFyIF91dGlscyA9IHJlcXVpcmVfdXRpbHMoKTtcbiAgdmFyIF9leGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpO1xuICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuICB2YXIgX2hlbHBlcnMgPSByZXF1aXJlX2hlbHBlcnMoKTtcbiAgdmFyIF9kZWNvcmF0b3JzID0gcmVxdWlyZV9kZWNvcmF0b3JzKCk7XG4gIHZhciBfbG9nZ2VyID0gcmVxdWlyZV9sb2dnZXIoKTtcbiAgdmFyIF9sb2dnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9nZ2VyKTtcbiAgdmFyIF9pbnRlcm5hbFByb3RvQWNjZXNzID0gcmVxdWlyZV9wcm90b19hY2Nlc3MoKTtcbiAgdmFyIFZFUlNJT04gPSBcIjQuNy44XCI7XG4gIGV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG4gIHZhciBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG4gIGV4cG9ydHMuQ09NUElMRVJfUkVWSVNJT04gPSBDT01QSUxFUl9SRVZJU0lPTjtcbiAgdmFyIExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiA9IDc7XG4gIGV4cG9ydHMuTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OO1xuICB2YXIgUkVWSVNJT05fQ0hBTkdFUyA9IHtcbiAgICAxOiBcIjw9IDEuMC5yYy4yXCIsXG4gICAgMjogXCI9PSAxLjAuMC1yYy4zXCIsXG4gICAgMzogXCI9PSAxLjAuMC1yYy40XCIsXG4gICAgNDogXCI9PSAxLngueFwiLFxuICAgIDU6IFwiPT0gMi4wLjAtYWxwaGEueFwiLFxuICAgIDY6IFwiPj0gMi4wLjAtYmV0YS4xXCIsXG4gICAgNzogXCI+PSA0LjAuMCA8NC4zLjBcIixcbiAgICA4OiBcIj49IDQuMy4wXCJcbiAgfTtcbiAgZXhwb3J0cy5SRVZJU0lPTl9DSEFOR0VTID0gUkVWSVNJT05fQ0hBTkdFUztcbiAgdmFyIG9iamVjdFR5cGUgPSBcIltvYmplY3QgT2JqZWN0XVwiO1xuICBmdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgICB0aGlzLmhlbHBlcnMgPSBoZWxwZXJzIHx8IHt9O1xuICAgIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuICAgIF9oZWxwZXJzLnJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gICAgX2RlY29yYXRvcnMucmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyh0aGlzKTtcbiAgfVxuICBIYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG4gICAgbG9nZ2VyOiBfbG9nZ2VyMltcImRlZmF1bHRcIl0sXG4gICAgbG9nOiBfbG9nZ2VyMltcImRlZmF1bHRcIl0ubG9nLFxuICAgIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiByZWdpc3RlckhlbHBlcihuYW1lLCBmbikge1xuICAgICAgaWYgKF91dGlscy50b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICAgIGlmIChmbikge1xuICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oXCJBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgX3V0aWxzLmV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgICB9XG4gICAgfSxcbiAgICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiB1bnJlZ2lzdGVySGVscGVyKG5hbWUpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmhlbHBlcnNbbmFtZV07XG4gICAgfSxcbiAgICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uIHJlZ2lzdGVyUGFydGlhbChuYW1lLCBwYXJ0aWFsKSB7XG4gICAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgICAgX3V0aWxzLmV4dGVuZCh0aGlzLnBhcnRpYWxzLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oJ0F0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIicgKyBuYW1lICsgJ1wiIGFzIHVuZGVmaW5lZCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgICAgfVxuICAgIH0sXG4gICAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uIHVucmVnaXN0ZXJQYXJ0aWFsKG5hbWUpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnBhcnRpYWxzW25hbWVdO1xuICAgIH0sXG4gICAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uIHJlZ2lzdGVyRGVjb3JhdG9yKG5hbWUsIGZuKSB7XG4gICAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgICAgaWYgKGZuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIkFyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9yc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBfdXRpbHMuZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnNbbmFtZV0gPSBmbjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVucmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uIHVucmVnaXN0ZXJEZWNvcmF0b3IobmFtZSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgICB9LFxuICAgIHJlc2V0TG9nZ2VkUHJvcGVydHlBY2Nlc3NlczogZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0eUFjY2Vzc2VzKCkge1xuICAgICAgX2ludGVybmFsUHJvdG9BY2Nlc3MucmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gICAgfVxuICB9O1xuICB2YXIgbG9nMiA9IF9sb2dnZXIyW1wiZGVmYXVsdFwiXS5sb2c7XG4gIGV4cG9ydHMubG9nID0gbG9nMjtcbiAgZXhwb3J0cy5jcmVhdGVGcmFtZSA9IF91dGlscy5jcmVhdGVGcmFtZTtcbiAgZXhwb3J0cy5sb2dnZXIgPSBfbG9nZ2VyMltcImRlZmF1bHRcIl07XG59KTtcblxuLy8gLi4vLi4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9zYWZlLXN0cmluZy5qc1xudmFyIHJlcXVpcmVfc2FmZV9zdHJpbmcgPSBfX2NvbW1vbkpTKChleHBvcnRzLCBtb2R1bGUpID0+IHtcbiAgZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbiAgZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgfVxuICBTYWZlU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IFNhZmVTdHJpbmcucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIlwiICsgdGhpcy5zdHJpbmc7XG4gIH07XG4gIGV4cG9ydHMuZGVmYXVsdCA9IFNhZmVTdHJpbmc7XG4gIG1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1tcImRlZmF1bHRcIl07XG59KTtcblxuLy8gLi4vLi4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9pbnRlcm5hbC93cmFwSGVscGVyLmpzXG52YXIgcmVxdWlyZV93cmFwSGVscGVyID0gX19jb21tb25KUygoZXhwb3J0cykgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLndyYXBIZWxwZXIgPSB3cmFwSGVscGVyO1xuICBmdW5jdGlvbiB3cmFwSGVscGVyKGhlbHBlciwgdHJhbnNmb3JtT3B0aW9uc0ZuKSB7XG4gICAgaWYgKHR5cGVvZiBoZWxwZXIgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGhlbHBlcjtcbiAgICB9XG4gICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSA9IHRyYW5zZm9ybU9wdGlvbnNGbihvcHRpb25zKTtcbiAgICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG59KTtcblxuLy8gLi4vLi4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9ydW50aW1lLmpzXG52YXIgcmVxdWlyZV9ydW50aW1lID0gX19jb21tb25KUygoZXhwb3J0cykgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLmNoZWNrUmV2aXNpb24gPSBjaGVja1JldmlzaW9uO1xuICBleHBvcnRzLnRlbXBsYXRlID0gdGVtcGxhdGU7XG4gIGV4cG9ydHMud3JhcFByb2dyYW0gPSB3cmFwUHJvZ3JhbTtcbiAgZXhwb3J0cy5yZXNvbHZlUGFydGlhbCA9IHJlc29sdmVQYXJ0aWFsO1xuICBleHBvcnRzLmludm9rZVBhcnRpYWwgPSBpbnZva2VQYXJ0aWFsO1xuICBleHBvcnRzLm5vb3AgPSBub29wO1xuICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9O1xuICB9XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikge1xuICAgIGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZXdPYmogPSB7fTtcbiAgICAgIGlmIChvYmogIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpXG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqO1xuICAgICAgcmV0dXJuIG5ld09iajtcbiAgICB9XG4gIH1cbiAgdmFyIF91dGlscyA9IHJlcXVpcmVfdXRpbHMoKTtcbiAgdmFyIFV0aWxzID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX3V0aWxzKTtcbiAgdmFyIF9leGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpO1xuICB2YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuICB2YXIgX2Jhc2UgPSByZXF1aXJlX2Jhc2UoKTtcbiAgdmFyIF9oZWxwZXJzID0gcmVxdWlyZV9oZWxwZXJzKCk7XG4gIHZhciBfaW50ZXJuYWxXcmFwSGVscGVyID0gcmVxdWlyZV93cmFwSGVscGVyKCk7XG4gIHZhciBfaW50ZXJuYWxQcm90b0FjY2VzcyA9IHJlcXVpcmVfcHJvdG9fYWNjZXNzKCk7XG4gIGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gICAgdmFyIGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsIGN1cnJlbnRSZXZpc2lvbiA9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9OO1xuICAgIGlmIChjb21waWxlclJldmlzaW9uID49IF9iYXNlLkxBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJiBjb21waWxlclJldmlzaW9uIDw9IF9iYXNlLkNPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb21waWxlclJldmlzaW9uIDwgX2Jhc2UuTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgICB2YXIgcnVudGltZVZlcnNpb25zID0gX2Jhc2UuUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLCBjb21waWxlclZlcnNpb25zID0gX2Jhc2UuUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oXCJUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiBcIiArIFwiUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoXCIgKyBydW50aW1lVmVyc2lvbnMgKyBcIikgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uIChcIiArIGNvbXBpbGVyVmVyc2lvbnMgKyBcIikuXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbXCJkZWZhdWx0XCJdKFwiVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiBcIiArIFwiUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uIChcIiArIGNvbXBpbGVySW5mb1sxXSArIFwiKS5cIik7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gICAgaWYgKCFlbnYpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oXCJObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGVcIik7XG4gICAgfVxuICAgIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIlVua25vd24gdGVtcGxhdGUgb2JqZWN0OiBcIiArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICAgIH1cbiAgICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuICAgIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG4gICAgdmFyIHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9IHRlbXBsYXRlU3BlYy5jb21waWxlciAmJiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJbMF0gPT09IDc7XG4gICAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dDIsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgICAgY29udGV4dDIgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQyLCBvcHRpb25zLmhhc2gpO1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkc1swXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0Miwgb3B0aW9ucyk7XG4gICAgICB2YXIgZXh0ZW5kZWRPcHRpb25zID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICAgIGhvb2tzOiB0aGlzLmhvb2tzLFxuICAgICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgICB9KTtcbiAgICAgIHZhciByZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQyLCBleHRlbmRlZE9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsICYmIGVudi5jb21waWxlKSB7XG4gICAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICAgIHJlc3VsdCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0MiwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgICB2YXIgbGluZXMgPSByZXN1bHQuc3BsaXQoYFxuYCk7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7aSA8IGw7IGkrKykge1xuICAgICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVzW2ldID0gb3B0aW9ucy5pbmRlbnQgKyBsaW5lc1tpXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbihgXG5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIlRoZSBwYXJ0aWFsIFwiICsgb3B0aW9ucy5uYW1lICsgXCIgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZVwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGNvbnRhaW5lciA9IHtcbiAgICAgIHN0cmljdDogZnVuY3Rpb24gc3RyaWN0KG9iaiwgbmFtZSwgbG9jKSB7XG4gICAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXSgnXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgICBsb2NcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgICB9LFxuICAgICAgbG9va3VwUHJvcGVydHk6IGZ1bmN0aW9uIGxvb2t1cFByb3BlcnR5KHBhcmVudCwgcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9pbnRlcm5hbFByb3RvQWNjZXNzLnJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0sXG4gICAgICBsb29rdXA6IGZ1bmN0aW9uIGxvb2t1cChkZXB0aHMsIG5hbWUpIHtcbiAgICAgICAgdmFyIGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwO2kgPCBsZW47IGkrKykge1xuICAgICAgICAgIHZhciByZXN1bHQgPSBkZXB0aHNbaV0gJiYgY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KGRlcHRoc1tpXSwgbmFtZSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxhbWJkYTogZnVuY3Rpb24gbGFtYmRhKGN1cnJlbnQsIGNvbnRleHQyKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gXCJmdW5jdGlvblwiID8gY3VycmVudC5jYWxsKGNvbnRleHQyKSA6IGN1cnJlbnQ7XG4gICAgICB9LFxuICAgICAgZXNjYXBlRXhwcmVzc2lvbjogVXRpbHMuZXNjYXBlRXhwcmVzc2lvbixcbiAgICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuICAgICAgZm46IGZ1bmN0aW9uIGZuKGkpIHtcbiAgICAgICAgdmFyIHJldDIgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICAgIHJldDIuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyBcIl9kXCJdO1xuICAgICAgICByZXR1cm4gcmV0MjtcbiAgICAgIH0sXG4gICAgICBwcm9ncmFtczogW10sXG4gICAgICBwcm9ncmFtOiBmdW5jdGlvbiBwcm9ncmFtKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgICAgdmFyIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSwgZm4gPSB0aGlzLmZuKGkpO1xuICAgICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSh2YWx1ZSwgZGVwdGgpIHtcbiAgICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLl9wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIG1lcmdlSWZOZWVkZWQ6IGZ1bmN0aW9uIG1lcmdlSWZOZWVkZWQocGFyYW0sIGNvbW1vbikge1xuICAgICAgICB2YXIgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuICAgICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIHBhcmFtICE9PSBjb21tb24pIHtcbiAgICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9LFxuICAgICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcbiAgICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgICAgY29tcGlsZXJJbmZvOiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHJldChjb250ZXh0Mikge1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDEgfHwgYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1sxXTtcbiAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0MiwgZGF0YSk7XG4gICAgICB9XG4gICAgICB2YXIgZGVwdGhzID0gdW5kZWZpbmVkLCBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgICAgZGVwdGhzID0gY29udGV4dDIgIT0gb3B0aW9ucy5kZXB0aHNbMF0gPyBbY29udGV4dDJdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aHMgPSBbY29udGV4dDJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQzKSB7XG4gICAgICAgIHJldHVybiBcIlwiICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0MywgY29udGFpbmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscywgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgICB9XG4gICAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICAgIHJldHVybiBtYWluKGNvbnRleHQyLCBvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0LmlzVG9wID0gdHJ1ZTtcbiAgICByZXQuX3NldHVwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgICAgdmFyIG1lcmdlZEhlbHBlcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5oZWxwZXJzLCBvcHRpb25zLmhlbHBlcnMpO1xuICAgICAgICB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcik7XG4gICAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcbiAgICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gY29udGFpbmVyLm1lcmdlSWZOZWVkZWQob3B0aW9ucy5wYXJ0aWFscywgZW52LnBhcnRpYWxzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IFV0aWxzLmV4dGVuZCh7fSwgZW52LmRlY29yYXRvcnMsIG9wdGlvbnMuZGVjb3JhdG9ycyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGFpbmVyLmhvb2tzID0ge307XG4gICAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBfaW50ZXJuYWxQcm90b0FjY2Vzcy5jcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wob3B0aW9ucyk7XG4gICAgICAgIHZhciBrZWVwSGVscGVySW5IZWxwZXJzID0gb3B0aW9ucy5hbGxvd0NhbGxzVG9IZWxwZXJNaXNzaW5nIHx8IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNztcbiAgICAgICAgX2hlbHBlcnMubW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCBcImhlbHBlck1pc3NpbmdcIiwga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgXCJibG9ja0hlbHBlck1pc3NpbmdcIiwga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gb3B0aW9ucy5wcm90b0FjY2Vzc0NvbnRyb2w7XG4gICAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gb3B0aW9ucy5oZWxwZXJzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgICAgY29udGFpbmVyLmhvb2tzID0gb3B0aW9ucy5ob29rcztcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbXCJkZWZhdWx0XCJdKFwibXVzdCBwYXNzIGJsb2NrIHBhcmFtc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzICYmICFkZXB0aHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yW1wiZGVmYXVsdFwiXShcIm11c3QgcGFzcyBwYXJlbnQgZGVwdGhzXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9O1xuICAgIHJldHVybiByZXQ7XG4gIH1cbiAgZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGZ1bmN0aW9uIHByb2coY29udGV4dDIpIHtcbiAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA8PSAxIHx8IGFyZ3VtZW50c1sxXSA9PT0gdW5kZWZpbmVkID8ge30gOiBhcmd1bWVudHNbMV07XG4gICAgICB2YXIgY3VycmVudERlcHRocyA9IGRlcHRocztcbiAgICAgIGlmIChkZXB0aHMgJiYgY29udGV4dDIgIT0gZGVwdGhzWzBdICYmICEoY29udGV4dDIgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpKSB7XG4gICAgICAgIGN1cnJlbnREZXB0aHMgPSBbY29udGV4dDJdLmNvbmNhdChkZXB0aHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuKGNvbnRhaW5lciwgY29udGV4dDIsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIG9wdGlvbnMuZGF0YSB8fCBkYXRhLCBibG9ja1BhcmFtcyAmJiBbb3B0aW9ucy5ibG9ja1BhcmFtc10uY29uY2F0KGJsb2NrUGFyYW1zKSwgY3VycmVudERlcHRocyk7XG4gICAgfVxuICAgIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICBwcm9nLnByb2dyYW0gPSBpO1xuICAgIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICAgIHJldHVybiBwcm9nO1xuICB9XG4gIGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQyLCBvcHRpb25zKSB7XG4gICAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgICBpZiAob3B0aW9ucy5uYW1lID09PSBcIkBwYXJ0aWFsLWJsb2NrXCIpIHtcbiAgICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVtcInBhcnRpYWwtYmxvY2tcIl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gICAgfVxuICAgIHJldHVybiBwYXJ0aWFsO1xuICB9XG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWwocGFydGlhbCwgY29udGV4dDIsIG9wdGlvbnMpIHtcbiAgICB2YXIgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbXCJwYXJ0aWFsLWJsb2NrXCJdO1xuICAgIG9wdGlvbnMucGFydGlhbCA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICBvcHRpb25zLmRhdGEuY29udGV4dFBhdGggPSBvcHRpb25zLmlkc1swXSB8fCBvcHRpb25zLmRhdGEuY29udGV4dFBhdGg7XG4gICAgfVxuICAgIHZhciBwYXJ0aWFsQmxvY2sgPSB1bmRlZmluZWQ7XG4gICAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICBvcHRpb25zLmRhdGEgPSBfYmFzZS5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICB2YXIgZm4gPSBvcHRpb25zLmZuO1xuICAgICAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbXCJwYXJ0aWFsLWJsb2NrXCJdID0gZnVuY3Rpb24gcGFydGlhbEJsb2NrV3JhcHBlcihjb250ZXh0Mykge1xuICAgICAgICAgIHZhciBvcHRpb25zMiA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuICAgICAgICAgIG9wdGlvbnMyLmRhdGEgPSBfYmFzZS5jcmVhdGVGcmFtZShvcHRpb25zMi5kYXRhKTtcbiAgICAgICAgICBvcHRpb25zMi5kYXRhW1wicGFydGlhbC1ibG9ja1wiXSA9IGN1cnJlbnRQYXJ0aWFsQmxvY2s7XG4gICAgICAgICAgcmV0dXJuIGZuKGNvbnRleHQzLCBvcHRpb25zMik7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChmbi5wYXJ0aWFscykge1xuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIGZuLnBhcnRpYWxzKTtcbiAgICAgICAgfVxuICAgICAgfSkoKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMltcImRlZmF1bHRcIl0oXCJUaGUgcGFydGlhbCBcIiArIG9wdGlvbnMubmFtZSArIFwiIGNvdWxkIG5vdCBiZSBmb3VuZFwiKTtcbiAgICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dDIsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBub29wKCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQyLCBkYXRhKSB7XG4gICAgaWYgKCFkYXRhIHx8ICEoXCJyb290XCIgaW4gZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBkYXRhID8gX2Jhc2UuY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICAgIGRhdGEucm9vdCA9IGNvbnRleHQyO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICBmdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gICAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgICAgdmFyIHByb3BzID0ge307XG4gICAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgVXRpbHMuZXh0ZW5kKHByb2csIHByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb2c7XG4gIH1cbiAgZnVuY3Rpb24gd3JhcEhlbHBlcnNUb1Bhc3NMb29rdXBQcm9wZXJ0eShtZXJnZWRIZWxwZXJzLCBjb250YWluZXIpIHtcbiAgICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKGhlbHBlck5hbWUpIHtcbiAgICAgIHZhciBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgICAgbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXSA9IHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcik7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gICAgdmFyIGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICAgIHJldHVybiBfaW50ZXJuYWxXcmFwSGVscGVyLndyYXBIZWxwZXIoaGVscGVyLCBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gVXRpbHMuZXh0ZW5kKHsgbG9va3VwUHJvcGVydHkgfSwgb3B0aW9ucyk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzXG52YXIgcmVxdWlyZV9ub19jb25mbGljdCA9IF9fY29tbW9uSlMoKGV4cG9ydHMsIG1vZHVsZSkgPT4ge1xuICBleHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuICBleHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gICAgKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKVxuICAgICAgICByZXR1cm47XG4gICAgICBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oXCJfX21hZ2ljX19cIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSk7XG4gICAgICBfX21hZ2ljX18uZ2xvYmFsVGhpcyA9IF9fbWFnaWNfXztcbiAgICAgIGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbWFnaWNfXztcbiAgICB9KSgpO1xuICAgIHZhciAkSGFuZGxlYmFycyA9IGdsb2JhbFRoaXMuSGFuZGxlYmFycztcbiAgICBIYW5kbGViYXJzLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmIChnbG9iYWxUaGlzLkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgICAgZ2xvYmFsVGhpcy5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgICB9O1xuICB9O1xuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbXCJkZWZhdWx0XCJdO1xufSk7XG5cbi8vIC4uLy4uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMucnVudGltZS5qc1xudmFyIHJlcXVpcmVfaGFuZGxlYmFyc19ydW50aW1lID0gX19jb21tb25KUygoZXhwb3J0cywgbW9kdWxlKSA9PiB7XG4gIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4gIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07XG4gIH1cbiAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7XG4gICAgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkge1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5ld09iaiA9IHt9O1xuICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSlcbiAgICAgICAgICAgIG5ld09ialtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7XG4gICAgICByZXR1cm4gbmV3T2JqO1xuICAgIH1cbiAgfVxuICB2YXIgX2hhbmRsZWJhcnNCYXNlID0gcmVxdWlyZV9iYXNlKCk7XG4gIHZhciBiYXNlID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hhbmRsZWJhcnNCYXNlKTtcbiAgdmFyIF9oYW5kbGViYXJzU2FmZVN0cmluZyA9IHJlcXVpcmVfc2FmZV9zdHJpbmcoKTtcbiAgdmFyIF9oYW5kbGViYXJzU2FmZVN0cmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzU2FmZVN0cmluZyk7XG4gIHZhciBfaGFuZGxlYmFyc0V4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7XG4gIHZhciBfaGFuZGxlYmFyc0V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzRXhjZXB0aW9uKTtcbiAgdmFyIF9oYW5kbGViYXJzVXRpbHMgPSByZXF1aXJlX3V0aWxzKCk7XG4gIHZhciBVdGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYW5kbGViYXJzVXRpbHMpO1xuICB2YXIgX2hhbmRsZWJhcnNSdW50aW1lID0gcmVxdWlyZV9ydW50aW1lKCk7XG4gIHZhciBydW50aW1lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hhbmRsZWJhcnNSdW50aW1lKTtcbiAgdmFyIF9oYW5kbGViYXJzTm9Db25mbGljdCA9IHJlcXVpcmVfbm9fY29uZmxpY3QoKTtcbiAgdmFyIF9oYW5kbGViYXJzTm9Db25mbGljdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oYW5kbGViYXJzTm9Db25mbGljdCk7XG4gIGZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgICB2YXIgaGIgPSBuZXcgYmFzZS5IYW5kbGViYXJzRW52aXJvbm1lbnQ7XG4gICAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgICBoYi5TYWZlU3RyaW5nID0gX2hhbmRsZWJhcnNTYWZlU3RyaW5nMltcImRlZmF1bHRcIl07XG4gICAgaGIuRXhjZXB0aW9uID0gX2hhbmRsZWJhcnNFeGNlcHRpb24yW1wiZGVmYXVsdFwiXTtcbiAgICBoYi5VdGlscyA9IFV0aWxzO1xuICAgIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuICAgIGhiLlZNID0gcnVudGltZTtcbiAgICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICAgIHJldHVybiBydW50aW1lLnRlbXBsYXRlKHNwZWMsIGhiKTtcbiAgICB9O1xuICAgIHJldHVybiBoYjtcbiAgfVxuICB2YXIgaW5zdCA9IGNyZWF0ZSgpO1xuICBpbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcbiAgX2hhbmRsZWJhcnNOb0NvbmZsaWN0MltcImRlZmF1bHRcIl0oaW5zdCk7XG4gIGluc3RbXCJkZWZhdWx0XCJdID0gaW5zdDtcbiAgZXhwb3J0cy5kZWZhdWx0ID0gaW5zdDtcbiAgbW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzW1wiZGVmYXVsdFwiXTtcbn0pO1xuXG4vLyAuLi8uLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzXG52YXIgcmVxdWlyZV9ydW50aW1lMiA9IF9fY29tbW9uSlMoKGV4cG9ydHMsIG1vZHVsZSkgPT4ge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmVfaGFuZGxlYmFyc19ydW50aW1lKClbXCJkZWZhdWx0XCJdO1xufSk7XG4vLyBzcmMvbW9kZWxzL3J0Yi9CaWRSZXF1ZXN0LnRzXG52YXIgQWdlbnRUeXBlcyA9IHtcbiAgU2Vzc2lvbjogMSxcbiAgRGV2aWNlOiAyLFxuICBVc2VyOiAzXG59O1xudmFyIEFkQ29tMTBEZXZpY2VUeXBlcyA9IHtcbiAgTW9iaWxlOiAxLFxuICBQQzogMixcbiAgQ1RWOiAzLFxuICBQaG9uZTogNCxcbiAgVGFibGV0OiA1LFxuICBDb25uZWN0ZWQ6IDYsXG4gIFNldFRvcDogNyxcbiAgT09IOiA4XG59O1xuLy8gc3JjL21vZGVscy9ydGIvTmF0aXZlUmVxdWVzdC50c1xudmFyIE5hdGl2ZVBvc2l0aW9uID0ge1xuICBVbmtub3duOiAwLFxuICBBYm92ZVRoZUZvbGQ6IDEsXG4gIEJlbG93VGhlRm9sZDogMyxcbiAgSGVhZGVyOiA0LFxuICBGb290ZXI6IDUsXG4gIFNpZGViYXI6IDYsXG4gIEZ1bGxTY3JlZW46IDdcbn07XG52YXIgTmF0aXZlSW1hZ2VUeXBlcyA9IHtcbiAgSWNvbjogMSxcbiAgTWFpbjogM1xufTtcbnZhciBOYXRpdmVEYXRhVHlwZXMgPSB7XG4gIFNwb25zb3JlZDogMSxcbiAgRGVzYzogMixcbiAgUmF0aW5nOiAzLFxuICBMaWtlczogNCxcbiAgRG93bmxvYWRzOiA1LFxuICBQcmljZTogNixcbiAgU2FsZVByaWNlOiA3LFxuICBQaG9uZTogOCxcbiAgQWRkcmVzczogOSxcbiAgRGVzYzI6IDEwLFxuICBEaXNwbGF5VVJMOiAxMSxcbiAgQ1RBVGV4dDogMTIsXG4gIFN1cmZTdHJhaW46IDUwMCxcbiAgU3VyZlRIQzogNTAxLFxuICBTdXJmQ0JEOiA1MDIsXG4gIFN1cmZDYXRlZ29yeTogNTAzLFxuICBTdXJmTWV0YVByb2R1Y3Q6IDU5OVxufTtcbnZhciBOYXRpdmVBc3NldElkID0ge1xuICBUaXRsZTogMCxcbiAgSW1hZ2U6IDEsXG4gIFNwb25zb3JlZDogMixcbiAgRGVzYzogMyxcbiAgUmF0aW5nOiA0LFxuICBQcmljZTogNSxcbiAgU2FsZVByaWNlOiA2LFxuICBEaXNwbGF5VVJMOiA3LFxuICBDVEFUZXh0OiA4LFxuICBWaWRlbzogOSxcbiAgU3VyZlN0cmFpbjogNTAwLFxuICBTdXJmVEhDOiA1MDEsXG4gIFN1cmZDQkQ6IDUwMixcbiAgU3VyZkNhdGVnb3J5OiA1MDMsXG4gIFN1cmZNZXRhUHJvZHVjdDogNTk5XG59O1xudmFyIEV2ZW50VHlwZXMgPSB7XG4gIEltcDogMSxcbiAgVmlld2FibGVNUkM1MDogMixcbiAgVmlld2FibGVNUkMxMDA6IDMsXG4gIFZpZXdhYmxlVklERU81MDogNFxufTtcbnZhciBDb250ZXh0VHlwZXMgPSB7XG4gIENvbnRlbnQ6IDEsXG4gIFNvY2lhbDogMixcbiAgUHJvZHVjdDogM1xufTtcbnZhciBDb250ZXh0U3ViVHlwZXMgPSB7XG4gIEdlbmVyYWw6IDEwLFxuICBBcnRpY2xlOiAxMSxcbiAgVmlkZW86IDEyLFxuICBBdWRpbzogMTMsXG4gIEltYWdlOiAxNCxcbiAgVXNlckdlbmVyYXRlZDogMTUsXG4gIEdlbmVyYWxTb2NpYWw6IDIwLFxuICBFbWFpbDogMjEsXG4gIENoYXQ6IDIyLFxuICBQcm9kdWN0OiAzMCxcbiAgQXBwbGljYXRpb246IDMxLFxuICBQcm9kdWN0UmV2aWV3czogMzJcbn07XG52YXIgUGxhY2VtZW50VHlwZXMgPSB7XG4gIEluRmVlZDogMSxcbiAgQXRvbWljOiAyLFxuICBPdXRzaWRlQ29yZTogMyxcbiAgUmVjb21tZW5kYXRpb246IDRcbn07XG52YXIgVmlkZW9NaW1lcyA9IHtcbiAgTVA0OiBcInZpZGVvL21wNFwiLFxuICBXRUJNOiBcInZpZGVvL3dlYm1cIlxufTtcbnZhciBFdmVudFRyYWNraW5nTWV0aG9kcyA9IHtcbiAgSW1nOiAxLFxuICBKUzogMlxufTtcbi8vIHNyYy9tb2RlbHMvcnRiL05hdGl2ZVJlc3BvbnNlLnRzXG52YXIgZmluZERhdGFBc3NldEJ5VHlwZSA9IChhc3NldHMsIGlkKSA9PiBhc3NldHM/LmZpbmQoKGFzc2V0KSA9PiBhc3NldC5pZCA9PT0gaWQpPy5kYXRhPy52YWx1ZTtcbmZ1bmN0aW9uIE5hdGl2ZVJlc3BvbnNlVG9Qcm9kdWN0SW5mb3JtYXRpb24obmF0aXZlKSB7XG4gIGNvbnN0IGJyYW5kID0gZmluZERhdGFBc3NldEJ5VHlwZShuYXRpdmUubmF0aXZlLmFzc2V0cywgTmF0aXZlQXNzZXRJZC5TcG9uc29yZWQpO1xuICByZXR1cm4ge1xuICAgIGltYWdlOiBuYXRpdmUubmF0aXZlLmFzc2V0cz8uZmluZCgoYXNzZXQpID0+IGFzc2V0LmltZz8udHlwZSA9PT0gTmF0aXZlSW1hZ2VUeXBlcy5NYWluKT8uaW1nPy51cmwsXG4gICAgbmFtZTogbmF0aXZlLm5hdGl2ZS5hc3NldHM/LmZpbmQoKGFzc2V0KSA9PiBhc3NldC50aXRsZSAhPT0gdW5kZWZpbmVkKT8udGl0bGU/LnRleHQsXG4gICAgcHJpY2U6IGZpbmREYXRhQXNzZXRCeVR5cGUobmF0aXZlLm5hdGl2ZS5hc3NldHMsIE5hdGl2ZUFzc2V0SWQuUHJpY2UpLFxuICAgIHNhbGVQcmljZTogZmluZERhdGFBc3NldEJ5VHlwZShuYXRpdmUubmF0aXZlLmFzc2V0cywgTmF0aXZlQXNzZXRJZC5TYWxlUHJpY2UpLFxuICAgIHRoYzogZmluZERhdGFBc3NldEJ5VHlwZShuYXRpdmUubmF0aXZlLmFzc2V0cywgTmF0aXZlQXNzZXRJZC5TdXJmVEhDKSxcbiAgICBjYmQ6IGZpbmREYXRhQXNzZXRCeVR5cGUobmF0aXZlLm5hdGl2ZS5hc3NldHMsIE5hdGl2ZUFzc2V0SWQuU3VyZkNCRCksXG4gICAgc3RyYWluOiBmaW5kRGF0YUFzc2V0QnlUeXBlKG5hdGl2ZS5uYXRpdmUuYXNzZXRzLCBOYXRpdmVBc3NldElkLlN1cmZTdHJhaW4pLFxuICAgIGJyYW5kX25hbWU6IGJyYW5kLFxuICAgIGJyYW5kTmFtZTogYnJhbmQsXG4gICAgcHJvZHVjdFR5cGU6IGZpbmREYXRhQXNzZXRCeVR5cGUobmF0aXZlLm5hdGl2ZS5hc3NldHMsIE5hdGl2ZUFzc2V0SWQuU3VyZkNhdGVnb3J5KSxcbiAgICBkZXRhaWxzOiBmaW5kRGF0YUFzc2V0QnlUeXBlKG5hdGl2ZS5uYXRpdmUuYXNzZXRzLCBOYXRpdmVBc3NldElkLkRlc2MpLFxuICAgIGN0YTogZmluZERhdGFBc3NldEJ5VHlwZShuYXRpdmUubmF0aXZlLmFzc2V0cywgTmF0aXZlQXNzZXRJZC5DVEFUZXh0KSxcbiAgICBjbGlja3Rocm91Z2hVcmw6IG5hdGl2ZS5uYXRpdmUubGluaz8udXJsID8/IG51bGwsXG4gICAgcGl4ZWxVcmw6IG5hdGl2ZS5uYXRpdmUuZXZlbnR0cmFja2Vycz8uZmluZCgoZXZlbnQpID0+IGV2ZW50LmV2ZW50ID09PSBFdmVudFR5cGVzLkltcCk/LnVybFxuICB9O1xufVxuLy8gc3JjL3NlcnZpY2VzL0xvZ2dlci50c1xudmFyIFNVUkZfUFJFRklYID0gXCIlY1tTVVJGXVwiO1xudmFyIFNFUEFSQVRPUiA9IFwiIOKAulwiO1xudmFyIFVOREVGID0gXCJbIHVuZGVmaW5lZCBdXCI7XG52YXIgTG9nQ29sb3JzID0ge1xuICBMYXZlbmRlcjogXCIjYzBhYmZmXCIsXG4gIFVsdHJhUmVkOiBcIiNmOTc1ODVcIixcbiAgU29mdEdvbGQ6IFwiI2Y0YmQ1ZFwiLFxuICBNYWdpY01pbnQ6IFwiI2JhZjdkYlwiXG59O1xudmFyIGxvZyA9IChsb2cyLCBhcmdzLCBjb2xvcikgPT4ge1xuICBhcmdzLnVuc2hpZnQoYGJvcmRlci1yYWRpdXM6IDNweDsgbWFyZ2luLWxlZnQ6IDEwcHg7IGJhY2tncm91bmQ6ICR7Y29sb3J9OyBmb250LXNpemU6IDEycHg7IGZvbnQtd2VpZ2h0OiBib2xkO2ApO1xuICBhcmdzLnVuc2hpZnQoU1VSRl9QUkVGSVgpO1xuICBsb2cyLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xufTtcbnZhciBpbmZvID0gKC4uLmFyZ3MpID0+IGxvZyhjb25zb2xlLmxvZywgW1wiKEluZm8pXCIsIC4uLmFyZ3NdLCBMb2dDb2xvcnMuTGF2ZW5kZXIpO1xudmFyIHdhcm4gPSAoLi4uYXJncykgPT4gbG9nKGNvbnNvbGUud2FybiwgW1wiKFdhcm5pbmcpXCIsIC4uLmFyZ3NdLCBMb2dDb2xvcnMuU29mdEdvbGQpO1xudmFyIGRlYnVnID0gKC4uLmFyZ3MpID0+IGxvZyhjb25zb2xlLmRlYnVnLCBbXCIoRGVidWcpXCIsIC4uLmFyZ3NdLCBMb2dDb2xvcnMuTWFnaWNNaW50KTtcbnZhciBlcnJvciA9ICguLi5hcmdzKSA9PiBsb2coY29uc29sZS5lcnJvciwgW1wiKEVycm9yKVwiLCAuLi5hcmdzXSwgTG9nQ29sb3JzLlVsdHJhUmVkKTtcbnZhciBjb250ZXh0ID0gKGxvZ2dlciwgLi4ucHJlZml4KSA9PiB7XG4gIGNvbnN0IG5ld1ByZWZpeCA9IGpvaW5DdHgocHJlZml4KSArIFNFUEFSQVRPUjtcbiAgY29uc3QgbmV3TG9nZ2VyID0ge1xuICAgIGluZm86IGxvZ2dlci5pbmZvLmJpbmQodW5kZWZpbmVkLCBuZXdQcmVmaXgpLFxuICAgIHdhcm46IGxvZ2dlci53YXJuLmJpbmQodW5kZWZpbmVkLCBuZXdQcmVmaXgpLFxuICAgIGRlYnVnOiBsb2dnZXIuZGVidWcuYmluZCh1bmRlZmluZWQsIG5ld1ByZWZpeCksXG4gICAgZXJyb3I6IGxvZ2dlci5lcnJvci5iaW5kKHVuZGVmaW5lZCwgbmV3UHJlZml4KSxcbiAgICB0YWJsZTogY29uc29sZS50YWJsZSxcbiAgICB3aXRoOiBsb2dnZXIud2l0aFxuICB9O1xuICBuZXdMb2dnZXIud2l0aCA9IGNvbnRleHQuYmluZCh1bmRlZmluZWQsIG5ld0xvZ2dlcik7XG4gIHJldHVybiBuZXdMb2dnZXI7XG59O1xudmFyIEluaXRMb2dnZXIgPSAoKSA9PiB7XG4gIGNvbnN0IGxvZ2dlciA9IHtcbiAgICBpbmZvLFxuICAgIHdhcm4sXG4gICAgZGVidWcsXG4gICAgZXJyb3IsXG4gICAgdGFibGU6IGNvbnNvbGUudGFibGVcbiAgfTtcbiAgbG9nZ2VyLndpdGggPSBjb250ZXh0LmJpbmQodW5kZWZpbmVkLCBsb2dnZXIpO1xuICByZXR1cm4gbG9nZ2VyO1xufTtcbnZhciBqb2luQ3R4ID0gKGN0eCkgPT4gY3R4Lm1hcCgoZSkgPT4gZSA9PT0gdW5kZWZpbmVkID8gVU5ERUYgOiBlKS5qb2luKFNFUEFSQVRPUik7XG52YXIgQ3R4ID0gKGxvZ2dlcikgPT4gbG9nZ2VyID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBsb2dnZXI/LndpdGggPT09IHVuZGVmaW5lZCA/IHsgLi4ubG9nZ2VyLCB3aXRoOiAoKSA9PiBDdHgobG9nZ2VyKSB9IDogbG9nZ2VyO1xuXG4vLyBzcmMvc2VydmljZXMvUmVzdWx0LnRzXG52YXIgT2sgPSAodCkgPT4gKHtcbiAgb2s6IHRydWUsXG4gIHZhbHVlOiB0XG59KTtcbnZhciBFcnIgPSAoZSkgPT4gKHtcbiAgb2s6IGZhbHNlLFxuICBlcnJvcjogZVxufSk7XG52YXIgVHJ5RG8gPSAoZm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gT2soZm4oKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBFcnIoZXJyKTtcbiAgfVxufTtcbnZhciBHZXRWYWx1ZSA9IChyZXN1bHQpID0+IHJlc3VsdD8ub2sgPyByZXN1bHQudmFsdWUgOiB1bmRlZmluZWQ7XG52YXIgVmFsdWVPciA9IChyZXN1bHQsIG9yKSA9PiByZXN1bHQ/Lm9rID8gcmVzdWx0LnZhbHVlIDogb3I7XG52YXIgR2V0VmFsdWVPclRocm93ID0gKHJlc3VsdCkgPT4ge1xuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxuICB0aHJvdyByZXN1bHQuZXJyb3I7XG59O1xudmFyIEFzc2VydFZhbHVlID0gR2V0VmFsdWVPclRocm93O1xudmFyIEFsbE9yTm9uZSA9IChyZXN1bHRzKSA9PiB7XG4gIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKChyZXMpID0+ICFyZXMub2spLm1hcCgocmVzKSA9PiByZXMuZXJyb3IpO1xuICBpZiAoZmFpbGVkLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gRXJyKG5ldyBNdWx0aXBsZUVycm9yc0Vycm9yKGZhaWxlZCkpO1xuICB9XG4gIGNvbnN0IHN1Y2Nlc3MgPSByZXN1bHRzLmZpbHRlcigocmVzKSA9PiByZXMub2spLm1hcCgocmVzKSA9PiByZXMudmFsdWUpO1xuICByZXR1cm4gT2soc3VjY2Vzcyk7XG59O1xudmFyIFNvbWUgPSAocmVzdWx0cykgPT4ge1xuICBjb25zdCBzdWNjZXNzID0gcmVzdWx0cy5maWx0ZXIoKHJlcykgPT4gcmVzLm9rKS5tYXAoKHJlcykgPT4gcmVzLnZhbHVlKTtcbiAgcmV0dXJuIE9rKHN1Y2Nlc3MpO1xufTtcbnZhciBGaWx0ZXIgPSAoLi4ucmVzdWx0cykgPT4ge1xuICBjb25zdCBzdWNjZXNzID0gU29tZShyZXN1bHRzKS52YWx1ZS5tYXAoKHZhbCkgPT4gT2sodmFsKSk7XG4gIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKChyZXMpID0+ICFyZXMub2spO1xuICByZXR1cm4gW3N1Y2Nlc3MsIGZhaWxlZF07XG59O1xudmFyIEFueUZhaWxlZCA9ICguLi5yZXN1bHRzKSA9PiB7XG4gIGNvbnN0IGVycm9ycyA9IHJlc3VsdHMuZmlsdGVyKChyZXMpID0+ICFyZXMub2spLm1hcCgocmVzKSA9PiByZXMuZXJyb3IpO1xuICBpZiAoZXJyb3JzLmxlbmd0aCkge1xuICAgIHJldHVybiBbdHJ1ZSwgZXJyb3JzXTtcbiAgfVxuICByZXR1cm4gW2ZhbHNlXTtcbn07XG5cbmNsYXNzIE11bHRpcGxlRXJyb3JzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGVycm9ycztcbiAgY29uc3RydWN0b3IoZXJyb3JzKSB7XG4gICAgc3VwZXIoYEdvdCBtdWx0aXBsZSBlcnJvcnM6XG5gICsgZXJyb3JzLm1hcCgoZXJyKSA9PiBcIlxcdFwiICsgZXJyLm1lc3NhZ2Uuc3Vic3RyaW5nKDAsIDMyKS5wYWRFbmQoMzUsIFwiLlwiKSkuam9pbihgXG5gKSk7XG4gICAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gIH1cbn1cbnZhciBQaXBlID0gKHJlc3VsdCkgPT4gKHtcbiAgdGhlbjogcGlwZVRoZW4ocmVzdWx0KSxcbiAgcmVzdWx0OiBwaXBlUmVzdWx0KHJlc3VsdCksXG4gIHZhbHVlOiBwaXBlVmFsdWUocmVzdWx0KSxcbiAgdmFsdWVPcjogcGlwZVZhbHVlT3IocmVzdWx0KSxcbiAgdmFsdWVPclRocm93OiBwaXBlVmFsdWVPclRocm93KHJlc3VsdClcbn0pO1xudmFyIHBpcGVUaGVuID0gKHJlc3VsdCkgPT4gKGZuKSA9PiB7XG4gIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgcmV0dXJuIFBpcGUocmVzdWx0KTtcbiAgfVxuICByZXR1cm4gUGlwZShPayhmbihyZXN1bHQudmFsdWUpKSk7XG59O1xudmFyIHBpcGVSZXN1bHQgPSAocmVzdWx0KSA9PiAoKSA9PiByZXN1bHQ7XG52YXIgcGlwZVZhbHVlID0gKHJlc3VsdCkgPT4gKCkgPT4gR2V0VmFsdWUocmVzdWx0KTtcbnZhciBwaXBlVmFsdWVPciA9IChyZXN1bHQpID0+IChvcikgPT4gR2V0VmFsdWUocmVzdWx0KSA/PyBvcjtcbnZhciBwaXBlVmFsdWVPclRocm93ID0gKHJlc3VsdCkgPT4gKCkgPT4ge1xuICBpZiAocmVzdWx0Lm9rKSB7XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbiAgfVxuICB0aHJvdyByZXN1bHQuZXJyb3I7XG59O1xudmFyIEFzeW5jUGlwZSA9IChyZXN1bHQpID0+ICh7XG4gIHRoZW46IGFzeW5jUGlwZVRoZW4ocmVzdWx0KSxcbiAgcmVzdWx0OiBhc3luY1BpcGVSZXN1bHQocmVzdWx0KSxcbiAgdmFsdWU6IGFzeW5jUGlwZVZhbHVlKHJlc3VsdCksXG4gIHZhbHVlT3I6IGFzeW5jUGlwZVZhbHVlT3IocmVzdWx0KSxcbiAgdmFsdWVPclRocm93OiBhc3luY1BpcGVWYWx1ZU9yVGhyb3cocmVzdWx0KVxufSk7XG52YXIgYXN5bmNQaXBlVGhlbiA9IChyZXN1bHQpID0+IChmbikgPT4ge1xuICBjb25zdCB3cmFwcGVkUHJvbWlzZVJlc3VsdCA9IHJlc3VsdC50aGVuKCh1bndyYXBwZWRSZXN1bHQpID0+IHtcbiAgICBpZiAodW53cmFwcGVkUmVzdWx0Lm9rKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBmblJlcyA9IGZuKHVud3JhcHBlZFJlc3VsdC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZm5SZXMpLmNhdGNoKEVycik7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIEVycihlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW53cmFwcGVkUmVzdWx0O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBBc3luY1BpcGUod3JhcHBlZFByb21pc2VSZXN1bHQpO1xufTtcbnZhciBhc3luY1BpcGVSZXN1bHQgPSAocmVzdWx0KSA9PiAoKSA9PiByZXN1bHQ7XG52YXIgYXN5bmNQaXBlVmFsdWUgPSAocmVzdWx0KSA9PiBhc3luYyAoKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgcmVzdWx0O1xuICAgIGlmIChyZXMub2spIHtcbiAgICAgIHJldHVybiByZXMudmFsdWU7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIGFzeW5jUGlwZVZhbHVlT3IgPSAocmVzdWx0KSA9PiBhc3luYyAob3IpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCByZXN1bHQ7XG4gICAgaWYgKHJlcy5vaykge1xuICAgICAgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG9yO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gb3I7XG4gIH1cbn07XG52YXIgYXN5bmNQaXBlVmFsdWVPclRocm93ID0gKHJlc3VsdCkgPT4gYXN5bmMgKCkgPT4ge1xuICBjb25zdCByZXMgPSBhd2FpdCByZXN1bHQ7XG4gIGlmIChyZXMub2spIHtcbiAgICByZXR1cm4gcmVzLnZhbHVlO1xuICB9XG4gIHRocm93IHJlcy5lcnJvcjtcbn07XG52YXIgUmVzdWx0U3RyZWFtID0gKHJlc3VsdHMpID0+ICh7XG4gIG1hcDogc3RyZWFtTWFwKHJlc3VsdHMpLFxuICBmaWx0ZXI6IHN0cmVhbUZpbHRlcihyZXN1bHRzKSxcbiAgcmVzdWx0czogc3RyZWFtUmVzdWx0cyhyZXN1bHRzKSxcbiAgdmFsdWU6IHN0cmVhbVZhbHVlKHJlc3VsdHMpLFxuICB2YWx1ZU9yOiBzdHJlYW1WYWx1ZU9yKHJlc3VsdHMpLFxuICB2YWx1ZU9yVGhyb3c6IHN0cmVhbVZhbHVlT3JUaHJvdyhyZXN1bHRzKVxufSk7XG52YXIgc3RyZWFtTWFwID0gKHJlc3VsdHMpID0+IChmbikgPT4ge1xuICBpZiAoIXJlc3VsdHMub2spIHtcbiAgICByZXR1cm4gUmVzdWx0U3RyZWFtKHJlc3VsdHMpO1xuICB9XG4gIHJldHVybiBSZXN1bHRTdHJlYW0oT2socmVzdWx0cy52YWx1ZS5tYXAoZm4pKSk7XG59O1xudmFyIHN0cmVhbUZpbHRlciA9IChyZXN1bHRzKSA9PiAoZm4pID0+IHtcbiAgaWYgKCFyZXN1bHRzLm9rKSB7XG4gICAgcmV0dXJuIFJlc3VsdFN0cmVhbShyZXN1bHRzKTtcbiAgfVxuICByZXR1cm4gUmVzdWx0U3RyZWFtKE9rKHJlc3VsdHMudmFsdWUuZmlsdGVyKGZuKSkpO1xufTtcbnZhciBzdHJlYW1SZXN1bHRzID0gKHJlc3VsdHMpID0+ICgpID0+IHJlc3VsdHM7XG52YXIgc3RyZWFtVmFsdWUgPSAocmVzdWx0cykgPT4gKCkgPT4gcmVzdWx0cy5vayA/IHJlc3VsdHMudmFsdWUgOiB1bmRlZmluZWQ7XG52YXIgc3RyZWFtVmFsdWVPciA9IChyZXN1bHRzKSA9PiAob3IpID0+IHJlc3VsdHMub2sgPyByZXN1bHRzLnZhbHVlIDogb3I7XG52YXIgc3RyZWFtVmFsdWVPclRocm93ID0gKHJlc3VsdHMpID0+ICgpID0+IHtcbiAgaWYgKHJlc3VsdHMub2spIHtcbiAgICByZXR1cm4gcmVzdWx0cy52YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyByZXN1bHRzLmVycm9yO1xuICB9XG59O1xuXG4vLyBzcmMvc2VydmljZXMvR2VvLnRzXG52YXIgU1VSRl9HRU9fU0VSVklDRV9VUkwgPSBcImh0dHBzOi8vZy5zdXJmc2lkZS5pby9lbnJpY2hcIjtcbnZhciBMT0NBVElPTl9UWVBFX0lQID0gMjtcbnZhciBJUF9TRVJWSUNFU19NQVhNSU5EID0gMztcbnZhciBHZXRHZW8gPSBhc3luYyAobG9nZ2VyLCBhcGlUb2tlbiwgaXApID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiR2VvU2VydmljZVwiKTtcbiAgbG9nMj8uaW5mbyhcIkdldHRpbmcgR2VvIGluZm9cIik7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChTVVJGX0dFT19TRVJWSUNFX1VSTCk7XG4gICAgbG9nMj8uZGVidWcoXCJHZW8gUmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuICAgIHJldHVybiBPayhhd2FpdCByZXNwb25zZS5qc29uKCkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gRXJyKGVycik7XG4gIH1cbn07XG52YXIgR2VvQ29udGV4dFRvT1JUQiA9IChsb2dnZXIsIGdlb0NvbnRleHQpID0+ICh7XG4gIGxhdDogZ2VvQ29udGV4dC5jb29yZHMubGF0aXR1ZGUsXG4gIGxvbjogZ2VvQ29udGV4dC5jb29yZHMubG9uZ2l0dWRlLFxuICBjaXR5OiBnZW9Db250ZXh0LmNpdHksXG4gIHJlZ2lvbjogZ2VvQ29udGV4dC5yZWdpb24sXG4gIGNvdW50cnk6IGdlb0NvbnRleHQuY291bnRyeSxcbiAgemlwOiBnZW9Db250ZXh0LnppcCxcbiAgdHlwZTogTE9DQVRJT05fVFlQRV9JUCxcbiAgYWNjdXJhY3k6IGdlb0NvbnRleHQuY29vcmRzLmFjY3VyYWN5LFxuICB1dGNvZmZzZXQ6IGdlb0NvbnRleHQudXRjb2Zmc2V0LFxuICBpcHNlcnZpY2U6IElQX1NFUlZJQ0VTX01BWE1JTkRcbn0pO1xuLy8gc3JjL3NlcnZpY2VzL0RldmljZS50c1xudmFyIEdldERldmljZSA9IChsb2dnZXIsIHNjcmVlbiwgbmF2aWdhdG9yMiwgbW9iaWxlKSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcIkRldmljZVNlcnZpY2VcIik7XG4gIGxvZzI/LmluZm8oXCJHZXR0aW5nIGRldmljZSBpbmZvXCIpO1xuICBjb25zdCBkZXZpY2VJbmZvID0gZ2V0RGV2aWNlSW5mbyhsb2cyLCBuYXZpZ2F0b3IyLnVzZXJBZ2VudCk7XG4gIGNvbnN0IHN1YSA9IHtcbiAgICBtb2RlbDogZGV2aWNlSW5mbz8ubW9kZWwsXG4gICAgbW9iaWxlOiBtb2JpbGUgPyAxIDogMCxcbiAgICBicm93c2VyczogZGV2aWNlSW5mbz8uYnJvd3NlciAhPT0gdW5kZWZpbmVkID8gW2RldmljZUluZm8uYnJvd3Nlcl0gOiB1bmRlZmluZWQsXG4gICAgcGxhdGZvcm06IGRldmljZUluZm8/Lm9zICE9PSB1bmRlZmluZWQgPyB7XG4gICAgICBicmFuZDogZGV2aWNlSW5mbz8ub3MsXG4gICAgICB2ZXJzaW9uOiBkZXZpY2VJbmZvPy5vc3Y/LnNwbGl0KFwiLlwiKVxuICAgIH0gOiB1bmRlZmluZWQsXG4gICAgYXJjaGl0ZWN0dXJlOiBnZXRDUFVBcmNoaXRlY3R1cmUobG9nMiwgbmF2aWdhdG9yMi51c2VyQWdlbnQsIG1vYmlsZSksXG4gICAgc291cmNlOiAzXG4gIH07XG4gIHJldHVybiBPayh7XG4gICAgbWFrZTogZGV2aWNlSW5mbz8ubWFrZSxcbiAgICBtb2RlbDogZGV2aWNlSW5mbz8ubW9kZWwsXG4gICAgdzogc2NyZWVuLndpZHRoLFxuICAgIGg6IHNjcmVlbi5oZWlnaHQsXG4gICAgbGFuZ3VhZ2U6IG5hdmlnYXRvcjIubGFuZ3VhZ2UsXG4gICAgdWE6IG5hdmlnYXRvcjIudXNlckFnZW50LFxuICAgIGRldmljZXR5cGU6IGdldERldmljZVR5cGUobG9nMiwgc2NyZWVuLCBtb2JpbGUpLFxuICAgIG9zOiBkZXZpY2VJbmZvPy5vcyxcbiAgICBvc3Y6IGRldmljZUluZm8/Lm9zdixcbiAgICBzdWFcbiAgfSk7XG59O1xudmFyIGdldERldmljZUluZm8gPSAobG9nZ2VyLCB1c2VyQWdlbnQpID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwidHJ5R2V0RGV2aWNlSW5mb1wiKTtcbiAgbG9nMj8uZGVidWcoXCJnZXR0aW5nIGRldmljZSBpbmZvXCIpO1xuICBjb25zdCB1c2VyQWdlbnRMb3dlciA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBicm93c2VyID0gZ2V0QnJvd3NlckluZm8obG9nMiwgbmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gIGlmICh1c2VyQWdlbnRMb3dlci5pbmNsdWRlcyhcImFuZHJvaWRcIikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ2V0QW5kcm9pZERldmljZUluZm8obG9nMiwgdXNlckFnZW50KSxcbiAgICAgIGJyb3dzZXJcbiAgICB9O1xuICB9IGVsc2UgaWYgKHVzZXJBZ2VudExvd2VyLmluY2x1ZGVzKFwiaXBob25lXCIpIHx8IHVzZXJBZ2VudExvd2VyLmluY2x1ZGVzKFwiaXBhZFwiKSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5nZXRpUGhvbmVEZXZpY2VJbmZvKGxvZzIsIHVzZXJBZ2VudCksXG4gICAgICBicm93c2VyXG4gICAgfTtcbiAgfSBlbHNlIGlmICh1c2VyQWdlbnRMb3dlci5pbmNsdWRlcyhcIndpbmRvd3MgbnRcIikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWFrZTogXCJNaWNyb3NvZnRcIixcbiAgICAgIG1vZGVsOiBcIldpbmRvd3NcIixcbiAgICAgIG9zOiBcIldpbmRvd3NcIixcbiAgICAgIG9zdjogL1dpbmRvd3MgTlQgKD88b3N2PlswLTkuXSspL2lnLmV4ZWModXNlckFnZW50KT8uZ3JvdXBzPy5vc3YsXG4gICAgICBicm93c2VyXG4gICAgfTtcbiAgfSBlbHNlIGlmICh1c2VyQWdlbnRMb3dlci5pbmNsdWRlcyhcIm1hY2ludG9zaFwiKSkge1xuICAgIHJldHVybiB7XG4gICAgICBtYWtlOiBcIkFwcGxlXCIsXG4gICAgICBtb2RlbDogXCJNYWNpbnRvc2hcIixcbiAgICAgIG9zOiBcIk1hY09TXCIsXG4gICAgICBvc3Y6IC9NYWMgT1MgWCAoPzxvc3Y+WzAtOV9dKykvaWcuZXhlYyh1c2VyQWdlbnQpPy5ncm91cHM/Lm9zdj8ucmVwbGFjZUFsbChcIl9cIiwgXCIuXCIpLFxuICAgICAgYnJvd3NlclxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHsgYnJvd3NlciB9O1xufTtcbnZhciBnZXRBbmRyb2lkRGV2aWNlSW5mbyA9IChsb2dnZXIsIHVzZXJBZ2VudCkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZXRBbmRyb2lkRGV2aWNlSW5mb1wiKTtcbiAgbG9nMj8uZGVidWcoXCJnZXR0aW5nIGFuZHJvaWQgaW5mb1wiKTtcbiAgY29uc3QgbWF0Y2ggPSAvXlteXFxzXStcXHNcXCgoPzxMaW51eD4uKik7XFxzKig/PG9zdj5bXildKyk7XFxzKig/PE1vZGVsPlteKV0rKVxcKS9pZy5leGVjKHVzZXJBZ2VudCk7XG4gIGNvbnN0IG9zdiA9IG1hdGNoPy5ncm91cHM/Lm9zdjtcbiAgY29uc3QgbW9kZWwgPSBtYXRjaD8uZ3JvdXBzPy5Nb2RlbDtcbiAgY29uc3QgcGFydGlhbERldmljZSA9IHtcbiAgICBvczogXCJBbmRyb2lkXCIsXG4gICAgb3N2LFxuICAgIG1vZGVsXG4gIH07XG4gIGlmIChtb2RlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKG1vZGVsLmluY2x1ZGVzKFwiUGl4ZWxcIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnBhcnRpYWxEZXZpY2UsXG4gICAgICAgIG1ha2U6IFwiR29vZ2xlXCJcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChtb2RlbC5pbmNsdWRlcyhcIlNNLVwiKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGFydGlhbERldmljZSxcbiAgICAgICAgbWFrZTogXCJTYW1zdW5nXCJcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChtb2RlbC5zdGFydHNXaXRoKFwiTEctXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wYXJ0aWFsRGV2aWNlLFxuICAgICAgICBtYWtlOiBcIkxHXCJcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChtb2RlbC5zdGFydHNXaXRoKFwibW90b1wiKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucGFydGlhbERldmljZSxcbiAgICAgICAgbWFrZTogXCJNb3Rvcm9sYVwiXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobW9kZWwuc3RhcnRzV2l0aChcIlJlZG1pXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wYXJ0aWFsRGV2aWNlLFxuICAgICAgICBtYWtlOiBcIlhpYW9taVwiXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5wYXJ0aWFsRGV2aWNlLFxuICAgICAgICBtYWtlOiBcIkFuZHJvaWRcIlxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBvczogXCJBbmRyb2lkXCIsXG4gICAgb3N2XG4gIH07XG59O1xudmFyIGdldGlQaG9uZURldmljZUluZm8gPSAobG9nZ2VyLCB1c2VyQWdlbnQpID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiZ2V0SXBob25lRGV2aWNlSW5mb1wiKTtcbiAgbG9nMj8uZGVidWcoXCJnZXR0aW5nIGlQaG9uZSBpbmZvXCIpO1xuICBjb25zdCBtYXRjaCA9IC9eW15cXHNdK1xccypcXCgoPzxEZXZpY2U+W147XSspO1xccyg/PE1vZGVsPlteOyldK1s7KV0pXFxzKD88TW9kZWxFeHQ+W147KV0rWzspXSk/L2lnLmV4ZWModXNlckFnZW50KTtcbiAgY29uc3QgbWFrZSA9IFwiQXBwbGVcIjtcbiAgY29uc3QgZGV2aWNlID0gbWF0Y2g/Lmdyb3Vwcz8uRGV2aWNlO1xuICBjb25zdCBtb2RlbCA9IGRldmljZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImlwYWRcIikgPyBcImlQYWRcIiA6IFwiaVBob25lXCI7XG4gIGNvbnN0IG1vZGVsR3JvdXAgPSBtYXRjaD8uZ3JvdXBzPy5Nb2RlbDtcbiAgY29uc3Qgb3MgPSBcImlPU1wiO1xuICBjb25zdCBvc3ZTZWFyY2ggPSBtb2RlbEdyb3VwID09PSBcIlVcIiA/IG1hdGNoPy5ncm91cHM/Lk1vZGVsRXh0IDogbW9kZWxHcm91cDtcbiAgY29uc3Qgb3N2ID0gb3N2U2VhcmNoICE9PSB1bmRlZmluZWQgPyAvT1MgKD88dmVyPlswLTlfXSspL2lnLmV4ZWMob3N2U2VhcmNoKT8uZ3JvdXBzPy5Nb2RlbEV4dCA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHtcbiAgICBtYWtlLFxuICAgIG1vZGVsLFxuICAgIG9zLFxuICAgIG9zdlxuICB9O1xufTtcbnZhciBnZXRCcm93c2VySW5mbyA9IChsb2dnZXIsIHVzZXJBZ2VudCkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZXRCcm93c2VySW5mb1wiKTtcbiAgbG9nMj8uZGVidWcoXCJnZXR0aW5nIGJyb3dzZXIgaW5mb1wiKTtcbiAgdHJ5IHtcbiAgICBpZiAodXNlckFnZW50LmluY2x1ZGVzKFwiRmlyZWZveC9cIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IHVzZXJBZ2VudC5zcGxpdChcIkZpcmVmb3gvXCIpWzFdPy5zcGxpdChcIi5cIiksXG4gICAgICAgIGJyYW5kOiBcIkZpcmVmb3hcIlxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHVzZXJBZ2VudC5pbmNsdWRlcyhcIkNocm9tZS9cIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IHVzZXJBZ2VudC5zcGxpdChcIkNocm9tZS9cIilbMV0/LnNwbGl0KFwiIFwiKVswXT8uc3BsaXQoXCIuXCIpLFxuICAgICAgICBicmFuZDogXCJDaHJvbWVcIlxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHVzZXJBZ2VudC5pbmNsdWRlcyhcIkNyaU9TXCIpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2ZXJzaW9uOiB1c2VyQWdlbnQuc3BsaXQoXCJDcmlPUy9cIilbMV0/LnNwbGl0KFwiIFwiKVswXT8uc3BsaXQoXCIuXCIpLFxuICAgICAgICBicmFuZDogXCJDaHJvbWVcIlxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHVzZXJBZ2VudC5pbmNsdWRlcyhcIlNhZmFyaS9cIikgJiYgIXVzZXJBZ2VudC5pbmNsdWRlcyhcIkNocm9tZVwiKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmVyc2lvbjogdXNlckFnZW50LnNwbGl0KFwiVmVyc2lvbi9cIilbMV0/LnNwbGl0KFwiIFwiKVswXT8uc3BsaXQoXCIuXCIpLFxuICAgICAgICBicmFuZDogXCJTYWZhcmlcIlxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHVzZXJBZ2VudC5pbmNsdWRlcyhcIkVkZy9cIikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZlcnNpb246IHVzZXJBZ2VudC5zcGxpdChcIkVkZy9cIilbMV0/LnNwbGl0KFwiLlwiKSxcbiAgICAgICAgYnJhbmQ6IFwiRWRnZVwiXG4gICAgICB9O1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgbG9nMj8uZXJyb3IoZXJyb3IyKTtcbiAgfVxufTtcbnZhciBnZXRDUFVBcmNoaXRlY3R1cmUgPSAobG9nZ2VyLCB1c2VyQWdlbnQsIG1vYmlsZSkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZXRDUFVBcmNoaXRlY3R1cmVcIik7XG4gIGxvZzI/LmRlYnVnKFwiR2V0dGluZyBDUFUgYXJjaFwiKTtcbiAgaWYgKC9XaW42NHx4NjR8eDg2XzY0fFdPVzY0Ly50ZXN0KHVzZXJBZ2VudCkpIHtcbiAgICByZXR1cm4gXCJ4NjRcIjtcbiAgfVxuICBpZiAoL1dpbjMyfHg4Ni8udGVzdCh1c2VyQWdlbnQpKSB7XG4gICAgcmV0dXJuIFwieDg2XCI7XG4gIH1cbiAgaWYgKC9hYXJjaDY0fGFybTY0Ly50ZXN0KHVzZXJBZ2VudCkpIHtcbiAgICByZXR1cm4gXCJBUk02NFwiO1xuICB9XG4gIGlmICgvYXJtdlxcZCsvLnRlc3QodXNlckFnZW50KSkge1xuICAgIHJldHVybiBcIkFSTVwiO1xuICB9XG4gIGlmIChtb2JpbGUpIHtcbiAgICByZXR1cm4gXCJBUk1cIjtcbiAgfVxuICBsb2cyPy53YXJuKFwiRmFpbGVkIHRvIGdldCBjcHUgYXJjaGl0ZWN0dXJlXCIpO1xuICByZXR1cm47XG59O1xudmFyIGdldERldmljZVR5cGUgPSAobG9nZ2VyLCBzY3JlZW4sIG1vYmlsZSkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZXREZXZpY2VUeXBlXCIpO1xuICBsb2cyPy5kZWJ1ZyhcImdldHRpbmcgZGV2aWNlIHR5cGVcIik7XG4gIGNvbnN0IE1JTklNVU1fU0hPUlRfVEFCTEVUID0gNjAwO1xuICBjb25zdCBNQVhJTVVNX0xPTkdfVEFCTEVUID0gOTYwO1xuICBjb25zdCBoYXNUb3VjaCA9IG1vYmlsZTtcbiAgaWYgKCFoYXNUb3VjaCkge1xuICAgIHJldHVybiBBZENvbTEwRGV2aWNlVHlwZXMuUEM7XG4gIH1cbiAgY29uc3Qgd2lkdGggPSBzY3JlZW4ud2lkdGg7XG4gIGNvbnN0IGhlaWdodCA9IHNjcmVlbi5oZWlnaHQ7XG4gIGNvbnN0IFtzaG9ydGVyU2lkZSwgbG9uZ2VyU2lkZV0gPSBbd2lkdGgsIGhlaWdodF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICBpZiAoaGFzVG91Y2ggJiYgc2hvcnRlclNpZGUgPj0gTUlOSU1VTV9TSE9SVF9UQUJMRVQgJiYgbG9uZ2VyU2lkZSA+PSBNQVhJTVVNX0xPTkdfVEFCTEVUKSB7XG4gICAgcmV0dXJuIEFkQ29tMTBEZXZpY2VUeXBlcy5UYWJsZXQ7XG4gIH1cbiAgcmV0dXJuIEFkQ29tMTBEZXZpY2VUeXBlcy5Nb2JpbGU7XG59O1xuLy8gc3JjL3NlcnZpY2VzL0NvbmZpZ3VyYXRpb24udHNcbnZhciBHZXRDb25maWd1cmF0aW9uID0gYXN5bmMgKGxvZ2dlciwgdXJsLCBoYW5kbGViYXJzLCBhY2NvdW50SWQsIHNpdGVJZCkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJDb25maWd1cmF0aW9uU2VydmljZVwiKS53aXRoKHVybCkud2l0aChhY2NvdW50SWQpLndpdGgoc2l0ZUlkKTtcbiAgbG9nMj8uaW5mbyhcIkdldHRpbmcgY29uZmlndXJhdGlvblwiKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3VybH0vJHthY2NvdW50SWR9LyR7c2l0ZUlkfS9jb25maWcuanNvbmApO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGxvZzI/LmVycm9yKFwiRmFpbGVkIHRvIGdldCBjb25maWd1cmF0aW9uXCIsIHVybCwgYWNjb3VudElkLCBzaXRlSWQpO1xuICAgICAgcmV0dXJuIEVycihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGNvbmZpZ3VyYXRpb25cIikpO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgaWYgKGNvbmZpZy5zZXR0aW5ncyA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy50ZW1wbGF0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9nMj8uZXJyb3IoXCJjb25maWd1cmF0aW9uIHdhcyBhbiBpbnZhbGlkIGZvcm1hdFwiKTtcbiAgICAgIHJldHVybiBFcnIobmV3IEVycm9yKFwiY29uZmlndXJhdGlvbiB3YXMgYW4gaW52YWxpZCBmb3JtYXRcIikpO1xuICAgIH1cbiAgICBsb2cyPy5kZWJ1ZyhcImNvbmZpZ3VyYXRpb246IFwiLCBjb25maWcpO1xuICAgIHJldHVybiBhd2FpdCBtYXBDb25maWcobG9nMiwgaGFuZGxlYmFycywgY29uZmlnKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIEVycihlcnIpO1xuICB9XG59O1xudmFyIG1hcENvbmZpZyA9IGFzeW5jIChsb2dnZXIsIGhhbmRsZWJhcnMsIGNvbmZpZykgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJtYXBDb25maWdcIik7XG4gIGxvZzI/LmRlYnVnKFwibWFwcGluZyBjb25maWd1cmF0aW9uXCIpO1xuICByZXR1cm4gT2soe1xuICAgIHNldHRpbmdzOiBjb25maWcuc2V0dGluZ3MsXG4gICAgdGVtcGxhdGVzOiB7XG4gICAgICBjbGlja1Rocm91Z2hVcmxUZW1wbGF0ZTogaGFuZGxlYmFycy50ZW1wbGF0ZSgoYXdhaXQgaW1wb3J0TW9kdWxlKGxvZzIsIGBleHBvcnQgZGVmYXVsdCAke2NvbmZpZy50ZW1wbGF0ZXM/LmNsaWNrVGhyb3VnaFVybFRlbXBsYXRlID8/IFwiXCJ9YCkpLmRlZmF1bHQpLFxuICAgICAgcHJvZHVjdENhcmRUZW1wbGF0ZTogaGFuZGxlYmFycy50ZW1wbGF0ZSgoYXdhaXQgaW1wb3J0TW9kdWxlKGxvZzIsIGBleHBvcnQgZGVmYXVsdCAke2NvbmZpZy50ZW1wbGF0ZXM/LnByb2R1Y3RDYXJkVGVtcGxhdGUgPz8gXCJcIn1gKSkuZGVmYXVsdCksXG4gICAgICBqYXZhc2NyaXB0Q2FsbGJhY2tzOiBhd2FpdCBpbXBvcnRNb2R1bGUobG9nMiwgY29uZmlnLnRlbXBsYXRlcz8uamF2YXNjcmlwdENhbGxiYWNrcyA/PyBcIlwiKSxcbiAgICAgIHByb2R1Y3RDYXJkU3R5bGVzaGVldDogY29uZmlnLnRlbXBsYXRlcz8ucHJvZHVjdENhcmRTdHlsZXNoZWV0LFxuICAgICAgY2Fyb3VzZWxTdHlsZXNoZWV0OiBjb25maWcudGVtcGxhdGVzPy5jYXJvdXNlbFN0eWxlc2hlZXRcbiAgICB9XG4gIH0pO1xufTtcbnZhciBpbXBvcnRNb2R1bGUgPSBhc3luYyAobG9nZ2VyLCBzY3JpcHQpID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiaW1wb3J0TW9kdWxlXCIpO1xuICBsb2cyPy5kZWJ1ZyhcImltcG9ydGluZ1wiLCBzY3JpcHQpO1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3NjcmlwdF0sIHsgdHlwZTogXCJ0ZXh0L2phdmFzY3JpcHRcIiB9KTtcbiAgY29uc3QgbW9kdWxlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgbG9nMj8uZGVidWcoXCJtb2R1bGVVcmxcIiwgbW9kdWxlVXJsKTtcbiAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KG1vZHVsZVVybCk7XG4gIGxvZzI/LmRlYnVnKFwibW9kdWxlOlwiLCBtb2R1bGUpO1xuICByZXR1cm4gbW9kdWxlO1xufTtcbi8vIHNyYy9zZXJ2aWNlcy9CaWRkZXIudHNcbnZhciBBVUNUSU9OX1BSSUNFX01BQ1JPID0gLyg/OlxcJHwlMjQpPyg/Olxce3wlN2IpYXVjdGlvbl9wcmljZSg/OlxcfXwlN2QpL2lnO1xudmFyIFJlcXVlc3RCaWRzID0gYXN5bmMgKGxvZ2dlciwgdXJsLCBhY2NvdW50SWQsIHNpdGVJZCwgbG9jYXRpb25JZCwgY2hhbm5lbElkLCBiaWRSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcIlJlcXVlc3RCaWRzXCIpLndpdGgoYWNjb3VudElkKS53aXRoKHNpdGVJZCkud2l0aChsb2NhdGlvbklkKS53aXRoKGNoYW5uZWxJZCk7XG4gIGxvZzI/LmluZm8oXCJSZXF1ZXN0aW5nIGJpZHNcIik7XG4gIGxvZzI/LmRlYnVnKGJpZFJlcXVlc3QpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoYmlkUmVxdWVzdClcbiAgICB9KTtcbiAgICBsb2cyPy5kZWJ1ZyhcIkdvdCByZXNwb25zZVwiLCByZXNwb25zZSk7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgICBjYXNlIDIwNDpcbiAgICAgICAgICBsb2cyPy53YXJuKFwiTm8gYmlkc1wiLCBiaWRSZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIEVycihuZXcgTm9CaWRzRXJyb3IoYmlkUmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgbG9nMj8uZXJyb3IoXCJCaWRkZXIgZmFpbGVkIHNlcnZlcnNpZGUuIFJlcG9ydCB0aGlzIGVycm9yLlwiLCBiaWRSZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIEVycihuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvcihiaWRSZXF1ZXN0LCByZXNwb25zZSkpO1xuICAgICAgICBjYXNlIDUwMzpcbiAgICAgICAgICBsb2cyPy5lcnJvcihcIkJpZGRlciBzdGFydGluZyB1cC4gVHJ5IGFnYWluIGluIGEgZmV3IG1pbnV0ZXNcIiwgYmlkUmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiBFcnIobmV3IEJpZGRlclN0YXJ0aW5nVXBFcnJvcihiaWRSZXF1ZXN0LCByZXNwb25zZSkpO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxvZzI/LmVycm9yKFwiVW5rbm93biBiaWRkZXIgZXJyb3JcIiwgYmlkUmVxdWVzdCwgcmVzcG9uc2UpO1xuICAgICAgICAgIHJldHVybiBFcnIobmV3IFVua25vd25CaWRkZXJFcnJvcihiaWRSZXF1ZXN0LCByZXNwb25zZSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2cyPy5kZWJ1ZyhcIlN1Y2Nlc3NmdWxseSBnb3QgYmlkc1wiLCBiaWRSZXF1ZXN0KTtcbiAgICBjb25zdCBiaWRSZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAgICBpZiAoYmlkUmVzcG9uc2Uuc2VhdGJpZCA9PT0gdW5kZWZpbmVkIHx8IGJpZFJlc3BvbnNlLnNlYXRiaWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2cyPy5lcnJvcihcIkJpZGRlciBkaWRuJ3QgcmV0dXJuIGFueSBzZWF0Ymlkc1wiKTtcbiAgICAgIHJldHVybiBFcnIobmV3IE1hbGZvcm1lZEJpZFJlc3BvbnNlRXJyb3IoYmlkUmVxdWVzdCwgcmVzcG9uc2UsIGJpZFJlc3BvbnNlKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwO2kgPCBiaWRSZXNwb25zZS5zZWF0YmlkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzZWF0YmlkID0gYmlkUmVzcG9uc2Uuc2VhdGJpZFtpXTtcbiAgICAgIGlmIChzZWF0YmlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbG9nMj8ud2FybihgU2VhdGJpZCAjJHtpfSB3YXMgdW5kZWZpbmVkYCwgYmlkUmVxdWVzdCwgcmVzcG9uc2UsIGJpZFJlc3BvbnNlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBqID0gMDtqIDwgc2VhdGJpZC5iaWQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgYmlkID0gc2VhdGJpZC5iaWRbal07XG4gICAgICAgIGlmIChiaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxvZzI/Lndhcm4oYEJpZCAjJHtqfSBpbiBzZWF0YmlkICMke2l9IHdhcyB1bmRlZmluZWRgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGJpZC5hZG0gPSBkZWNvZGVVUklDb21wb25lbnQoYmlkPy5hZG0gPz8gXCJcIikucmVwbGFjZUFsbCgvXFxcXFwiL2lnLCAnXCInKTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbG9nMj8uZGVidWcoXCJBZG0gaXMgbm90IGVuY29kZWQuIFRoaXMgaXMgbm90IGFuIGlzc3VlLiBNb3Zpbmcgb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJpZC5udXJsID0gYmlkLm51cmw/LnJlcGxhY2UoQVVDVElPTl9QUklDRV9NQUNSTywgYmlkLnByaWNlLnRvU3RyaW5nKCkpO1xuICAgICAgICBiaWQuYWRtID0gYmlkLmFkbT8ucmVwbGFjZUFsbChBVUNUSU9OX1BSSUNFX01BQ1JPLCBiaWQucHJpY2UudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZzI/LmRlYnVnKFwiUmV0dXJuaW5nIGJpZCByZXNwb25zZXNcIik7XG4gICAgcmV0dXJuIE9rKGJpZFJlc3BvbnNlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIEVycihlcnIpO1xuICB9XG59O1xuXG5jbGFzcyBOb0JpZHNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVxdWVzdDtcbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXCIyMDQgLSBObyBiaWRzIGF2YWlsYWJsZSBmb3IgcmVxdWVzdFwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxufVxuXG5jbGFzcyBJbnRlcm5hbFNlcnZlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZXF1ZXN0O1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihcIjUwMCAtIEJpZGRlciBoYWQgYW4gdW5rbm93biBzZXJ2ZXJzaWRlIGVycm9yXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG59XG5cbmNsYXNzIEJpZGRlclN0YXJ0aW5nVXBFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVxdWVzdDtcbiAgcmVzcG9uc2U7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXCI1MDMgLSBCaWRkZXIgaXMgc3RhcnRpbmcgdXBcIik7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIH1cbn1cblxuY2xhc3MgVW5rbm93bkJpZGRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZXF1ZXN0O1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihcIlVua25vd24gYmlkZGVyIGVycm9yXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICB9XG59XG5cbmNsYXNzIE1hbGZvcm1lZEJpZFJlc3BvbnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlcXVlc3Q7XG4gIHJlc3BvbnNlO1xuICBiaWRSZXNwb25zZTtcbiAgY29uc3RydWN0b3IocmVxdWVzdCwgcmVzcG9uc2UsIGJpZFJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXCJNYWxmb3JtZWQgYmlkIHJlc3BvbnNlIGVycm9yXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuYmlkUmVzcG9uc2UgPSBiaWRSZXNwb25zZTtcbiAgfVxufVxuLy8gc3JjL3NlcnZpY2VzL1Byb2R1Y3QudHNcbmFzeW5jIGZ1bmN0aW9uKiBHZXRTcG9uc29yZWRQcm9kdWN0KGxvZ2dlciwgdXJsLCBhY2NvdW50SWQsIGxvY2F0aW9uSWQsIG5hdGl2ZUlkKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcIkdldFNwb25zb3JlZFByb2R1Y3RcIikud2l0aChhY2NvdW50SWQpLndpdGgobG9jYXRpb25JZCkud2l0aChuYXRpdmVJZCk7XG4gIGxvZzI/LmluZm8oXCJHZXR0aW5nIHNwb25zb3JlZCBwcm9kdWN0XCIpO1xuICB0cnkge1xuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dXJsfS9uYXRpdmUvJHthY2NvdW50SWR9LyR7bG9jYXRpb25JZH0vJHtuYXRpdmVJZH0uanNvbmApO1xuICAgIGlmIChyYXdSZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgbG9nMj8uZXJyb3IoXCJwcm9kdWN0IGZlZWQgc2VydmljZSByZXR1cm5lZCB3aXRoIG5vbi0yMDAgcmVzcG9uc2VcIiwgcmF3UmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcHJvZHVjdHMgPSByYXdSZXNwb25zZTtcbiAgICBsb2cyPy5kZWJ1ZyhcInJlc3BvbnNlXCIsIHByb2R1Y3RzKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9kdWN0cykpIHtcbiAgICAgIGxvZzI/LmRlYnVnKFwiQnJhbmQgbGV2ZWwgY3JlYXRpdmVcIik7XG4gICAgICBjb25zdCBwcm9kdWN0QXJyID0gcHJvZHVjdHM7XG4gICAgICBmb3IgKGNvbnN0IHByb2R1Y3Qgb2YgcHJvZHVjdEFycikge1xuICAgICAgICB5aWVsZCBtYXBSZXNwb25zZVRvUHJvZHVjdEluZm8obG9nMiwgcHJvZHVjdCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZzI/LmRlYnVnKFwiSW5kaXZpZHVhbCBwcm9kdWN0IGNyZWF0aXZlXCIpO1xuICAgICAgY29uc3QgcHJvZHVjdCA9IHByb2R1Y3RzO1xuICAgICAgcmV0dXJuIG1hcFJlc3BvbnNlVG9Qcm9kdWN0SW5mbyhsb2cyLCBwcm9kdWN0KTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZzI/LmVycm9yKGVycik7XG4gIH1cbn1cbnZhciBHZXRBbGxTcG9uc29yZWRQcm9kdWN0cyA9IGFzeW5jIChsb2dnZXIsIHVybCwgYWNjb3VudElkLCBsb2NhdGlvbklkLCBuYXRpdmVJZCkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJHZXRTcG9uc29yZWRQcm9kdWN0XCIpLndpdGgoYWNjb3VudElkKS53aXRoKGxvY2F0aW9uSWQpLndpdGgobmF0aXZlSWQpO1xuICBsb2cyPy5pbmZvKFwiR2V0dGluZyBzcG9uc29yZWQgcHJvZHVjdFwiKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXdSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3VybH0vbmF0aXZlLyR7YWNjb3VudElkfS8ke2xvY2F0aW9uSWR9LyR7bmF0aXZlSWR9Lmpzb25gKTtcbiAgICBpZiAocmF3UmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIGxvZzI/LmVycm9yKFwicHJvZHVjdCBmZWVkIHNlcnZpY2UgcmV0dXJuZWQgd2l0aCBub24tMjAwIHJlc3BvbnNlXCIsIHJhd1Jlc3BvbnNlLnN0YXR1cyk7XG4gICAgICByZXR1cm4gRXJyKG5ldyBOb05hdGl2ZUVycm9yKG5hdGl2ZUlkKSk7XG4gICAgfVxuICAgIGNvbnN0IHByb2R1Y3RzID0gcmF3UmVzcG9uc2U7XG4gICAgbG9nMj8uZGVidWcoXCJyZXNwb25zZVwiLCBwcm9kdWN0cyk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvZHVjdHMpKSB7XG4gICAgICBsb2cyPy5kZWJ1ZyhcIkJyYW5kIGxldmVsIGNyZWF0aXZlXCIpO1xuICAgICAgY29uc3QgcHJvZHVjdEFyciA9IHByb2R1Y3RzO1xuICAgICAgY29uc3QgbWFwUmVzcG9uc2VUb1Byb2R1Y3RJbmZvTG9nZ2VkID0gbWFwUmVzcG9uc2VUb1Byb2R1Y3RJbmZvLmJpbmQodW5kZWZpbmVkLCBsb2cyKTtcbiAgICAgIHJldHVybiBPayhwcm9kdWN0QXJyLm1hcChtYXBSZXNwb25zZVRvUHJvZHVjdEluZm9Mb2dnZWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nMj8uZGVidWcoXCJJbmRpdmlkdWFsIHByb2R1Y3QgY3JlYXRpdmVcIik7XG4gICAgICBjb25zdCBwcm9kdWN0ID0gcHJvZHVjdHM7XG4gICAgICByZXR1cm4gT2soW21hcFJlc3BvbnNlVG9Qcm9kdWN0SW5mbyhsb2cyLCBwcm9kdWN0KV0pO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nMj8uZXJyb3IoZXJyKTtcbiAgICByZXR1cm4gRXJyKGVycik7XG4gIH1cbn07XG52YXIgR2V0UmVjb21tZW5kZWRQcm9kdWN0ID0gYXN5bmMgKGxvZ2dlciwgdXJsLCBhY2NvdW50SWQsIGxvY2F0aW9uSWQsIHByb2R1Y3RJZCkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJHZXRSZWNvbW1lbmRlZFByb2R1Y3RcIikud2l0aChhY2NvdW50SWQpLndpdGgobG9jYXRpb25JZCkud2l0aChwcm9kdWN0SWQpO1xuICBsb2cyPy5pbmZvKFwiR2V0dGluZyByZWNvbW1lbmRlZCBwcm9kdWN0XCIpO1xuICB0cnkge1xuICAgIGNvbnN0IHJhd1Jlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dXJsfXByb2R1Y3QvJHthY2NvdW50SWR9LyR7bG9jYXRpb25JZH0vJHtwcm9kdWN0SWR9Lmpzb25gKTtcbiAgICBpZiAocmF3UmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIGxvZzI/LmVycm9yKFwicHJvZHVjdCBmZWVkIHNlcnZpY2UgcmV0dXJuZWQgd2l0aCBub24tMjAwIHJlc3BvbnNlXCIsIHJhd1Jlc3BvbnNlLnN0YXR1cyk7XG4gICAgICByZXR1cm4gRXJyKG5ldyBFcnJvcihcInByb2R1Y3QgZmVlZCBzZXJ2aWNlIHJldHVybmVkIHdpdGggbm9uLTIwMCByZXNwb25zZVwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1Byb2R1Y3QgPSBhd2FpdCByYXdSZXNwb25zZS5qc29uKCk7XG4gICAgbG9nMj8uZGVidWcoXCJyZXNwb25zZVwiLCByYXdQcm9kdWN0KTtcbiAgICBjb25zdCBwcm9kdWN0SW5mbyA9IG1hcFJlc3BvbnNlVG9Qcm9kdWN0SW5mbyhsb2cyLCByYXdQcm9kdWN0KTtcbiAgICBsb2cyPy5kZWJ1ZyhcIm1hcHBlZFwiLCBwcm9kdWN0SW5mbyk7XG4gICAgcmV0dXJuIE9rKHByb2R1Y3RJbmZvKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgbG9nMj8uZXJyb3IoZXJyKTtcbiAgICByZXR1cm4gRXJyKGVycik7XG4gIH1cbn07XG52YXIgbWFwUmVzcG9uc2VUb1Byb2R1Y3RJbmZvID0gKGxvZ2dlciwgZGF0YSkgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJtYXBSZXNwb25zZVRvUHJvZHVjdEluZm9cIik7XG4gIGxvZzI/LmRlYnVnKFwiTWFwcGluZyBwcm9kdWN0XCIpO1xuICBjb25zdCBnZXRGaWVsZCA9IGZpZWxkT3JVbmRlZi5iaW5kKHVuZGVmaW5lZCwgZGF0YSk7XG4gIHJldHVybiB7XG4gICAgaW1hZ2U6IGdldEZpZWxkKFwiaW1hZ2VfbGlua1wiKSxcbiAgICBwcmljZTogZ2V0RmllbGQoXCJwcmljZVwiKSxcbiAgICBzYWxlUHJpY2U6IGdldEZpZWxkKFwic2FsZV9wcmljZVwiKSxcbiAgICB0aGM6IGdldEZpZWxkKFwidGhjXCIpLFxuICAgIGNiZDogZ2V0RmllbGQoXCJjYmRcIiksXG4gICAgc3RyYWluOiBnZXRGaWVsZChcInN0cmFpblwiKSxcbiAgICBuYW1lOiBnZXRGaWVsZChcIm5hbWVcIiksXG4gICAgYnJhbmRfbmFtZTogZ2V0RmllbGQoXCJicmFuZFwiKSxcbiAgICBicmFuZE5hbWU6IGdldEZpZWxkKFwiYnJhbmRcIiksXG4gICAgcHJvZHVjdFR5cGU6IGdldEZpZWxkKFwicHJvZHVjdFR5cGVcIiksXG4gICAgZGV0YWlsczogZ2V0RmllbGQoXCJkZXRhaWxzXCIpLFxuICAgIGN0YTogZ2V0RmllbGQoXCJjdGFcIiksXG4gICAgY2xpY2t0aHJvdWdoVXJsOiBnZXRGaWVsZChcImNsaWNrdGhyb3VnaFVybFwiKSxcbiAgICB3aW5Vcmw6IGdldEZpZWxkKFwid2luVXJsXCIpLFxuICAgIHBpeGVsVXJsOiBnZXRGaWVsZChcInBpeGVsVXJsXCIpLFxuICAgIGV4dDogZGF0YVxuICB9O1xufTtcbnZhciBmaWVsZE9yVW5kZWYgPSAoZGF0YSwgZmllbGQpID0+IHtcbiAgaWYgKGZpZWxkIGluIGRhdGEpIHtcbiAgICByZXR1cm4gU3RyaW5nKGRhdGFbZmllbGRdKTtcbiAgfVxuICByZXR1cm47XG59O1xuXG5jbGFzcyBOb05hdGl2ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYXRpdmVJZDtcbiAgY29uc3RydWN0b3IobmF0aXZlSWQpIHtcbiAgICBzdXBlcihcIk5hdGl2ZSBJRCBkaWQgbm90IGV4aXN0IGluIHByb2R1Y3QgZmVlZDogXCIgKyBuYXRpdmVJZCk7XG4gICAgdGhpcy5uYXRpdmVJZCA9IG5hdGl2ZUlkO1xuICB9XG59XG4vLyBzcmMvc2VydmljZXMvUmVjb21tZW5kZXIudHNcbmFzeW5jIGZ1bmN0aW9uKiBHZW5lcmF0ZVRvcFByb2R1Y3RzKGxvZ2dlciwgcHJvZHVjdEZlZWQsIHVybCwgYWNjb3VudElkLCBzaXRlSWQsIGxvY2F0aW9uSWQpIHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiR2VuZXJhdGVUb3BQcm9kdWN0c1wiKS53aXRoKGFjY291bnRJZCkud2l0aChzaXRlSWQpLndpdGgobG9jYXRpb25JZCk7XG4gIGxvZzI/LmluZm8oXCJHZW5lcmF0aW5nIHRvcCBwcm9kdWN0c1wiKTtcbiAgeWllbGQqIGdlbmVyYXRlUHJvZHVjdFJlY29tbWVuZGF0aW9uKGxvZ2dlciwgcHJvZHVjdEZlZWQsIHVybCwgYWNjb3VudElkLCBzaXRlSWQsIGxvY2F0aW9uSWQsIHVuZGVmaW5lZCwgXCJ0b3AtcHJvZHVjdHNcIik7XG59XG5hc3luYyBmdW5jdGlvbiogR2VuZXJhdGVGb3JZb3UobG9nZ2VyLCBwcm9kdWN0RmVlZCwgdXJsLCBhY2NvdW50SWQsIHNpdGVJZCwgbG9jYXRpb25JZCwgdXNlcklkKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcIkdlbmVyYXRlRm9yWW91XCIpLndpdGgoYWNjb3VudElkKS53aXRoKHNpdGVJZCkud2l0aChsb2NhdGlvbklkKS53aXRoKHVzZXJJZCk7XG4gIGxvZzI/LmluZm8oXCJHZW5lcmF0aW5nIGZvciB5b3VcIik7XG4gIHlpZWxkKiBnZW5lcmF0ZVByb2R1Y3RSZWNvbW1lbmRhdGlvbihsb2dnZXIsIHByb2R1Y3RGZWVkLCB1cmwsIGFjY291bnRJZCwgc2l0ZUlkLCBsb2NhdGlvbklkLCB1c2VySWQsIFwiZm9yLXlvdVwiKTtcbn1cbmFzeW5jIGZ1bmN0aW9uKiBHZW5lcmF0ZVByZXZpb3VzUHVyY2hhc2VzKGxvZ2dlciwgcHJvZHVjdEZlZWQsIHVybCwgYWNjb3VudElkLCBzaXRlSWQsIGxvY2F0aW9uSWQsIHVzZXJJZCkge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJHZW5lcmF0ZVByZXZpb3VzUHVyY2hhc2VzXCIpLndpdGgoYWNjb3VudElkKS53aXRoKHNpdGVJZCkud2l0aChsb2NhdGlvbklkKS53aXRoKHVzZXJJZCk7XG4gIGxvZzI/LmluZm8oXCJHZW5lcmF0aW5nIHByZXZpb3VzIHB1cmNoYXNlc1wiKTtcbiAgeWllbGQqIGdlbmVyYXRlUHJvZHVjdFJlY29tbWVuZGF0aW9uKGxvZzIsIHByb2R1Y3RGZWVkLCB1cmwsIGFjY291bnRJZCwgc2l0ZUlkLCBsb2NhdGlvbklkLCB1c2VySWQsIFwiYnV5LWFnYWluXCIpO1xufVxuYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlUHJvZHVjdFJlY29tbWVuZGF0aW9uKGxvZ2dlciwgcHJvZHVjdEZlZWQsIHVybCwgYWNjb3VudElkLCBzaXRlSWQsIGxvY2F0aW9uSWQsIHVzZXJJZCwgdHlwZSkge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZW5lcmF0cmVQcm9kdWN0UmVjb21tZW5kYXRpb25cIik7XG4gIGxvZzI/LmRlYnVnKFwiR2VuZXJhdGluZyBwcm9kdWN0IHJlY29tbWVuZGF0aW9uXCIpO1xuICBjb25zdCByZWNvbW1lbmRhdGlvbnMgPSBhd2FpdCBmZXRjaFJlY29tbWVuZGF0aW9ucyhsb2cyLCB1cmwsIGFjY291bnRJZCwgc2l0ZUlkLCBsb2NhdGlvbklkLCB1c2VySWQsIHR5cGUpO1xuICBpZiAoIXJlY29tbWVuZGF0aW9ucy5vaykge1xuICAgIGxvZzI/LmVycm9yKHJlY29tbWVuZGF0aW9ucy5lcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHlpZWxkKiBnZW5lcmF0ZVByb2R1Y3QobG9nMiwgcHJvZHVjdEZlZWQsIGFjY291bnRJZCwgbG9jYXRpb25JZCwgcmVjb21tZW5kYXRpb25zLnZhbHVlKTtcbiAgbG9nMj8uZGVidWcoXCJvdXQgb2YgcmVjb21tZW5kYXRpb25zXCIpO1xufVxudmFyIGZldGNoUmVjb21tZW5kYXRpb25zID0gYXN5bmMgKGxvZ2dlciwgdXJsLCBhY2NvdW50SWQsIHNpdGVJZCwgbG9jYXRpb25JZCwgdXNlcklkLCB0eXBlKSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImZldGNoUmVjb21tZW5kYXRpb25zXCIpO1xuICBsb2cyPy5kZWJ1ZyhcIkZldGNoaW5nIHJlY29tbWVuZGF0aW9uc1wiKTtcbiAgY29uc3Qga2V5ID0gYGFjY291bnRJZD0ke2FjY291bnRJZH0mc2l0ZUlkPSR7c2l0ZUlkfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mdXNlcklkPSR7dXNlcklkID8/IFwibnVsbFwifWA7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGZldGNoKGAke3VybH0vci8ke3R5cGV9PyR7a2V5fSZsaW1pdD0xMDBgKTtcbiAgICBpZiAoIXJlc3VsdHMub2spIHtcbiAgICAgIHJldHVybiBFcnIobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgcmVjb21tZW5kYXRpb25zLiBTZXJ2aWNlIHJldHVybmVkIFwiICsgcmVzdWx0cy5zdGF0dXMpKTtcbiAgICB9XG4gICAgY29uc3QgcmVjb21tZW5kYXRpb25zID0gYXdhaXQgcmVzdWx0cy5qc29uKCk7XG4gICAgY29uc3QgZXJyb3IyID0gcmVjb21tZW5kYXRpb25zLmVycm9yO1xuICAgIGlmIChlcnJvcjIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIEVycihuZXcgRXJyb3IoZXJyb3IyKSk7XG4gICAgfVxuICAgIHJldHVybiBPayhyZWNvbW1lbmRhdGlvbnMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gRXJyKGVycik7XG4gIH1cbn07XG5hc3luYyBmdW5jdGlvbiogZ2VuZXJhdGVQcm9kdWN0KGxvZ2dlciwgcHJvZHVjdEZlZWQsIGFjY291bnRJZCwgbG9jYXRpb25JZCwgcmVzdWx0cykge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZW5lcmF0ZVByb2R1Y3RcIik7XG4gIGxvZzI/LmRlYnVnKFwiZ2VuZXJhdGluZyBwcm9kdWN0IGluZm9cIik7XG4gIGZvciAoY29uc3QgaXRlbSBvZiByZXN1bHRzKSB7XG4gICAgY29uc3QgaXRlbUlkID0gaXRlbS5pdGVtX2lkO1xuICAgIHRyeSB7XG4gICAgICBsb2cyPy5kZWJ1ZyhcIml0ZW1JZFwiLCBpdGVtSWQpO1xuICAgICAgY29uc3QgcHJvZHVjdCA9IGF3YWl0IHByb2R1Y3RGZWVkKGl0ZW1JZCk7XG4gICAgICBsb2cyPy5kZWJ1ZyhcInByb2R1Y3RcIiwgaXRlbUlkLCBwcm9kdWN0KTtcbiAgICAgIGlmIChwcm9kdWN0Lm9rKSB7XG4gICAgICAgIHlpZWxkIHByb2R1Y3QudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cyPy53YXJuKFwiaXRlbSB3YXMgbWlzc2luZyBmcm9tIHByb2R1Y3QgZmVlZFwiLCBpdGVtSWQpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgbG9nMj8ud2FybihcImNvdWxkbid0IGdldCBwcm9kdWN0XCIsIGVycik7XG4gICAgfVxuICB9XG4gIGxvZzI/LmluZm8oXCJubyBtb3JlIHByb2R1Y3RzLiBFeGl0aW5nXCIpO1xufVxuLy8gc3JjL2hlbHBlcnMvTmF0aXZlUmVxdWVzdEJ1aWxkZXIudHNcbnZhciBERUZBVUxUX0xFTkdUSCA9IDgwO1xudmFyIFZBU1RfM18wID0gMztcbnZhciBidWlsZGVyV2l0aFZlciA9IChsb2dnZXIsIHN0YXRlLCB2ZXIpID0+IHtcbiAgbG9nZ2VyPy5kZWJ1ZyhcIkFkZGluZyB2ZXJzaW9uIHRvIG5hdGl2ZSByZXF1ZXN0XCIsIHZlcik7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzKGxvZ2dlciwgeyAuLi5zdGF0ZSwgdmVyIH0pO1xufTtcbnZhciBidWlsZGVyV2l0aENvbnRleHQgPSAobG9nZ2VyLCBzdGF0ZSwgY29udGV4dDIpID0+IHtcbiAgbG9nZ2VyPy5kZWJ1ZyhcIkFkZGluZyBjb250ZXh0IHRvIG5hdGl2ZSByZXF1ZXN0XCIsIGNvbnRleHQyKTtcbiAgcmV0dXJuIGJvdHNCdWlsZEJvdHMobG9nZ2VyLCB7IC4uLnN0YXRlLCBjb250ZXh0OiBjb250ZXh0MiB9KTtcbn07XG52YXIgYnVpbGRlcldpdGhDb250ZXh0U3ViVHlwZSA9IChsb2dnZXIsIHN0YXRlLCBjb250ZXh0U3ViVHlwZSkgPT4ge1xuICBsb2dnZXI/LmRlYnVnKFwiQWRkaW5nIGNvbnRleHQgc3VidHlwZSB0byBuYXRpdmUgcmVxdWVzdFwiLCBjb250ZXh0U3ViVHlwZSk7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzKGxvZ2dlciwgeyAuLi5zdGF0ZSwgY29udGV4dFN1YlR5cGUgfSk7XG59O1xudmFyIGJ1aWxkZXJXaXRoUGxhY2VtZW50VHlwZSA9IChsb2dnZXIsIHN0YXRlLCBwbGFjZW1lbnRUeXBlKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcgcGxhY2VtZW50IHR5cGUgdG8gbmF0aXZlIHJlcXVlc3RcIiwgcGxhY2VtZW50VHlwZSk7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzKGxvZ2dlciwgeyAuLi5zdGF0ZSwgcGxhY2VtZW50VHlwZSB9KTtcbn07XG52YXIgYnVpbGRlcldpdGhUaXRsZSA9IChsb2dnZXIsIHN0YXRlLCBsZW5ndGggPSBERUZBVUxUX0xFTkdUSCwgcmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcgdGl0bGUgdG8gbmF0aXZlIHJlcXVlc3RcIiwgbGVuZ3RoLCByZXF1aXJlZCk7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzKGxvZ2dlciwge1xuICAgIC4uLnN0YXRlLFxuICAgIGFzc2V0czogW1xuICAgICAgLi4uc3RhdGUuYXNzZXRzLFxuICAgICAge1xuICAgICAgICBpZDogTmF0aXZlQXNzZXRJZC5UaXRsZSxcbiAgICAgICAgcmVxdWlyZWQ6IHJlcXVpcmVkID8gMSA6IDAsXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgbGVuOiBsZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfSk7XG59O1xudmFyIGJ1aWxkZXJXaXRoSW1hZ2UgPSAobG9nZ2VyLCBzdGF0ZSwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgcmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcgaW1hZ2UgdG8gbmF0aXZlIHJlcXVlc3RcIiwgd2lkdGgsIGhlaWdodCwgbWluV2lkdGgsIG1pbkhlaWdodCwgcmVxdWlyZWQpO1xuICByZXR1cm4gYm90c0J1aWxkQm90cyhsb2dnZXIsIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBhc3NldHM6IFtcbiAgICAgIC4uLnN0YXRlLmFzc2V0cyxcbiAgICAgIHtcbiAgICAgICAgaWQ6IE5hdGl2ZUFzc2V0SWQuSW1hZ2UsXG4gICAgICAgIHJlcXVpcmVkOiByZXF1aXJlZCA/IDEgOiAwLFxuICAgICAgICBpbWc6IHtcbiAgICAgICAgICB3OiB3aWR0aCxcbiAgICAgICAgICBoOiBoZWlnaHQsXG4gICAgICAgICAgd21pbjogbWluV2lkdGgsXG4gICAgICAgICAgaG1pbjogbWluSGVpZ2h0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdXG4gIH0pO1xufTtcbnZhciBidWlsZGVyV2l0aFZpZGVvID0gKGxvZ2dlciwgc3RhdGUsIG1pbWVzLCBtaW5EdXJhdGlvbiwgbWF4RHVyYXRpb24sIHJlcXVpcmVkID0gdHJ1ZSkgPT4ge1xuICBsb2dnZXI/LmRlYnVnKFwiQWRkaW5nIHZpZGVvIHRvIG5hdGl2ZSByZXF1ZXN0XCIsIG1pbWVzLCBtaW5EdXJhdGlvbiwgbWF4RHVyYXRpb24sIHJlcXVpcmVkKTtcbiAgcmV0dXJuIGJvdHNCdWlsZEJvdHMobG9nZ2VyLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgYXNzZXRzOiBbXG4gICAgICAuLi5zdGF0ZS5hc3NldHMsXG4gICAgICB7XG4gICAgICAgIGlkOiBOYXRpdmVBc3NldElkLlZpZGVvLFxuICAgICAgICByZXF1aXJlZDogcmVxdWlyZWQgPyAxIDogMCxcbiAgICAgICAgdmlkZW86IHtcbiAgICAgICAgICBtaW1lcyxcbiAgICAgICAgICBtaW5kdXJhdGlvbjogbWluRHVyYXRpb24sXG4gICAgICAgICAgbWF4ZHVyYXRpb246IG1heER1cmF0aW9uLFxuICAgICAgICAgIHByb3RvY29sczogW1ZBU1RfM18wXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXVxuICB9KTtcbn07XG52YXIgYnVpbGRlcldpdGhEYXRhID0gKGxvZ2dlciwgc3RhdGUsIHR5cGUsIGlkLCBsZW5ndGggPSBERUZBVUxUX0xFTkdUSCwgcmVxdWlyZWQgPSB0cnVlKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcgZGF0YSB0byByZXF1ZXN0XCIsIHR5cGUsIGlkLCBsZW5ndGgsIHJlcXVpcmVkKTtcbiAgcmV0dXJuIGJvdHNCdWlsZEJvdHMobG9nZ2VyLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgYXNzZXRzOiBbXG4gICAgICAuLi5zdGF0ZS5hc3NldHMsXG4gICAgICB7XG4gICAgICAgIGlkLFxuICAgICAgICByZXF1aXJlZDogcmVxdWlyZWQgPyAxIDogMCxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgbGVuOiBsZW5ndGhcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF1cbiAgfSk7XG59O1xudmFyIHBhc3NUb0RhdGEgPSAodHlwZSwgaWQpID0+IChsb2dnZXIsIHN0YXRlLCBsZW5ndGggPSBERUZBVUxUX0xFTkdUSCwgcmVxdWlyZWQgPSB0cnVlKSA9PiBidWlsZGVyV2l0aERhdGEobG9nZ2VyLCBzdGF0ZSwgdHlwZSwgaWQsIGxlbmd0aCwgcmVxdWlyZWQpO1xudmFyIGJ1aWxkZXJXaXRoU3BvbnNvcmVkID0gcGFzc1RvRGF0YShOYXRpdmVEYXRhVHlwZXMuU3BvbnNvcmVkLCBOYXRpdmVBc3NldElkLlNwb25zb3JlZCk7XG52YXIgYnVpbGRlcldpdGhEZXNjcmlwdGlvbiA9IHBhc3NUb0RhdGEoTmF0aXZlRGF0YVR5cGVzLkRlc2MsIE5hdGl2ZUFzc2V0SWQuRGVzYyk7XG52YXIgYnVpbGRlcldpdGhSYXRpbmcgPSBwYXNzVG9EYXRhKE5hdGl2ZURhdGFUeXBlcy5SYXRpbmcsIE5hdGl2ZUFzc2V0SWQuUmF0aW5nKTtcbnZhciBidWlsZGVyV2l0aFByaWNlID0gcGFzc1RvRGF0YShOYXRpdmVEYXRhVHlwZXMuUHJpY2UsIE5hdGl2ZUFzc2V0SWQuUHJpY2UpO1xudmFyIGJ1aWxkZXJXaXRoU2FsZVByaWNlID0gcGFzc1RvRGF0YShOYXRpdmVEYXRhVHlwZXMuU2FsZVByaWNlLCBOYXRpdmVBc3NldElkLlNhbGVQcmljZSk7XG52YXIgYnVpbGRlcldpdGhEaXNwbGF5VVJMID0gcGFzc1RvRGF0YShOYXRpdmVEYXRhVHlwZXMuRGlzcGxheVVSTCwgTmF0aXZlQXNzZXRJZC5EaXNwbGF5VVJMKTtcbnZhciBidWlsZGVyV2l0aENUQVRleHQgPSBwYXNzVG9EYXRhKE5hdGl2ZURhdGFUeXBlcy5DVEFUZXh0LCBOYXRpdmVBc3NldElkLkNUQVRleHQpO1xudmFyIGJ1aWxkZXJXaXRoQ2F0ZWdvcnkgPSBwYXNzVG9EYXRhKE5hdGl2ZURhdGFUeXBlcy5TdXJmQ2F0ZWdvcnksIE5hdGl2ZUFzc2V0SWQuU3VyZkNhdGVnb3J5KTtcbnZhciBidWlsZGVyV2l0aFRIQyA9IHBhc3NUb0RhdGEoTmF0aXZlRGF0YVR5cGVzLlN1cmZUSEMsIE5hdGl2ZUFzc2V0SWQuU3VyZlRIQyk7XG52YXIgYnVpbGRlcldpdGhDQkQgPSBwYXNzVG9EYXRhKE5hdGl2ZURhdGFUeXBlcy5TdXJmQ0JELCBOYXRpdmVBc3NldElkLlN1cmZDQkQpO1xudmFyIGJ1aWxkZXJXaXRoU3RyYWluID0gcGFzc1RvRGF0YShOYXRpdmVEYXRhVHlwZXMuU3VyZlN0cmFpbiwgTmF0aXZlQXNzZXRJZC5TdXJmU3RyYWluKTtcbnZhciBidWlsZGVyV2l0aE1ldGFQcm9kdWN0ID0gcGFzc1RvRGF0YShOYXRpdmVEYXRhVHlwZXMuU3VyZk1ldGFQcm9kdWN0LCBOYXRpdmVBc3NldElkLlN1cmZNZXRhUHJvZHVjdCk7XG52YXIgYnVpbGRlcldpdGhFdmVudFRyYWNrZXIgPSAobG9nZ2VyLCBzdGF0ZSwgZXZlbnQsIG1ldGhvZHMpID0+IHtcbiAgbG9nZ2VyPy5kZWJ1ZyhcIkFkZGluZyBldmVudCB0cmFja2VyIHRvIGJpZyByZXF1ZXN0XCIpO1xuICByZXR1cm4gYm90c0J1aWxkQm90cyhsb2dnZXIsIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBldmVudFRyYWNrZXJzOiBbXG4gICAgICAuLi5zdGF0ZS5ldmVudFRyYWNrZXJzLFxuICAgICAge1xuICAgICAgICBldmVudCxcbiAgICAgICAgbWV0aG9kc1xuICAgICAgfVxuICAgIF1cbiAgfSk7XG59O1xudmFyIGJ1aWxkZXJCdWlsZCA9IChsb2dnZXIsIHN0YXRlKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJCdWlsZGluZyBiaWQgcmVxdWVzdFwiLCBzdGF0ZSk7XG4gIHJldHVybiB7XG4gICAgdmVyOiBzdGF0ZS52ZXIsXG4gICAgY29udGV4dDogc3RhdGUuY29udGV4dCxcbiAgICBjb250ZXh0c3VidHlwZTogc3RhdGUuY29udGV4dFN1YlR5cGUsXG4gICAgYXNzZXRzOiBzdGF0ZS5hc3NldHMsXG4gICAgZXZlbnR0cmFja2Vyczogc3RhdGUuZXZlbnRUcmFja2Vyc1xuICB9O1xufTtcbnZhciBib3RzQnVpbGRCb3RzID0gKGxvZ2dlciwgc3RhdGUpID0+ICh7XG4gIHdpdGhWZXI6IGJ1aWxkZXJXaXRoVmVyLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aENvbnRleHQ6IGJ1aWxkZXJXaXRoQ29udGV4dC5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhDb250ZXh0U3ViVHlwZTogYnVpbGRlcldpdGhDb250ZXh0U3ViVHlwZS5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhQbGFjZW1lbnRUeXBlOiBidWlsZGVyV2l0aFBsYWNlbWVudFR5cGUuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoVGl0bGU6IGJ1aWxkZXJXaXRoVGl0bGUuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoSW1hZ2U6IGJ1aWxkZXJXaXRoSW1hZ2UuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoVmlkZW86IGJ1aWxkZXJXaXRoVmlkZW8uYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoRGF0YTogYnVpbGRlcldpdGhEYXRhLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aFNwb25zb3JlZDogYnVpbGRlcldpdGhTcG9uc29yZWQuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoRGVzY3JpcHRpb246IGJ1aWxkZXJXaXRoRGVzY3JpcHRpb24uYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoUmF0aW5nOiBidWlsZGVyV2l0aFJhdGluZy5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhQcmljZTogYnVpbGRlcldpdGhQcmljZS5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhTYWxlUHJpY2U6IGJ1aWxkZXJXaXRoU2FsZVByaWNlLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aERpc3BsYXlVUkw6IGJ1aWxkZXJXaXRoRGlzcGxheVVSTC5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhDVEFUZXh0OiBidWlsZGVyV2l0aENUQVRleHQuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoQ2F0ZWdvcnk6IGJ1aWxkZXJXaXRoQ2F0ZWdvcnkuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoVEhDOiBidWlsZGVyV2l0aFRIQy5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhDQkQ6IGJ1aWxkZXJXaXRoQ0JELmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aFN0cmFpbjogYnVpbGRlcldpdGhTdHJhaW4uYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoTWV0YVByb2R1Y3Q6IGJ1aWxkZXJXaXRoTWV0YVByb2R1Y3QuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoRXZlbnRUcmFja2VyOiBidWlsZGVyV2l0aEV2ZW50VHJhY2tlci5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIGJ1aWxkOiBidWlsZGVyQnVpbGQuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpXG59KTtcbnZhciBTdGFydE5hdGl2ZSA9IChsb2dnZXIpID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiU3RhcnROYXRpdmVcIik7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzKGxvZzIsIHtcbiAgICBhc3NldHM6IFtdLFxuICAgIGV2ZW50VHJhY2tlcnM6IFtdXG4gIH0pO1xufTtcbnZhciBEZWZhdWx0TmF0aXZlID0gKGxvZ2dlcikgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJEZWZhdWx0TmF0aXZlXCIpO1xuICByZXR1cm4gU3RhcnROYXRpdmUobG9nMikud2l0aFZlcihcIjEuMlwiKS53aXRoQ29udGV4dChDb250ZXh0VHlwZXMuUHJvZHVjdCkud2l0aENvbnRleHRTdWJUeXBlKENvbnRleHRTdWJUeXBlcy5Qcm9kdWN0KS53aXRoUGxhY2VtZW50VHlwZShQbGFjZW1lbnRUeXBlcy5JbkZlZWQpLndpdGhFdmVudFRyYWNrZXIoRXZlbnRUeXBlcy5JbXAsIFtFdmVudFRyYWNraW5nTWV0aG9kcy5JbWcsIEV2ZW50VHJhY2tpbmdNZXRob2RzLkltZ10pO1xufTtcbi8vIHNyYy9oZWxwZXJzL1JlcXVlc3RCdWlsZGVyLnRzXG52YXIgU1VSRl9FSURfU09VUkNFID0gXCJzdXJmLWRvbWFpbi1pZFwiO1xuZnVuY3Rpb24gU3RhcnRSZXF1ZXN0KGxvZ2dlciwgYWNjb3VudElkLCBzaXRlSWQsIGNoYW5uZWxJZCwgbG9jYXRpb25JZCwgZGV2aWNlLCBnZW8sIHVzZXJJZCwgem9uZUlkLCBpZCkge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJTdGFydFJlcXVlc3RcIikud2l0aChhY2NvdW50SWQpLndpdGgoc2l0ZUlkKS53aXRoKGNoYW5uZWxJZCkud2l0aChsb2NhdGlvbklkKS53aXRoKGlkKTtcbiAgbG9nMj8uaW5mbyhcIlN0YXJ0aW5nIHJlcXVlc3RcIik7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzMihsb2dnZXIsIHtcbiAgICBjb250ZXh0OiB7XG4gICAgICBhY2NvdW50SWQsXG4gICAgICBzaXRlSWQsXG4gICAgICBjaGFubmVsSWQsXG4gICAgICBsb2NhdGlvbklkLFxuICAgICAgem9uZUlkLFxuICAgICAgc3RvcmVJZDogbG9jYXRpb25JZCxcbiAgICAgIHBsYWNlbWVudElkOiB6b25lSWRcbiAgICB9LFxuICAgIGdlbyxcbiAgICBkZXZpY2UsXG4gICAgaWQsXG4gICAgdXNlcjogdXNlcklkICE9PSB1bmRlZmluZWQgPyB7XG4gICAgICBlaWRzOiBbe1xuICAgICAgICBzb3VyY2U6IFNVUkZfRUlEX1NPVVJDRSxcbiAgICAgICAgdWlkczogW3tcbiAgICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICAgIGF0eXBlOiBBZ2VudFR5cGVzLlNlc3Npb25cbiAgICAgICAgfV1cbiAgICAgIH1dXG4gICAgfSA6IHVuZGVmaW5lZCxcbiAgICBpbXA6IFtdXG4gIH0pO1xufVxudmFyIGJ1aWxkZXJXaXRoVXNlciA9IChsb2dnZXIsIHN0YXRlLCB1c2VyKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcgdXNlciB0byByZXF1ZXN0XCIsIHVzZXIpO1xuICByZXR1cm4gYm90c0J1aWxkQm90czIobG9nZ2VyLCB7XG4gICAgLi4uc3RhdGUsXG4gICAgdXNlcjoge1xuICAgICAgLi4udXNlcixcbiAgICAgIGVpZHM6IFtcbiAgICAgICAgLi4uc3RhdGUudXNlcj8uZWlkcyAhPT0gdW5kZWZpbmVkID8gc3RhdGUudXNlci5laWRzIDogW10sXG4gICAgICAgIC4uLnVzZXIuZWlkcyAhPT0gdW5kZWZpbmVkID8gdXNlci5laWRzIDogW11cbiAgICAgIF1cbiAgICB9XG4gIH0pO1xufTtcbnZhciBidWlsZGVyV2l0aFJlZ3VsYXRpb25zID0gKGxvZ2dlciwgc3RhdGUsIHJlZ3MpID0+IHtcbiAgbG9nZ2VyPy5kZWJ1ZyhcIkFkZGVkIHJlZ3VsYXRpb25zIHRvIHJlcXVlc3RcIiwgcmVncyk7XG4gIHJldHVybiBib3RzQnVpbGRCb3RzMihsb2dnZXIsIHsgLi4uc3RhdGUsIHJlZ3MgfSk7XG59O1xudmFyIGJ1aWxkZXJXaXRoQXBwID0gKGxvZ2dlciwgc3RhdGUsIGFwcCkgPT4ge1xuICBsb2dnZXI/LmRlYnVnKFwiQWRkaW5nIGFwcCB0byByZXF1ZXN0XCIpO1xuICByZXR1cm4gYm90c0J1aWxkQm90czIobG9nZ2VyLCB7IC4uLnN0YXRlLCBhcHAgfSk7XG59O1xudmFyIGJ1aWxkZXJXaXRoQmFubmVyID0gKGxvZ2dlciwgc3RhdGUsIHcsIGgsIG9wdGlvbnMsIGltcE9wdGlvbnMpID0+IHtcbiAgbG9nZ2VyPy5kZWJ1ZyhcIkFkZGlnIGJhbm5lciB0byByZXF1ZXN0XCIsIHcsIGgsIG9wdGlvbnMsIGltcE9wdGlvbnMpO1xuICByZXR1cm4gYm90c0J1aWxkSW1wKGxvZ2dlciwgc3RhdGUsIHtcbiAgICBpZDogZ2VuZXJhdGVJZCgpLFxuICAgIGJhbm5lcjoge1xuICAgICAgdyxcbiAgICAgIGgsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSxcbiAgICAuLi5pbXBPcHRpb25zXG4gIH0pO1xufTtcbnZhciBidWlsZGVyV2l0aFZpZGVvMiA9IChsb2dnZXIsIHN0YXRlLCB3LCBoLCBtaW5kdXJhdGlvbiwgbWF4ZHVyYXRpb24sIG1pbWVzLCBvcHRpb25zLCBpbXBPcHRpb25zKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcgdmlkZW8gdG8gcmVxdWVzdFwiLCB3LCBoLCBtaW5kdXJhdGlvbiwgbWF4ZHVyYXRpb24sIG1pbWVzLCBvcHRpb25zLCBpbXBPcHRpb25zKTtcbiAgcmV0dXJuIGJvdHNCdWlsZEltcChsb2dnZXIsIHN0YXRlLCB7XG4gICAgaWQ6IGdlbmVyYXRlSWQoKSxcbiAgICB2aWRlbzoge1xuICAgICAgdyxcbiAgICAgIGgsXG4gICAgICBtaW1lczogbWltZXMgPz8gW1widmlkZW8vbXA0XCIsIFwidmlkZW8vd2VibVwiXSxcbiAgICAgIG1pbmR1cmF0aW9uLFxuICAgICAgbWF4ZHVyYXRpb24sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSxcbiAgICAuLi5pbXBPcHRpb25zXG4gIH0pO1xufTtcbnZhciBidWlsZGVyV2l0aEtleXdvcmRzID0gKGxvZ2dlciwgc3RhdGUsIGtleXdvcmRzKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJBZGRpbmcga2V5d29yZCB0byByZXF1ZXN0XCIsIGtleXdvcmRzKTtcbiAgcmV0dXJuIGJvdHNCdWlsZEJvdHMyKGxvZ2dlciwge1xuICAgIC4uLnN0YXRlLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIC4uLnN0YXRlLmNvbnRleHQsXG4gICAgICBrZXl3b3Jkc1xuICAgIH1cbiAgfSk7XG59O1xudmFyIGJ1aWxkZXJXaXRoTmF0aXZlID0gKGxvZ2dlciwgc3RhdGUsIHJlcXVlc3QsIG9wdGlvbnMsIGltcE9wdGlvbnMpID0+IHtcbiAgbG9nZ2VyPy5kZWJ1ZyhcIkFkZGluZyBuYXRpdmUgdG8gcmVxdWVzdFwiLCByZXF1ZXN0LCBvcHRpb25zLCBpbXBPcHRpb25zKTtcbiAgcmV0dXJuIHR5cGVvZiByZXF1ZXN0ID09PSBcInN0cmluZ1wiID8gYnVpbGRlcldpdGhOYXRpdmVTdHIobG9nZ2VyLCBzdGF0ZSwgcmVxdWVzdCwgb3B0aW9ucywgaW1wT3B0aW9ucykgOiBidWlsZGVyV2l0aE5hdGl2ZVN0cihsb2dnZXIsIHN0YXRlLCBKU09OLnN0cmluZ2lmeShyZXF1ZXN0KSwgb3B0aW9ucywgaW1wT3B0aW9ucyk7XG59O1xudmFyIGJ1aWxkZXJXaXRoTmF0aXZlU3RyID0gKGxvZ2dlciwgc3RhdGUsIHJlcXVlc3QsIG9wdGlvbnMsIGltcE9wdGlvbnMpID0+IGJvdHNCdWlsZEltcChsb2dnZXIsIHN0YXRlLCB7XG4gIGlkOiBnZW5lcmF0ZUlkKCksXG4gIG5hdGl2ZToge1xuICAgIHZlcjogXCIxLjJcIixcbiAgICByZXF1ZXN0LFxuICAgIC4uLm9wdGlvbnNcbiAgfSxcbiAgLi4uaW1wT3B0aW9uc1xufSk7XG52YXIgYnVpbGRlckJ1aWxkMiA9IChsb2dnZXIsIHN0YXRlKSA9PiB7XG4gIGxvZ2dlcj8uZGVidWcoXCJCdWlsZGluZyByZXF1ZXN0XCIsIHN0YXRlKTtcbiAgcmV0dXJuIHtcbiAgICBpZDogc3RhdGUuaWQgPz8gZ2VuZXJhdGVJZCgpLFxuICAgIGltcDogc3RhdGUuaW1wLm1hcCgoaW1wKSA9PiAoe1xuICAgICAgLi4uaW1wLFxuICAgICAgZXh0OiBpbXAuZXh0ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IC4uLmltcC5leHQsIC4uLnN0YXRlLmNvbnRleHQgfVxuICAgIH0pKSxcbiAgICBkZXZpY2U6IHtcbiAgICAgIC4uLnN0YXRlLmRldmljZSxcbiAgICAgIGdlbzogc3RhdGUuZ2VvID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBHZW9Db250ZXh0VG9PUlRCKHVuZGVmaW5lZCwgc3RhdGUuZ2VvKVxuICAgIH0sXG4gICAgdXNlcjogc3RhdGUudXNlcixcbiAgICBhcHA6IHN0YXRlLmFwcCxcbiAgICBzaXRlOiBzdGF0ZS5zaXRlLFxuICAgIGV4dDogc3RhdGUuY29udGV4dFxuICB9O1xufTtcbnZhciBib3RzQnVpbGRCb3RzMiA9IChsb2dnZXIsIHN0YXRlKSA9PiAoe1xuICB3aXRoVXNlcjogYnVpbGRlcldpdGhVc2VyLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aFJlZ3VsYXRpb25zOiBidWlsZGVyV2l0aFJlZ3VsYXRpb25zLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aEJhbm5lcjogYnVpbGRlcldpdGhCYW5uZXIuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoVmlkZW86IGJ1aWxkZXJXaXRoVmlkZW8yLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKSxcbiAgd2l0aE5hdGl2ZTogYnVpbGRlcldpdGhOYXRpdmUuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgc3RhdGUpLFxuICB3aXRoQXBwOiBidWlsZGVyV2l0aEFwcC5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIHdpdGhLZXl3b3JkczogYnVpbGRlcldpdGhLZXl3b3Jkcy5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBzdGF0ZSksXG4gIGJ1aWxkOiBidWlsZGVyQnVpbGQyLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHN0YXRlKVxufSk7XG52YXIgYm90c0J1aWxkSW1wID0gKGxvZ2dlciwgc3RhdGUsIGltcCkgPT4gYm90c0J1aWxkQm90czIobG9nZ2VyLCB7IC4uLnN0YXRlLCBpbXA6IFsuLi5zdGF0ZS5pbXAsIGltcF0gfSk7XG52YXIgZ2VuZXJhdGVJZCA9ICgpID0+IGNyeXB0by5yYW5kb21VVUlEKCk7XG4vLyBzcmMvaGVscGVycy9yZXNwb25zZS9CdWlsdFJlc3BvbnNlLnRzXG52YXIgQ3JlYXRpdmVUeXBlID0ge1xuICBCYW5uZXI6IDAsXG4gIFZpZGVvOiAxLFxuICBQcm9kdWN0Q2FyZDogMixcbiAgQ2Fyb3VzZWw6IDNcbn07XG5cbmNsYXNzIE1pc3NpbmdBZG1FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgYmlkO1xuICBjb25zdHJ1Y3RvcihiaWQpIHtcbiAgICBzdXBlcihcIkNhbm5vdCBidWlsZCBjcmVhdGl2ZTsgbWlzc2luZyBhZG0gZmllbGRcIik7XG4gICAgdGhpcy5iaWQgPSBiaWQ7XG4gIH1cbn1cblxuY2xhc3MgTWlzc2luZ1Byb2R1Y3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgYmlkO1xuICBjb25zdHJ1Y3RvcihiaWQpIHtcbiAgICBzdXBlcihcIkNvdWxkIG5vdCBmaW5kIHByb2R1Y3QgZGF0YSBmb3IgY3JlYXRpdmUgd2hpbGUgYnVpbGRpbmcgY2xpY2t0aHJvdWdoIFVSTC4gU29tZSBkYXRhIGZpZWxkcyBhcmUgbWlzc2luZ1wiKTtcbiAgICB0aGlzLmJpZCA9IGJpZDtcbiAgfVxufVxuLy8gc3JjL2hlbHBlcnMvcmVzcG9uc2UvQ2xpY2t0aHJvdWdoLnRzXG52YXIgQnVpbGRDbGlja3Rocm91Z2hVcmwgPSAobG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWd1cmF0aW9uLCBwcm9kdWN0KSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcIkJ1aWxkQ2xpY2t0aHJvdWdoVXJsXCIpO1xuICBsb2cyPy5pbmZvKFwiQnVpbGRpbmcgY2xpY2t0aHJvdWdoIFVSTFwiKTtcbiAgbG9nMj8uZGVidWcod2luZG93SW5mbywgcHJvZHVjdCwgY29uZmlndXJhdGlvbik7XG4gIHRyeSB7XG4gICAgcmV0dXJuIE9rKGNvbmZpZ3VyYXRpb24udGVtcGxhdGVzLmNsaWNrVGhyb3VnaFVybFRlbXBsYXRlKHtcbiAgICAgIHByb2R1Y3QsXG4gICAgICBjYXRhbG9nOiBwcm9kdWN0LFxuICAgICAgd2luZG93OiB3aW5kb3dJbmZvLFxuICAgICAgcHVibGlzaGVyOiBjb25maWd1cmF0aW9uLFxuICAgICAgLi4ucHJvZHVjdFxuICAgIH0sIHtcbiAgICAgIGhlbHBlcnM6IEdldEhlbHBlcnMoKVxuICAgIH0pKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGxvZzI/LmVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgY2xpY2t0aHJvdWdoIFVSTCB0ZW1wbGF0ZVwiLCBwcm9kdWN0LCBjb25maWd1cmF0aW9uLCB3aW5kb3dJbmZvKTtcbiAgICByZXR1cm4gRXJyKGUpO1xuICB9XG59O1xuLy8gc3JjL2hlbHBlcnMvR2VuZXJhdG9yLnRzXG52YXIgQ29uc3VtZU4gPSAoZ2VuZXJhdG9yLCBuKSA9PiB7XG4gIGNvbnN0IGNvbnN1bWVkID0gW107XG4gIGZvciAobGV0IGkgPSAwO2kgPCBuOyBpKyspIHtcbiAgICBjb25zdCB2YWx1ZSA9IGdlbmVyYXRvci5uZXh0KCk7XG4gICAgaWYgKHZhbHVlLmRvbmUpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjb25zdW1lZC5wdXNoKHZhbHVlLnZhbHVlKTtcbiAgfVxuICByZXR1cm4gY29uc3VtZWQ7XG59O1xudmFyIENvbnN1bWVBbGwgPSAoZ2VuZXJhdG9yKSA9PiB7XG4gIGNvbnN0IGNvbnN1bWVkID0gW107XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgZ2VuZXJhdG9yKSB7XG4gICAgY29uc3VtZWQucHVzaCh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGNvbnN1bWVkO1xufTtcbnZhciBDb25zdW1lTkFzeW5jID0gYXN5bmMgKGdlbmVyYXRvciwgbikgPT4ge1xuICBjb25zdCBjb25zdW1lZCA9IFtdO1xuICB3aGlsZSAoY29uc3VtZWQubGVuZ3RoIDwgbikge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGdlbmVyYXRvci5uZXh0KCk7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY29uc3VtZWQucHVzaChyZXN1bHQudmFsdWUpO1xuICB9XG4gIHJldHVybiBjb25zdW1lZDtcbn07XG52YXIgQ29uc3VtZUFsbEFzeW5jID0gYXN5bmMgKGdlbmVyYXRvcikgPT4ge1xuICBjb25zdCBjb25zdW1lZCA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IHZhbHVlIG9mIGdlbmVyYXRvcikge1xuICAgIGNvbnN1bWVkLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiBjb25zdW1lZDtcbn07XG5mdW5jdGlvbiogR2VuZXJhdGVBcnJheShkYXRhKSB7XG4gIGZvciAoY29uc3QgdCBvZiBkYXRhKSB7XG4gICAgeWllbGQgdDtcbiAgfVxufVxuXG4vLyBzcmMvaGVscGVycy9UcnlHZXQudHNcbnZhciBUcnlHZXQgPSAoZ2V0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIE9rKGdldCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IyKSB7XG4gICAgcmV0dXJuIEVycihlcnJvcjIpO1xuICB9XG59O1xuXG4vLyBzcmMvaGVscGVycy9yZXNwb25zZS9Qcm9kdWN0Q2FyZC50c1xudmFyIEJ1aWxkQWxsU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZXMgPSBhc3luYyAobG9nZ2VyLCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgd2luZG93SW5mbywgY29uZmlndXJhdGlvbiwgYmlkcykgPT4ge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJCdWlsZFByb2R1Y3RDYXJkUmVzcG9uc2VcIik7XG4gIGxvZzI/LmluZm8oXCJCdWlsZGluZyBwcm9kdWN0IGNhcmQgcmVzcG9uc2VzXCIpO1xuICBpZiAoYmlkcyA9PT0gdW5kZWZpbmVkIHx8IGJpZHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gRXJyKG5ldyBNaXNzaW5nQmlkc0Vycm9yKTtcbiAgfVxuICBjb25zdCBiaWRQcm9taXNlcyA9IGJpZHMubWFwKGJ1aWxkQWxsUHJvZHVjdENhcmRSZXNwb25zZXNGcm9tQmlkLmJpbmQodW5kZWZpbmVkLCBsb2cyLCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgd2luZG93SW5mbywgY29uZmlndXJhdGlvbikpO1xuICBjb25zdCBwcm9kdWN0Q2FyZFJlc3BvbnNlUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChiaWRQcm9taXNlcyk7XG4gIHByb2R1Y3RDYXJkUmVzcG9uc2VSZXN1bHRzLmZpbHRlcigocmVzKSA9PiByZXMuc3RhdHVzID09PSBcInJlamVjdGVkXCIpLm1hcCgocmVzKSA9PiByZXMucmVhc29uKS5mb3JFYWNoKChlcnIpID0+IGxvZzI/Lndhcm4oZXJyKSk7XG4gIGNvbnN0IGZ1bGZpbGxlZCA9IHByb2R1Y3RDYXJkUmVzcG9uc2VSZXN1bHRzLmZpbHRlcigocmVzKSA9PiByZXMuc3RhdHVzID09PSBcImZ1bGZpbGxlZFwiKTtcbiAgZnVsZmlsbGVkLmZpbHRlcigocmVzKSA9PiAhcmVzLnZhbHVlLm9rKS5tYXAoKHJlcykgPT4gcmVzLnZhbHVlKS5tYXAoKHJlcykgPT4gcmVzLmVycm9yKS5mb3JFYWNoKChlcnIpID0+IGxvZzI/Lndhcm4oZXJyKSk7XG4gIHJldHVybiBPayhwcm9kdWN0Q2FyZFJlc3BvbnNlUmVzdWx0cy5maWx0ZXIoKHJlcykgPT4gcmVzLnN0YXR1cyA9PT0gXCJmdWxmaWxsZWRcIikuZmlsdGVyKChyZXMpID0+IHJlcy52YWx1ZS5vaykubWFwKChyZXMpID0+IHJlcy52YWx1ZSkuZmxhdE1hcCgocmVzKSA9PiByZXMudmFsdWUpKTtcbn07XG5hc3luYyBmdW5jdGlvbiogR2VuZXJhdGVTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlKGxvZ2dlciwgZ2V0QWxsU3BvbnNvcmVkUHJvZHVjdHMsIHdpbmRvd0luZm8sIGNvbmZpZ3VyYXRpb24sIGJpZHMpIHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiR2VuZXJhdGVQcm9kdWN0Q2FyZFJlc3BvbnNlXCIpO1xuICBsb2cyPy5pbmZvKFwiRW50ZXJpbmcgcHJvZHVjdCBjYXJkIHJlc3BvbnNlIGdlbmVyYXRvclwiLCBiaWRzKTtcbiAgZm9yIChjb25zdCBiaWQgb2YgYmlkcykge1xuICAgIGxvZzI/LmluZm8oXCJHZW5lcmF0aW5nIHByb2R1Y3QgY2FyZCByZXNwb25zZVwiLCBiaWQpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJ1aWxkQWxsUHJvZHVjdENhcmRSZXNwb25zZXNGcm9tQmlkKGxvZzIsIGdldEFsbFNwb25zb3JlZFByb2R1Y3RzLCB3aW5kb3dJbmZvLCBjb25maWd1cmF0aW9uLCBiaWQpO1xuICAgIGlmICghcmVzdWx0Lm9rKSB7XG4gICAgICBsb2cyPy53YXJuKHJlc3VsdC5lcnJvcik7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgeWllbGQqIEdlbmVyYXRlQXJyYXkocmVzdWx0LnZhbHVlKTtcbiAgfVxufVxudmFyIGdldEZpZWxkID0gKG5hdGl2ZSkgPT4gKGlkKSA9PiBuYXRpdmUubmF0aXZlLmFzc2V0cz8uZmluZCgoYXNzZXQpID0+IGFzc2V0LmlkID09PSBpZCk/LmRhdGE/LnZhbHVlO1xudmFyIGdldFRyYWNrZXJzID0gKGxvZ2dlciwgYmlkLCBuYXRpdmUpID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiZ2V0VHJhY2tlcnNcIik7XG4gIGxvZzI/LmluZm8oXCJHZXR0aW5nIHRyYWNrZXJzXCIpO1xuICBjb25zdCB3aW4gPSBiaWQubnVybDtcbiAgaWYgKHdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIEVycihuZXcgTWlzc2luZ1dpblVybEVycm9yKGJpZCkpO1xuICB9XG4gIGNvbnN0IGltcCA9IG5hdGl2ZS5uYXRpdmUuZXZlbnR0cmFja2Vycz8uZmlsdGVyKCh0cmFja2VyKSA9PiB0cmFja2VyLmV2ZW50ID09PSBFdmVudFR5cGVzLkltcCAmJiB0cmFja2VyLm1ldGhvZCA9PT0gRXZlbnRUcmFja2luZ01ldGhvZHMuSW1nKS5tYXAoKHRyYWNrZXIpID0+IHRyYWNrZXIudXJsKS5maWx0ZXIoKHVybCkgPT4gdXJsICE9PSB1bmRlZmluZWQpID8/IFtdO1xuICBjb25zdCBvdGhlcnMgPSBuYXRpdmUubmF0aXZlLmV2ZW50dHJhY2tlcnM/LmZpbHRlcigodHJhY2tlcikgPT4gdHJhY2tlci51cmwgIT09IHVuZGVmaW5lZCkubWFwKCh0cmFja2VyKSA9PiAoe1xuICAgIHR5cGU6IHRyYWNrZXIubWV0aG9kLFxuICAgIHVybDogdHJhY2tlci51cmxcbiAgfSkpID8/IFtdO1xuICByZXR1cm4gT2soeyB3aW4sIGltcCwgb3RoZXJzIH0pO1xufTtcbnZhciBmZXRjaFByb2R1Y3RzRnJvbUJpZCA9IGFzeW5jIChsb2dnZXIsIGdldEFsbFNwb25zb3JlZFByb2R1Y3RzLCBiaWQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJmZXRjaFByb2R1Y3RzRnJvbUJpZFwiKTtcbiAgICBsb2cyPy5pbmZvKFwiRmV0Y2hpbmcgcHJvZHVjdHMgZnJvbSBJQmlkXCIpO1xuICAgIGNvbnN0IHByb2R1Y3RDYXJkUmVzcG9uc2VzID0gW107XG4gICAgaWYgKGJpZC5hZG0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9nMj8ud2FybihcIkJpZCBpcyBtaXNzaW5nIEFETVwiLCBiaWQpO1xuICAgICAgcmV0dXJuIEVycihuZXcgTWlzc2luZ0FkbUVycm9yKGJpZCkpO1xuICAgIH1cbiAgICBjb25zdCBhZG0gPSBiaWQuYWRtO1xuICAgIGNvbnN0IG5hdGl2ZVJlcyA9IFRyeUdldCgoKSA9PiBKU09OLnBhcnNlKGFkbSkpO1xuICAgIGlmICghbmF0aXZlUmVzLm9rKSB7XG4gICAgICBsb2cyPy5lcnJvcihcIkJpZCBhZG0gZmFpbGVkIHRvIGRlc2VyaWFsaXplXCIsIGJpZCwgYWRtKTtcbiAgICAgIHJldHVybiBFcnIobmV3IE1hbGZvcm1lZE5hdGl2ZVJlc3BvbnNlRXJyb3IoYmlkKSk7XG4gICAgfVxuICAgIGNvbnN0IG5hdGl2ZSA9IG5hdGl2ZVJlcy52YWx1ZTtcbiAgICBjb25zdCBtZXRhUHJvZHVjdElkID0gZ2V0RmllbGQobmF0aXZlKShOYXRpdmVBc3NldElkLlN1cmZNZXRhUHJvZHVjdCk7XG4gICAgaWYgKG1ldGFQcm9kdWN0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIEVycihuZXcgTWlzc2luZ1Byb2R1Y3RJZEVycm9yKGJpZCwgbmF0aXZlKSk7XG4gICAgfVxuICAgIGNvbnN0IHByb2R1Y3RSZXMgPSBhd2FpdCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cyhtZXRhUHJvZHVjdElkKTtcbiAgICBpZiAoIXByb2R1Y3RSZXMub2spIHtcbiAgICAgIHJldHVybiBwcm9kdWN0UmVzO1xuICAgIH1cbiAgICByZXR1cm4gT2soe1xuICAgICAgcHJvZHVjdHM6IHByb2R1Y3RSZXMudmFsdWUsXG4gICAgICBuYXRpdmVcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIEVycihlcnIpO1xuICB9XG59O1xuZnVuY3Rpb24qIGJ1aWxkUHJvZHVjdENhcmRSZXNwb25zZUZyb21Qcm9kdWN0SW5mbyhsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZ3VyYXRpb24sIGJpZCwgbmF0aXZlLCBwcm9kdWN0cykge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJidWlsZFByb2R1Y3RDYXJkUmVzcG9uc2VGcm9tUHJvZHVjdEluZm9cIik7XG4gIGZvciAoY29uc3QgcHJvZHVjdCBvZiBwcm9kdWN0cykge1xuICAgIGNvbnN0IGNsaWNrdGhyb3VnaCA9IEJ1aWxkQ2xpY2t0aHJvdWdoVXJsKGxvZzIsIHdpbmRvd0luZm8sIGNvbmZpZ3VyYXRpb24sIHByb2R1Y3QpO1xuICAgIGlmICghY2xpY2t0aHJvdWdoLm9rKSB7XG4gICAgICByZXR1cm4gY2xpY2t0aHJvdWdoO1xuICAgIH1cbiAgICBjb25zdCB0cmFja2VycyA9IGdldFRyYWNrZXJzKGxvZzIsIGJpZCwgbmF0aXZlKTtcbiAgICBpZiAoIXRyYWNrZXJzLm9rKSB7XG4gICAgICByZXR1cm4gdHJhY2tlcnM7XG4gICAgfVxuICAgIGNvbnN0IGZpbmFsQ2xpY2t0aHJvdWdoID0gVHJ5RG8oKCkgPT4ge1xuICAgICAgY29uc3QgYmlkZGVyQ2xpY2t0aHJvdWdoID0gbmV3IFVSTChuYXRpdmUubmF0aXZlLmxpbmsudXJsKTtcbiAgICAgIGJpZGRlckNsaWNrdGhyb3VnaC5zZWFyY2hQYXJhbXMuc2V0KFwidXJsXCIsIGNsaWNrdGhyb3VnaC52YWx1ZSk7XG4gICAgICByZXR1cm4gYmlkZGVyQ2xpY2t0aHJvdWdoLnRvU3RyaW5nKCk7XG4gICAgfSk7XG4gICAgaWYgKCFmaW5hbENsaWNrdGhyb3VnaC5vaykge1xuICAgICAgcmV0dXJuIGZpbmFsQ2xpY2t0aHJvdWdoO1xuICAgIH1cbiAgICB5aWVsZCB7XG4gICAgICB0eXBlOiAyLFxuICAgICAgbmF0aXZlLFxuICAgICAgcHJvZHVjdCxcbiAgICAgIGJpZCxcbiAgICAgIGNsaWNrdGhyb3VnaDogZmluYWxDbGlja3Rocm91Z2gudmFsdWUsXG4gICAgICB0cmFja2VyczogdHJhY2tlcnMudmFsdWUsXG4gICAgICBzcG9uc29yZWQ6IHRydWVcbiAgICB9O1xuICB9XG59XG52YXIgYnVpbGRBbGxQcm9kdWN0Q2FyZFJlc3BvbnNlc0Zyb21CaWQgPSBhc3luYyAobG9nZ2VyLCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgd2luZG93SW5mbywgY29uZmlndXJhdGlvbiwgYmlkKSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImJ1aWxkQWxsUHJvZHVjdENhcmRSZXNwb25zZUJpZHNcIik7XG4gIGxvZzI/LmluZm8oXCJCdWlsZGluZyBhbGwgcHJvZHVjdCBjYXJkIHJlc3BvbnNlc1wiKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gT2soYXdhaXQgQ29uc3VtZUFsbEFzeW5jKGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZUZyb21CaWQobG9nMiwgZ2V0QWxsU3BvbnNvcmVkUHJvZHVjdHMsIHdpbmRvd0luZm8sIGNvbmZpZ3VyYXRpb24sIGJpZCkpKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIEVycihlcnIpO1xuICB9XG59O1xuYXN5bmMgZnVuY3Rpb24qIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZUZyb21CaWQobG9nZ2VyLCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgd2luZG93SW5mbywgY29uZmlndXJhdGlvbiwgYmlkKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZUZyb21CaWRcIik7XG4gIGxvZzI/LmluZm8oXCJnZW5lcmF0aW5nIHByb2R1Y3QgY2FyZCByZXNwb25zZSBmcm9tIGJpZFwiKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwcm9kdWN0UmVzdWx0ID0gYXdhaXQgZmV0Y2hQcm9kdWN0c0Zyb21CaWQobG9nMiwgZ2V0QWxsU3BvbnNvcmVkUHJvZHVjdHMsIGJpZCk7XG4gICAgaWYgKCFwcm9kdWN0UmVzdWx0Lm9rKSB7XG4gICAgICBsb2cyPy5pbmZvKFwiTm8gcHJvZHVjdHMhXCIpO1xuICAgICAgcmV0dXJuIHByb2R1Y3RSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHsgcHJvZHVjdHMsIG5hdGl2ZSB9ID0gcHJvZHVjdFJlc3VsdC52YWx1ZTtcbiAgICBjb25zdCBidWlsdFByb2R1Y3RDYXJkUmVzcG9uc2VzID0gW107XG4gICAgeWllbGQqIGJ1aWxkUHJvZHVjdENhcmRSZXNwb25zZUZyb21Qcm9kdWN0SW5mbyhsb2cyLCB3aW5kb3dJbmZvLCBjb25maWd1cmF0aW9uLCBiaWQsIG5hdGl2ZSwgcHJvZHVjdHMpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm47XG4gIH1cbn1cblxuY2xhc3MgTWlzc2luZ0JpZHNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJVbmFibGUgdG8gYnVpbGQgcHJvZHVjdCBjYXJkcyAtIG5vIGJpZHMgd2VyZSBwcm92aWRlZFwiKTtcbiAgfVxufVxuXG5jbGFzcyBNYWxmb3JtZWROYXRpdmVSZXNwb25zZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBiaWQ7XG4gIGNvbnN0cnVjdG9yKGJpZCkge1xuICAgIHN1cGVyKFwiVW5hYmxlIHRvIGJ1aWxkIHByb2R1Y3QgY2FyZCAtIG1pc3NpbmcgbmF0aXZlIHJlc3BvbnNlXCIpO1xuICAgIHRoaXMuYmlkID0gYmlkO1xuICB9XG59XG5cbmNsYXNzIE1pc3NpbmdXaW5VcmxFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgYmlkO1xuICBjb25zdHJ1Y3RvcihiaWQpIHtcbiAgICBzdXBlcihcIlVuYWJsZSB0byBidWlsZCBwcm9kdWN0IGNhcmQgLSBubyB3aW4gVVJMIHdhcyBwcm92aWRlZFwiKTtcbiAgICB0aGlzLmJpZCA9IGJpZDtcbiAgfVxufVxuXG5jbGFzcyBNaXNzaW5nUHJvZHVjdElkRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGJpZDtcbiAgbmF0aXZlO1xuICBjb25zdHJ1Y3RvcihiaWQsIG5hdGl2ZSkge1xuICAgIHN1cGVyKFwiVW5hYmxlIHRvIGJ1aWxkIHByb2R1Y3QgY2FyZCAtIG5vIHByb2R1Y3QgSUQgd2FzIHByb3ZpZGVkXCIpO1xuICAgIHRoaXMuYmlkID0gYmlkO1xuICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICB9XG59XG4vLyBzcmMvaGVscGVycy9IYW5kbGViYXJzLnRzXG52YXIgREVGQVVMVF9NQVhfU0xVRyA9IDU7XG5mdW5jdGlvbiBzbHVnKG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKG5hbWUgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSBudWxsIHx8IHR5cGVvZiBuYW1lICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgY29uc3QgaHlwaGVuYXRlID0gb3B0aW9ucy5oYXNoLmh5cGhlbmF0ZSAhPT0gdW5kZWZpbmVkID8gbmV3IFJlZ0V4cChvcHRpb25zLmhhc2guaHlwaGVuYXRlLCBcImlnXCIpIDogL1tcXHNfXFwtLF0vaWc7XG4gIGNvbnN0IGRyb3AgPSBvcHRpb25zLmhhc2guZHJvcCAhPT0gdW5kZWZpbmVkID8gbmV3IFJlZ0V4cChvcHRpb25zLmhhc2guZHJvcCwgXCJpZ1wiKSA6IC9bXkEtWmEtejAtOS1dL2lnO1xuICBjb25zdCBkcm9wQmVmb3JlID0gb3B0aW9ucy5oYXNoLmRyb3BCZWZvcmUgIT09IHVuZGVmaW5lZCA/IG5ldyBSZWdFeHAob3B0aW9ucy5oYXNoLmRyb3BCZWZvcmUpIDogdW5kZWZpbmVkO1xuICBjb25zdCBtYXhTbHVnID0gb3B0aW9ucy5oYXNoLmxlbmd0aCA/PyBERUZBVUxUX01BWF9TTFVHO1xuICBjb25zdCBzZXBhcmF0b3IgPSBvcHRpb25zLmhhc2guc2VwYXJhdG9yID8/IFwiLVwiO1xuICBpZiAoZHJvcEJlZm9yZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZSA9IG5hbWUucmVwbGFjZShkcm9wQmVmb3JlLCBcIlwiKTtcbiAgfVxuICByZXR1cm4gbmFtZS5yZXBsYWNlKGh5cGhlbmF0ZSwgc2VwYXJhdG9yKS5yZXBsYWNlKGRyb3AsIFwiXCIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoc2VwYXJhdG9yKS5zbGljZSgwLCBtYXhTbHVnKS5qb2luKHNlcGFyYXRvcik7XG59XG5mdW5jdGlvbiBsb3dlcihuYW1lKSB7XG4gIGlmIChuYW1lID09PSB1bmRlZmluZWQgfHwgbmFtZSA9PT0gbnVsbCB8fCB0eXBlb2YgbmFtZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKCk7XG59XG5mdW5jdGlvbiBwYXRoKHBvc2l0aW9uKSB7XG4gIGlmIChwb3NpdGlvbiA9PT0gMCB8fCBwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID09PSBudWxsKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgY29uc3QgcGF0aHMgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoXCIvXCIpO1xuICBpZiAocGF0aHMubGVuZ3RoIDw9IHBvc2l0aW9uKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgcmV0dXJuIHBhdGhzW3Bvc2l0aW9uXTtcbn1cbmZ1bmN0aW9uIHNlZChpbnB1dCwgc2VhcmNoUmVnZXgsIHJlcGxhY2VtZW50KSB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKG5ldyBSZWdFeHAoc2VhcmNoUmVnZXgpLCAoLi4uYXJncykgPT4ge1xuICAgIGNvbnN0IEVORCA9IC0yO1xuICAgIGNvbnN0IGdyb3VwcyA9IGFyZ3Muc2xpY2UoMSwgRU5EKTtcbiAgICBsZXQgcmVzdWx0ID0gcmVwbGFjZW1lbnQ7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1xcXFwoXFxkKykvZywgKF8sIGdyb3VwSW5kZXgpID0+IGdyb3Vwc1tncm91cEluZGV4IC0gMV0gPz8gXCJcIik7XG4gICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL1xcXFxVKFxcZCspL2csIChfLCBncm91cEluZGV4KSA9PiAoZ3JvdXBzW2dyb3VwSW5kZXggLSAxXSA/PyBcIlwiKS50b1VwcGVyQ2FzZSgpKTtcbiAgICByZXN1bHQgPSBzZWRDb21tYW5kKHJlc3VsdCwgXCJVXCIsIGdyb3VwcywgKHN0cikgPT4gc3RyPy50b1VwcGVyQ2FzZSgpKTtcbiAgICByZXN1bHQgPSBzZWRDb21tYW5kKHJlc3VsdCwgXCJMXCIsIGdyb3VwcywgKHN0cikgPT4gc3RyPy50b0xvd2VyQ2FzZSgpKTtcbiAgICByZXN1bHQgPSBzZWRDb21tYW5kKHJlc3VsdCwgXCJJXCIsIGdyb3VwcywgKHN0cikgPT4gc3RyPy5bMF0pO1xuICAgIHJldHVybiByZXN1bHQgPz8gXCJcIjtcbiAgfSk7XG59XG5mdW5jdGlvbiBzZWRDb21tYW5kKGlucHV0LCBjaGFyLCBncm91cHMsIHRyYW5zZm9ybSkge1xuICBpZiAoaW5wdXQgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gaW5wdXQucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcXFxcXCR7Y2hhcn0oXFxcXGQrKWAsIFwiZ1wiKSwgKF8sIGdyb3VwSW5kZXgpID0+IHRyYW5zZm9ybShncm91cHNbZ3JvdXBJbmRleCAtIDFdID8/IFwiXCIpID8/IFwiXCIpO1xufVxuZnVuY3Rpb24gc2VhcmNoKG5hbWUpIHtcbiAgaWYgKG5hbWU/Lmxlbmd0aCA9PT0gdW5kZWZpbmVkIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFwiXCI7XG4gIH1cbiAgY29uc3Qgc2VhcmNoMiA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7XG4gIGlmIChzZWFyY2gyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoc2VhcmNoMik7XG4gIHJldHVybiBwYXJhbXMuZ2V0KG5hbWUpID8/IFwiXCI7XG59XG5mdW5jdGlvbiBjb2FsZXNjZSgpIHtcbiAgZm9yIChsZXQgaSA9IDA7aSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKGFyZyAhPT0gbnVsbCAmJiBhcmcgIT09IHVuZGVmaW5lZCAmJiBhcmcgIT09IFwiXCIgJiYgYXJnICE9PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5mdW5jdGlvbiBqb2luKCkge1xuICBjb25zdCBhcmdzID0gWy4uLmFyZ3VtZW50c10uc2xpY2UoMCwgYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgY29uc3Qgc2VwYXJhdG9yID0gb3B0aW9ucy5oYXNoLnNlcGFyYXRvciA/PyBcIi9cIjtcbiAgcmV0dXJuIGFyZ3MuZmlsdGVyKChhcmcpID0+IGFyZyAhPT0gdW5kZWZpbmVkICYmIGFyZyAhPT0gbnVsbCAmJiBhcmcgIT09IFwiXCIpLmpvaW4oc2VwYXJhdG9yKTtcbn1cbmZ1bmN0aW9uIHVyaShjb21wb25lbnQpIHtcbiAgaWYgKGNvbXBvbmVudD8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHwgY29tcG9uZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG4gIGNvbnN0IGVuY29kZWQgPSBlbmNvZGVVUklDb21wb25lbnQoY29tcG9uZW50KTtcbiAgcmV0dXJuIGVuY29kZWQucmVwbGFjZUFsbChcIidcIiwgXCIlMjdcIik7XG59XG5mdW5jdGlvbiBlcShhLCBiKSB7XG4gIHJldHVybiBhID09PSBiO1xufVxuZnVuY3Rpb24gb3IoYSwgYikge1xuICByZXR1cm4gQm9vbGVhbihhKSB8fCBCb29sZWFuKGIpO1xufVxuZnVuY3Rpb24gYW5kKGEsIGIpIHtcbiAgcmV0dXJuIEJvb2xlYW4oYSkgJiYgQm9vbGVhbihiKTtcbn1cbmZ1bmN0aW9uIGlzSW4oYSwgYikge1xuICBpZiAoYj8ubGVuZ3RoID09PSB1bmRlZmluZWQgfHwgYi5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGIuaW5jbHVkZXMoYSk7XG59XG5mdW5jdGlvbiBhcnJheSgpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oYXJndW1lbnRzKS5zbGljZSgwLCAtMSk7XG59XG52YXIgR2V0SGVscGVycyA9ICgpID0+ICh7XG4gIHNsdWcsXG4gIGxvd2VyLFxuICBwYXRoLFxuICBzZWQsXG4gIHJlcGxhY2U6IHNlZCxcbiAgc2VhcmNoLFxuICBjb2FsZXNjZSxcbiAgam9pbixcbiAgZ2V0X2ZpcnN0OiBjb2FsZXNjZSxcbiAgdXJpLFxuICBvcixcbiAgYW5kLFxuICBpc0luLFxuICBhcnJheVxufSk7XG4vLyBzcmMvQXBpLnRzXG52YXIgaW1wb3J0X3J1bnRpbWUgPSBfX3RvRVNNKHJlcXVpcmVfcnVudGltZTIoKSwgMSk7XG5cbi8vIHNyYy9oZWxwZXJzL3Jlc3BvbnNlL0Nhcm91c2VsLnRzXG52YXIgQnVpbGRTcG9uc29yZWRDYXJvdXNlbCA9IChsb2dnZXIsIHJlcXVlc3RCaWRzLCBnZW5lcmF0ZVByb2R1Y3RDYXJkUmVzcG9uc2UsIHJlcXVlc3QpID0+IHtcbiAgY29uc3QgbG9nMiA9IEN0eChsb2dnZXIpPy53aXRoKFwiQnVpbGRTcG9uc29yZWRDYXJvdXNlbFwiKTtcbiAgbG9nMj8uaW5mbyhcIkJ1aWxkaW5nIHNwb25zb3JlZCBjYXJvdXNlbFwiKTtcbiAgcmV0dXJuIE9rKHtcbiAgICB0eXBlOiAzLFxuICAgIGdldFByb2R1Y3Q6IGdldE5leHRTcG9uc29yZWRDYXJvdXNlbFByb2R1Y3QuYmluZCh1bmRlZmluZWQsIGxvZzIsIHJlcXVlc3RCaWRzLCBnZW5lcmF0ZVByb2R1Y3RDYXJkUmVzcG9uc2UsIHJlcXVlc3QpXG4gIH0pO1xufTtcbnZhciBCdWlsZFJlY29tbWVuZGVkQ2Fyb3VzZWwgPSAobG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWcsIHRvcFByb2R1Y3RHZW5lcmF0b3IsIGZvcllvdVByb2R1Y3RHZW5lcmF0b3IsIHBhc3RQdXJjaGFzZXNQcm9kdWN0R2VuZXJhdG9yLCB1c2VySWQsIHJlY29tbWVuZGVyVHlwZSkgPT4ge1xuICBzd2l0Y2ggKHJlY29tbWVuZGVyVHlwZS50eXBlKSB7XG4gICAgY2FzZSBcInRvcC1wcm9kdWN0c1wiOiB7XG4gICAgICByZXR1cm4gYnVpbGRSZWNvbW1lbmRlZENhcm91c2VsSW50ZXJuYWwobG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWcsIHtcbiAgICAgICAgcmVjb21tZW5kZXJUeXBlOiBcInRvcC1wcm9kdWN0c1wiLFxuICAgICAgICB0b3BQcm9kdWN0R2VuZXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBcImZvci15b3VcIjoge1xuICAgICAgcmV0dXJuIGJ1aWxkUmVjb21tZW5kZWRDYXJvdXNlbEludGVybmFsKGxvZ2dlciwgd2luZG93SW5mbywgY29uZmlnLCB7XG4gICAgICAgIHJlY29tbWVuZGVyVHlwZTogXCJmb3IteW91XCIsXG4gICAgICAgIGZvcllvdVByb2R1Y3RHZW5lcmF0b3IsXG4gICAgICAgIHRvcFByb2R1Y3RHZW5lcmF0b3IsXG4gICAgICAgIHVzZXJJZFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNhc2UgXCJwYXN0LXB1cmNoYXNlc1wiOiB7XG4gICAgICByZXR1cm4gYnVpbGRSZWNvbW1lbmRlZENhcm91c2VsSW50ZXJuYWwobG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWcsIHtcbiAgICAgICAgcmVjb21tZW5kZXJUeXBlOiBcInBhc3QtcHVyY2hhc2VzXCIsXG4gICAgICAgIHBhc3RQdXJjaGFzZXNQcm9kdWN0R2VuZXJhdG9yLFxuICAgICAgICB0b3BQcm9kdWN0R2VuZXJhdG9yLFxuICAgICAgICB1c2VySWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufTtcbnZhciBidWlsZFJlY29tbWVuZGVkQ2Fyb3VzZWxJbnRlcm5hbCA9IChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVjb21tZW5kZXJUeXBlKSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImJ1aWxkUmVjb21tZW5kZWRDYXJvdXNlbEludGVybmFsXCIpO1xuICBsb2cyPy5pbmZvKFwiQnVpbGRpbmcgUmVjb21tZW5kZWQgQ2Fyb3VzZWxcIik7XG4gIHJldHVybiBPayh7XG4gICAgdHlwZTogMyxcbiAgICBnZXRQcm9kdWN0OiBnZXROZXh0UmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3QuYmluZCh1bmRlZmluZWQsIGxvZzIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVjb21tZW5kZXJUeXBlKVxuICB9KTtcbn07XG52YXIgQnVpbGRIeWJyaWRDYXJvdXNlbCA9IChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgdG9wUHJvZHVjdEdlbmVyYXRvciwgZm9yWW91UHJvZHVjdEdlbmVyYXRvciwgcGFzdFB1cmNoYXNlc1Byb2R1Y3RHZW5lcmF0b3IsIHVzZXJJZCwgcmVxdWVzdCwgcmVjb21tZW5kZXJUeXBlKSA9PiB7XG4gIHN3aXRjaCAocmVjb21tZW5kZXJUeXBlLnR5cGUpIHtcbiAgICBjYXNlIFwidG9wLXByb2R1Y3RzXCI6IHtcbiAgICAgIHJldHVybiBidWlsZEh5YnJpZENhcm91c2VsSW50ZXJuYWwobG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWcsIHJlcXVlc3RCaWRzLCBnZW5lcmF0ZVByb2R1Y3RDYXJkUmVzcG9uc2UsIHJlcXVlc3QsIHtcbiAgICAgICAgcmVjb21tZW5kZXJUeXBlOiBcInRvcC1wcm9kdWN0c1wiLFxuICAgICAgICB0b3BQcm9kdWN0R2VuZXJhdG9yXG4gICAgICB9KTtcbiAgICB9XG4gICAgY2FzZSBcImZvci15b3VcIjoge1xuICAgICAgcmV0dXJuIGJ1aWxkSHlicmlkQ2Fyb3VzZWxJbnRlcm5hbChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgcmVxdWVzdCwge1xuICAgICAgICByZWNvbW1lbmRlclR5cGU6IFwiZm9yLXlvdVwiLFxuICAgICAgICBmb3JZb3VQcm9kdWN0R2VuZXJhdG9yLFxuICAgICAgICB0b3BQcm9kdWN0R2VuZXJhdG9yLFxuICAgICAgICB1c2VySWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjYXNlIFwicGFzdC1wdXJjaGFzZXNcIjoge1xuICAgICAgcmV0dXJuIGJ1aWxkSHlicmlkQ2Fyb3VzZWxJbnRlcm5hbChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgcmVxdWVzdCwge1xuICAgICAgICByZWNvbW1lbmRlclR5cGU6IFwicGFzdC1wdXJjaGFzZXNcIixcbiAgICAgICAgcGFzdFB1cmNoYXNlc1Byb2R1Y3RHZW5lcmF0b3IsXG4gICAgICAgIHRvcFByb2R1Y3RHZW5lcmF0b3IsXG4gICAgICAgIHVzZXJJZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xudmFyIGJ1aWxkSHlicmlkQ2Fyb3VzZWxJbnRlcm5hbCA9IChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgcmVxdWVzdCwgcmVjb21tZW5kZXJUeXBlKSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcIkJ1aWxkSHlicmlkQ2Fyb3VzZWxcIik7XG4gIGxvZzI/LmluZm8oXCJCdWlsZGluZyBoeWJyaWQgY2Fyb3VzZWxcIiwgcmVxdWVzdCwgcmVjb21tZW5kZXJUeXBlKTtcbiAgcmV0dXJuIE9rKHtcbiAgICB0eXBlOiAzLFxuICAgIGdldFByb2R1Y3Q6IGdldE5leHRIeWJyaWRDYXJvdXNlbFByb2R1Y3QuYmluZCh1bmRlZmluZWQsIGxvZzIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgcmVxdWVzdCwgcmVjb21tZW5kZXJUeXBlKVxuICB9KTtcbn07XG5hc3luYyBmdW5jdGlvbiogZ2V0TmV4dEh5YnJpZENhcm91c2VsUHJvZHVjdChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgcmVxdWVzdCwgcmVjb21tZW5kZXJUeXBlKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImdldE5leHRIeWJyaWRDYXJvdXNlbFByb2R1Y3RcIik7XG4gIGxvZzI/LmluZm8oXCJFbnRlcmluZyBoeWJyaWQgY2Fyb3VzZWwgcHJvZHVjdCBnZW5lcmF0b3JcIik7XG4gIHlpZWxkKiBnZXROZXh0U3BvbnNvcmVkQ2Fyb3VzZWxQcm9kdWN0KGxvZzIsIHJlcXVlc3RCaWRzLCBnZW5lcmF0ZVByb2R1Y3RDYXJkUmVzcG9uc2UsIHJlcXVlc3QpO1xuICBsb2cyPy5pbmZvKFwiRG9uZSBnZXR0aW5nIG5leHQgc3BvbnNvcmVkQ2Fyb3VzZWxQcm9kdWN0XCIpO1xuICB5aWVsZCogZ2V0TmV4dFJlY29tbWVuZGVkQ2Fyb3VzZWxQcm9kdWN0KGxvZzIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVjb21tZW5kZXJUeXBlKTtcbn1cbmFzeW5jIGZ1bmN0aW9uKiBnZXROZXh0U3BvbnNvcmVkQ2Fyb3VzZWxQcm9kdWN0KGxvZ2dlciwgcmVxdWVzdEJpZHMsIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgcmVxdWVzdCkge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZXROZXh0U3BvbnNvcmVkQ2Fyb3VzZWxQcm9kdWN0XCIpO1xuICB0cnkge1xuICAgIGxvZzI/LmluZm8oXCJFbnRlcmluZyBzcG9uc29yZWQgY2Fyb3VzZWwgcHJvZHVjdCBnZW5lcmF0b3JcIik7XG4gICAgbG9nMj8uaW5mbyhcIkdldHRpbmcgbmV4dCBzcG9uc29yZWQgY2Fyb3VzZWwgcHJvZHVjdHNcIiwgcmVxdWVzdCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCByZXF1ZXN0QmlkcyhyZXF1ZXN0KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2cyPy5pbmZvKFwiTm8gcmVzcG9uc2UgZnJvbSBiaWRkZXJcIiwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiaWRzID0gcmVzcG9uc2UudmFsdWUuc2VhdGJpZD8uWzBdPy5iaWQ7XG4gICAgaWYgKGJpZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9nMj8uaW5mbyhcIkdvdCBubyBiaWRzIGluIHJlc3BvbnNlIVwiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdG9yID0gZ2VuZXJhdGVQcm9kdWN0Q2FyZFJlc3BvbnNlKGJpZHMpO1xuICAgIGZvciBhd2FpdCAoY29uc3QgcHJvZHVjdCBvZiBnZW5lcmF0b3IpIHtcbiAgICAgIGxvZzI/LmRlYnVnKFwiR2V0dGluZyBuZXh0IHByb2R1Y3QgZnJvbSBleGlzdGluZyBiaWRkZXIgcmVzcG9uc2VcIiwgcHJvZHVjdCk7XG4gICAgICB5aWVsZCBwcm9kdWN0O1xuICAgIH1cbiAgICBsb2cyPy5kZWJ1ZyhcIk91dCBvZiBiaWRzIGZyb20gcHJldmlvdXMgcmVzcG9uc2UuIFJlcXVlc3RpbmcgbmV3IGJpZCByZXNwb25zZVwiKTtcbiAgICByZXR1cm47XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGxvZzI/LmVycm9yKFwicHJvZHVjdCBjYXJvdXNlbCBnZW5lcmF0b3IgZmFpbGVkISBHb3RcIiwgZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBsb2cyPy53YXJuKFwiRXhpdGluZyBjYXJvdXNlbCBwcm9kdWN0IGdlbmVyYXRvclwiKTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24qIGdldE5leHRSZWNvbW1lbmRlZENhcm91c2VsUHJvZHVjdChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVjb21tZW5kZXJUeXBlKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImdldE5leHRSZWNvbW1lbmRlZENhcm91c2VsUHJvZHVjdFwiKTtcbiAgbG9nMj8uaW5mbyhcIkVudGVyaW5nIHJlY29tbWVuZGVkIGNhcm91c2VsIHByb2R1Y3QgZ2VuZXJhdG9yXCIpO1xuICBsb2cyPy5pbmZvKFwiR2V0dGluZyBuZXh0IHJlY29tbWVuZGVkIGNhcm91c2VsIHByb2R1Y3RcIik7XG4gIHN3aXRjaCAocmVjb21tZW5kZXJUeXBlLnJlY29tbWVuZGVyVHlwZSkge1xuICAgIGNhc2UgXCJ0b3AtcHJvZHVjdHNcIjoge1xuICAgICAgeWllbGQqIGdldE5leHRUb3BBbGxSZWNvbW1lbmRlZENhcm91c2VsUHJvZHVjdChsb2cyLCB3aW5kb3dJbmZvLCBjb25maWcsIHJlY29tbWVuZGVyVHlwZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhc2UgXCJmb3IteW91XCI6IHtcbiAgICAgIGlmIChyZWNvbW1lbmRlclR5cGUudXNlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeWllbGQqIGdldE5leHRGb3JZb3VSZWNvbW1lbmRlZENhcm91c2VsUHJvZHVjdChsb2cyLCB3aW5kb3dJbmZvLCBjb25maWcsIHJlY29tbWVuZGVyVHlwZSwgcmVjb21tZW5kZXJUeXBlLnVzZXJJZCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBcInBhc3QtcHVyY2hhc2VzXCI6IHtcbiAgICAgIGlmIChyZWNvbW1lbmRlclR5cGUudXNlcklkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgeWllbGQqIGdldE5leHRQYXN0UHVyY2hhc2VzUmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3QobG9nMiwgd2luZG93SW5mbywgY29uZmlnLCByZWNvbW1lbmRlclR5cGUsIHJlY29tbWVuZGVyVHlwZS51c2VySWQpO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHlpZWxkKiBnZXROZXh0VG9wQWxsUmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3QobG9nMiwgd2luZG93SW5mbywgY29uZmlnLCB7XG4gICAgcmVjb21tZW5kZXJUeXBlOiBcInRvcC1wcm9kdWN0c1wiLFxuICAgIHRvcFByb2R1Y3RHZW5lcmF0b3I6IHJlY29tbWVuZGVyVHlwZS50b3BQcm9kdWN0R2VuZXJhdG9yXG4gIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24qIGdldE5leHRUb3BBbGxSZWNvbW1lbmRlZENhcm91c2VsUHJvZHVjdChsb2dnZXIsIHdpbmRvd0luZm8sIGNvbmZpZywgcmVjb21tZW5kZXJUeXBlKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImdldE5leHRUb3BBbGxSZWNvbW1lbmRlZENhcm91c2VsUHJvZHVjdFwiKTtcbiAgbG9nMj8uaW5mbyhcIkdldHRpbmcgbmV4dCB0b3AgYWxsIHByb2R1Y3RcIik7XG4gIGZvciBhd2FpdCAoY29uc3QgcHJvZHVjdCBvZiByZWNvbW1lbmRlclR5cGUudG9wUHJvZHVjdEdlbmVyYXRvcigpKSB7XG4gICAgY29uc3QgYnVpbHQgPSByZWNvbW1lbmRlZFByb2R1Y3RUb0J1aWx0UHJvZHVjdChsb2cyLCB3aW5kb3dJbmZvLCBjb25maWcsIHByb2R1Y3QpO1xuICAgIGlmICghYnVpbHQub2spIHtcbiAgICAgIGxvZzI/Lndhcm4oXCJGYWlsZWQgdG8gYnVpbGQgcHJvZHVjdCByZXNwb25zZSBmcm9tIHJlY29tbWVuZGVkIHByb2R1Y3QuIFNraXBwaW5nIHRoaXMgb25lXCIsIHByb2R1Y3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIGJ1aWx0LnZhbHVlO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiogZ2V0TmV4dEZvcllvdVJlY29tbWVuZGVkQ2Fyb3VzZWxQcm9kdWN0KGxvZ2dlciwgd2luZG93SW5mbywgY29uZmlnLCByZWNvbW1lbmRlclR5cGUsIHVzZXJJZCkge1xuICBjb25zdCBsb2cyID0gQ3R4KGxvZ2dlcik/LndpdGgoXCJnZXROZXh0Rm9yWW91UmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3RcIik7XG4gIGxvZzI/LmluZm8oJ0dldHRpbmcgbmV4dCBcImZvci15b3VcIiByZWNvbW1lbmRlZCBwcm9kdWN0Jyk7XG4gIGZvciBhd2FpdCAoY29uc3QgcHJvZHVjdCBvZiByZWNvbW1lbmRlclR5cGUuZm9yWW91UHJvZHVjdEdlbmVyYXRvcih1c2VySWQpKSB7XG4gICAgY29uc3QgYnVpbHQgPSByZWNvbW1lbmRlZFByb2R1Y3RUb0J1aWx0UHJvZHVjdChsb2cyLCB3aW5kb3dJbmZvLCBjb25maWcsIHByb2R1Y3QpO1xuICAgIGlmICghYnVpbHQub2spIHtcbiAgICAgIGxvZzI/Lndhcm4oXCJGYWlsZWQgdG8gYnVpbGQgcHJvZHVjdCByZXNwb25zZSBmcm9tIHJlY29tbWVuZGVkIHByb2R1Y3QuIFNraXBwaW5nIHRoaXMgb25lXCIsIHByb2R1Y3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIGJ1aWx0LnZhbHVlO1xuICB9XG4gIHlpZWxkKiBnZXROZXh0VG9wQWxsUmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3QobG9nMiwgd2luZG93SW5mbywgY29uZmlnLCB7XG4gICAgcmVjb21tZW5kZXJUeXBlOiBcInRvcC1wcm9kdWN0c1wiLFxuICAgIHRvcFByb2R1Y3RHZW5lcmF0b3I6IHJlY29tbWVuZGVyVHlwZS50b3BQcm9kdWN0R2VuZXJhdG9yXG4gIH0pO1xufVxuYXN5bmMgZnVuY3Rpb24qIGdldE5leHRQYXN0UHVyY2hhc2VzUmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3QobG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWcsIHJlY29tbWVuZGVyVHlwZSwgdXNlcklkKSB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcImdldE5leHRQYXN0UHVyY2hhc2VzUmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3RcIik7XG4gIGxvZzI/LmluZm8oJ0dldHRpbmcgbmV4dCBcImJ1eS1hZ2FpblwiIHJlY29tbWVuZGVkIHByb2R1Y3QnKTtcbiAgZm9yIGF3YWl0IChjb25zdCBwcm9kdWN0IG9mIHJlY29tbWVuZGVyVHlwZS5wYXN0UHVyY2hhc2VzUHJvZHVjdEdlbmVyYXRvcih1c2VySWQpKSB7XG4gICAgY29uc3QgYnVpbHQgPSByZWNvbW1lbmRlZFByb2R1Y3RUb0J1aWx0UHJvZHVjdChsb2cyLCB3aW5kb3dJbmZvLCBjb25maWcsIHByb2R1Y3QpO1xuICAgIGlmICghYnVpbHQub2spIHtcbiAgICAgIGxvZzI/Lndhcm4oXCJGYWlsZWQgdG8gYnVpbGQgcHJvZHVjdCByZXNwb25zZSBmcm9tIHJlY29tbWVuZGVkIHByb2R1Y3QuIFNraXBwaW5nIHRoaXMgb25lXCIsIHByb2R1Y3QpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHlpZWxkIGJ1aWx0LnZhbHVlO1xuICB9XG4gIHlpZWxkKiBnZXROZXh0VG9wQWxsUmVjb21tZW5kZWRDYXJvdXNlbFByb2R1Y3QobG9nMiwgd2luZG93SW5mbywgY29uZmlnLCB7XG4gICAgcmVjb21tZW5kZXJUeXBlOiBcInRvcC1wcm9kdWN0c1wiLFxuICAgIHRvcFByb2R1Y3RHZW5lcmF0b3I6IHJlY29tbWVuZGVyVHlwZS50b3BQcm9kdWN0R2VuZXJhdG9yXG4gIH0pO1xufVxudmFyIHJlY29tbWVuZGVkUHJvZHVjdFRvQnVpbHRQcm9kdWN0ID0gKGxvZ2dlciwgd2luZG93SW5mbywgY29uZmlnLCBwcm9kdWN0KSA9PiB7XG4gIGNvbnN0IGxvZzIgPSBDdHgobG9nZ2VyKT8ud2l0aChcInJlY29tbWVuZGVkUHJvZHVjdFRvQnVpbHRQcm9kdWN0XCIpO1xuICBsb2cyPy5pbmZvKFwiQ29udmVydGluZyByZWNvbW1lbmRlZCBwcm9kdWN0IHRvIGJ1aWx0IHByb2R1Y3QgY2FyZCByZXNwb25zZVwiKTtcbiAgY29uc3QgY2xpY2t0aHJvdWdoID0gQnVpbGRDbGlja3Rocm91Z2hVcmwobG9nMiwgd2luZG93SW5mbywgY29uZmlnLCBwcm9kdWN0KTtcbiAgaWYgKCFjbGlja3Rocm91Z2gub2spIHtcbiAgICByZXR1cm4gY2xpY2t0aHJvdWdoO1xuICB9XG4gIHJldHVybiBPayh7XG4gICAgdHlwZTogMixcbiAgICBjbGlja3Rocm91Z2g6IGNsaWNrdGhyb3VnaC52YWx1ZSArIFwiX3JlY29tbWVuZGVkXCIsXG4gICAgcHJvZHVjdCxcbiAgICBzcG9uc29yZWQ6IGZhbHNlXG4gIH0pO1xufTtcblxuLy8gc3JjL0FwaS50c1xudmFyIFBST0RfQklEREVSID0gXCIvL2JpZC5zdXJmc2lkZS5pb1wiO1xudmFyIFBST0RfQ09ORklHVVJBVElPTl9TRVJWSUNFID0gXCIvL3Iuc3VyZnNpZGUuaW9cIjtcbnZhciBQUk9EX1NQT05TT1JFRF9QUk9EVUNUX0ZFRUQgPSBcIi8vY3JlYXRpdmUuc3VyZnNpZGUuaW9cIjtcbnZhciBQUk9EX1JFQ09NTUVOREVEX1BST0RVQ1RfRkVFRCA9IFwiLy9jcmVhdGl2ZS5zdXJmc2lkZS5pb1wiO1xudmFyIFBST0RfUkVDT01NRU5ERVJfU0VSVklDRSA9IFwiLy90LnN1cmZzaWRlLmlvXCI7XG52YXIgVExTID0gKHVybCkgPT4gXCJodHRwczpcIiArIHVybDtcbmFzeW5jIGZ1bmN0aW9uIEluaXRTdXJmQWRzQ29yZUludGVybmFsKGxvZ2dlciwgcmVxdWVzdEJpZHMsIGdldENvbmZpZ3VyYXRpb24sIGdldEdlbywgZ2V0RGV2aWNlLCBnZXRTcG9uc29yZWRQcm9kdWN0LCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgZ2V0UmVjb21tZW5kZWRQcm9kdWN0LCBnZW5lcmF0ZVRvcFByb2R1Y3RzLCBnZW5lcmF0ZUZvcllvdSwgZ2VuZXJhdGVQcmV2aW91c1B1cmNoYXNlcywgYnVpbGRBbGxTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlcywgZ2VuZXJhdGVTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlLCBoYW5kbGViYXJzLCB3aW5kb3dJbmZvLCBzY3JlZW4sIG5hdmlnYXRvcjIsIG1vYmlsZSwgaXAsIGdlb1Byb3ZpZGVyVG9rZW4sIGFjY291bnRJZCwgc2l0ZUlkLCBjaGFubmVsSWQsIGxvY2F0aW9uSWQsIHVzZXJJZCkge1xuICBjb25zdCBkZXZpY2UgPSBnZXREZXZpY2Uoc2NyZWVuLCBuYXZpZ2F0b3IyLCBtb2JpbGUpO1xuICBjb25zdCBnZW8gPSBhd2FpdCBnZXRHZW8oaXAsIGdlb1Byb3ZpZGVyVG9rZW4pO1xuICBjb25zdCBjb25maWd1cmF0aW9uID0gYXdhaXQgZ2V0Q29uZmlndXJhdGlvbigpO1xuICBpZiAoIWNvbmZpZ3VyYXRpb24ub2spIHtcbiAgICByZXR1cm4gRXJyKG5ldyBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yKGFjY291bnRJZCwgc2l0ZUlkKSk7XG4gIH1cbiAgY29uc3Qgc3RhcnRSZXF1ZXN0ID0gU3RhcnRSZXF1ZXN0LmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIGFjY291bnRJZCwgc2l0ZUlkLCBjaGFubmVsSWQsIGxvY2F0aW9uSWQsIEdldFZhbHVlKGRldmljZSksIEdldFZhbHVlKGdlbyksIHVzZXJJZCk7XG4gIGNvbnN0IHN0YXJ0TmF0aXZlID0gU3RhcnROYXRpdmUuYmluZCh1bmRlZmluZWQsIGxvZ2dlcik7XG4gIGNvbnN0IGRlZmF1bHROYXRpdmUgPSBEZWZhdWx0TmF0aXZlLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIpO1xuICByZXR1cm4gT2soe1xuICAgIGxvZ2dlcixcbiAgICBnZXREZXZpY2UsXG4gICAgZGV2aWNlOiBHZXRWYWx1ZShkZXZpY2UpLFxuICAgIGdldEdlbyxcbiAgICBnZW86IEdldFZhbHVlKGdlbyksXG4gICAgY29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvbi52YWx1ZSxcbiAgICBnZXRDb25maWd1cmF0aW9uLFxuICAgIGhhbmRsZWJhcnMsXG4gICAgcmVxdWVzdEJpZHMsXG4gICAgc3RhcnRSZXF1ZXN0LFxuICAgIHN0YXJ0TmF0aXZlLFxuICAgIGRlZmF1bHROYXRpdmUsXG4gICAgZ2V0U3BvbnNvcmVkUHJvZHVjdCxcbiAgICBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cyxcbiAgICBnZXRSZWNvbW1lbmRlZFByb2R1Y3QsXG4gICAgZ2VuZXJhdGVUb3BQcm9kdWN0cyxcbiAgICBnZW5lcmF0ZUZvcllvdSxcbiAgICBnZW5lcmF0ZVByZXZpb3VzUHVyY2hhc2VzLFxuICAgIGJ1aWxkQWxsU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZXMsXG4gICAgZ2VuZXJhdGVTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlLFxuICAgIGJ1aWxkU3BvbnNvcmVkQ2Fyb3VzZWw6IEJ1aWxkU3BvbnNvcmVkQ2Fyb3VzZWwuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgcmVxdWVzdEJpZHMsIGdlbmVyYXRlU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZSksXG4gICAgYnVpbGRSZWNvbW1lbmRlZENhcm91c2VsOiBCdWlsZFJlY29tbWVuZGVkQ2Fyb3VzZWwuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgd2luZG93SW5mbywgY29uZmlndXJhdGlvbi52YWx1ZSwgZ2VuZXJhdGVUb3BQcm9kdWN0cywgZ2VuZXJhdGVQcmV2aW91c1B1cmNoYXNlcywgZ2VuZXJhdGVGb3JZb3UsIHVzZXJJZCksXG4gICAgYnVpbGRIeWJyaWRDYXJvdXNlbDogQnVpbGRIeWJyaWRDYXJvdXNlbC5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCB3aW5kb3dJbmZvLCBjb25maWd1cmF0aW9uLnZhbHVlLCByZXF1ZXN0QmlkcywgZ2VuZXJhdGVTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlLCBnZW5lcmF0ZVRvcFByb2R1Y3RzLCBnZW5lcmF0ZVByZXZpb3VzUHVyY2hhc2VzLCBnZW5lcmF0ZUZvcllvdSwgdXNlcklkKVxuICB9KTtcbn1cbnZhciBJbml0U3VyZkFkc0NvcmVTZXJ2aWNlcyA9IGFzeW5jIChsb2dnZXIsIGJpZGRlclNlcnZpY2VVcmwsIGNvbmZpZ3VyYXRpb25TZXJ2aWNlVXJsLCBwcm9kdWN0RmVlZFVybCwgcmVjb21tZW5kZWRQcm9kdWN0RmVlZFVybCwgcmVjb21tZW5kZXJTZXJ2aWNlVXJsLCB3aW5kb3dJbmZvLCBzY3JlZW4sIG5hdmlnYXRvcjIsIG1vYmlsZSwgaXAsIGdlb1Byb3ZpZGVyVG9rZW4sIGFjY291bnRJZCwgc2l0ZUlkLCBjaGFubmVsSWQsIGxvY2F0aW9uSWQsIHVzZXJJZCkgPT4ge1xuICBjb25zdCBoYW5kbGViYXJzID0gaW1wb3J0X3J1bnRpbWUuZGVmYXVsdC5jcmVhdGUoKTtcbiAgY29uc3QgcmVjb21tZW5kZWRQcm9kdWN0RmVlZCA9IEdldFJlY29tbWVuZGVkUHJvZHVjdC5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCByZWNvbW1lbmRlZFByb2R1Y3RGZWVkVXJsLCBhY2NvdW50SWQsIGxvY2F0aW9uSWQpO1xuICBjb25zdCBjb25maWd1cmF0aW9uU2VydmljZSA9IEdldENvbmZpZ3VyYXRpb24uYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgY29uZmlndXJhdGlvblNlcnZpY2VVcmwsIGhhbmRsZWJhcnMsIGFjY291bnRJZCwgc2l0ZUlkKTtcbiAgY29uc3QgY29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpZ3VyYXRpb25TZXJ2aWNlKCk7XG4gIGlmICghY29uZmlndXJhdGlvbi5vaykge1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xuICB9XG4gIGNvbnN0IGdldEFsbFNwb25zb3JlZFByb2R1Y3RzID0gR2V0QWxsU3BvbnNvcmVkUHJvZHVjdHMuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgcHJvZHVjdEZlZWRVcmwsIGFjY291bnRJZCwgbG9jYXRpb25JZCk7XG4gIGNvbnN0IGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSA9IEdlbmVyYXRlU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZS5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgd2luZG93SW5mbywgY29uZmlndXJhdGlvbi52YWx1ZSk7XG4gIHJldHVybiBhd2FpdCBJbml0U3VyZkFkc0NvcmVJbnRlcm5hbChsb2dnZXIsIFJlcXVlc3RCaWRzLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIGJpZGRlclNlcnZpY2VVcmwsIGFjY291bnRJZCwgc2l0ZUlkLCBsb2NhdGlvbklkLCBjaGFubmVsSWQpLCBjb25maWd1cmF0aW9uU2VydmljZSwgR2V0R2VvLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIpLCBHZXREZXZpY2UuYmluZCh1bmRlZmluZWQsIGxvZ2dlciksIEdldFNwb25zb3JlZFByb2R1Y3QuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgcHJvZHVjdEZlZWRVcmwsIGFjY291bnRJZCwgbG9jYXRpb25JZCksIGdldEFsbFNwb25zb3JlZFByb2R1Y3RzLCBHZXRSZWNvbW1lbmRlZFByb2R1Y3QuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgcmVjb21tZW5kZWRQcm9kdWN0RmVlZFVybCwgYWNjb3VudElkLCBsb2NhdGlvbklkKSwgR2VuZXJhdGVUb3BQcm9kdWN0cy5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCByZWNvbW1lbmRlZFByb2R1Y3RGZWVkLCByZWNvbW1lbmRlclNlcnZpY2VVcmwsIGFjY291bnRJZCwgc2l0ZUlkLCBsb2NhdGlvbklkKSwgR2VuZXJhdGVGb3JZb3UuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgcmVjb21tZW5kZWRQcm9kdWN0RmVlZCwgcmVjb21tZW5kZXJTZXJ2aWNlVXJsLCBhY2NvdW50SWQsIHNpdGVJZCwgbG9jYXRpb25JZCwgdXNlcklkID8/IFwidW5kZWZpbmVkXCIpLCBHZW5lcmF0ZVByZXZpb3VzUHVyY2hhc2VzLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsIHJlY29tbWVuZGVkUHJvZHVjdEZlZWQsIHJlY29tbWVuZGVyU2VydmljZVVybCwgYWNjb3VudElkLCBzaXRlSWQsIGxvY2F0aW9uSWQsIHVzZXJJZCA/PyBcInVuZGVmaW5lZFwiKSwgQnVpbGRBbGxTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlcy5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cywgd2luZG93SW5mbywgY29uZmlndXJhdGlvbi52YWx1ZSksIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZSwgaGFuZGxlYmFycywgd2luZG93SW5mbywgc2NyZWVuLCBuYXZpZ2F0b3IyLCBtb2JpbGUsIGlwLCBnZW9Qcm92aWRlclRva2VuLCBhY2NvdW50SWQsIHNpdGVJZCwgY2hhbm5lbElkLCBsb2NhdGlvbklkLCB1c2VySWQpO1xufTtcbnZhciBJbml0U3VyZkFkc0NvcmVTU1IgPSBhc3luYyAod2luZG93SW5mbywgc2NyZWVuLCBuYXZpZ2F0b3IyLCBtb2JpbGUsIGlwLCBnZW9Qcm92aWRlclRva2VuLCBhY2NvdW50SWQsIHNpdGVJZCwgY2hhbm5lbElkLCBsb2NhdGlvbklkLCB1c2VySWQsIGxvZ2dlcikgPT4gSW5pdFN1cmZBZHNDb3JlU2VydmljZXMobG9nZ2VyLCBUTFMoUFJPRF9CSURERVIpLCBUTFMoUFJPRF9DT05GSUdVUkFUSU9OX1NFUlZJQ0UpLCBUTFMoUFJPRF9TUE9OU09SRURfUFJPRFVDVF9GRUVEKSwgVExTKFBST0RfUkVDT01NRU5ERURfUFJPRFVDVF9GRUVEKSwgVExTKFBST0RfUkVDT01NRU5ERVJfU0VSVklDRSksIHdpbmRvd0luZm8sIHNjcmVlbiwgbmF2aWdhdG9yMiwgbW9iaWxlLCBpcCwgZ2VvUHJvdmlkZXJUb2tlbiwgYWNjb3VudElkLCBzaXRlSWQsIGNoYW5uZWxJZCwgbG9jYXRpb25JZCwgdXNlcklkKTtcbnZhciBJbml0U3VyZkFkc0NvcmUgPSBhc3luYyAoYWNjb3VudElkLCBzaXRlSWQsIGNoYW5uZWxJZCwgbG9jYXRpb25JZCwgdXNlcklkLCBsb2dnZXIpID0+IHtcbiAgY29uc3Qgd2luZG93SW5mbyA9IEdldFdpbmRvd0luZm8oKTtcbiAgaWYgKCF3aW5kb3dJbmZvLm9rKSB7XG4gICAgcmV0dXJuIHdpbmRvd0luZm87XG4gIH1cbiAgcmV0dXJuIEluaXRTdXJmQWRzQ29yZVNlcnZpY2VzKGxvZ2dlciwgVExTKFBST0RfQklEREVSKSwgVExTKFBST0RfQ09ORklHVVJBVElPTl9TRVJWSUNFKSwgVExTKFBST0RfU1BPTlNPUkVEX1BST0RVQ1RfRkVFRCksIFRMUyhQUk9EX1JFQ09NTUVOREVEX1BST0RVQ1RfRkVFRCksIFRMUyhQUk9EX1JFQ09NTUVOREVSX1NFUlZJQ0UpLCB3aW5kb3dJbmZvLnZhbHVlLCB3aW5kb3cuc2NyZWVuLCB3aW5kb3cubmF2aWdhdG9yLCBpc01vYmlsZSgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYWNjb3VudElkLCBzaXRlSWQsIGNoYW5uZWxJZCwgbG9jYXRpb25JZCwgdXNlcklkKTtcbn07XG5cbmNsYXNzIE1pc3NpbmdDb25maWd1cmF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKGFjY291bnRJZCwgc2l0ZUlkKSB7XG4gICAgc3VwZXIoYE1pc3NpbmcgY29uZmlndXJhdGlvbiBmb3JcbmAgKyBgICAgIGFjY291bnRJZDogJHthY2NvdW50SWR9XG5gICsgYCAgICBzaXRlSWQ6ICR7c2l0ZUlkfVxuYCArIFwiMS4gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgdGhlc2UgYXJlIHRoZSBjb3JyZWN0IHZhbHVlcyBmb3IgZWFjaCBmaWVsZFwiICsgXCIyLiBDaGVjayB5b3VyIHB1Ymxpc2hlciBjb25maWd1cmF0aW9uIGF0IFwiICsgYGh0dHBzOi8vYXBwLnN1cmZzaWRlLmlvL2ludmVudG9yeS9zaXRlcy9wdWJsaXNoZXIvJHthY2NvdW50SWR9LyR7c2l0ZUlkfWApO1xuICB9XG59XG5cbmNsYXNzIE5vdEFCcm93c2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdZb3UgYXJlIG5vdCBydW5uaW5nIFN1cmZzaWRlIEFkcyBDb3JlIGluIGEgV2ViIGJyb3dzZXIsIHNvIHlvdSBjYW5ub3QgdXNlIFwiSW5pdFN1cmZBZHNDb3JlXCIuICcgKyBcIkluc3RlYWQsIHVzZSBJbml0U3VyZkFkc0NvcmVTU1IsIGFuZCBwYXNzIHRoZSB1c2VyJ3Mgc2NyZWVuLCBuYXZpZ2F0b3IsIGFuZCBJUCBhZGRyZXNzIGV4cGxpY2l0bHkgXCIgKyBgc28gdGhhdCBTdXJmc2lkZSBBZHMgQ29yZSBjYW4gaW5pdGlhbGl6ZSBnZW8gYW5kIGRldmljZSBpbmZvcm1hdGlvbiBzZXJ2aWNlcy4gZS5nOiBcbmAgKyBgICAgIEluaXRTdXJmQWRzQ29yZVNTUihcbmAgKyBgICAgICAgICAvKiB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSB1c2VyJ3Mgc2NyZWVuOiAqL1xuYCArIGAgICAgICB7IHdpZHRoOiBzY3JlZW5XaWR0aCwgaGVpZ2h0OiBzY3JlZW5IZWlnaHQgfSxcbmAgKyBgICAgICAgICAvKiB1c2VyQWdlbnQgc3RyaW5nIGFuZCBsYW5ndWFnZSBvZiB0aGUgdXNlcjogKi9cbmAgKyBgICAgICAgeyB1c2VyQWdlbnQ6IHVzZXJBZ2VudCwgbGFuZ3VhZ2U6IHVzZXJMYW5ndWFnZSB9LFxuYCArIGAgICAgICAgIC8qIHdoZXRoZXIgdGhlIHVzZXIgaXMgb24gbW9iaWxlIG9yIG5vdDogKi9cbmAgKyBgICAgICAgdHJ1ZSxcbmAgKyBgICAgICAgICAvKiB0aGUgcmVxdWVzdGluZyBVc2VyJ3MgSVAgKi9cbmAgKyBgICAgICAgcmVxdWVzdC5pcEFkZHJlc3MsXG5gICsgYCAgICAgICAgLyogWW91ciBBUEkgVG9rZW4gZm9yIHRoZSBTdXJmc2lkZSBHZW8gU2VydmljZTogKi9cbmAgKyBgICAgICAgZ2VvUHJvdmlkZXJUb2tlbixcbmAgKyBgICAgICAgYWNjb3VudElkLFxuYCArIGAgICAgICBzaXRlSWQsXG5gICsgYCAgICAgIGNoYW5uZWxJZCxcbmAgKyBgICAgICAgbG9jYXRpb25JZCxcbmAgKyBgICAgICAgdXNlcklkLFxuYCArIGAgICAgICAgIC8qIE9wdGlvbmFsIGxvZ2dlcjogKi9cbmAgKyBgICAgICAgbG9nZ2VyXG5gICsgXCIgICAgKVwiKTtcbiAgfVxufVxudmFyIGlzTW9iaWxlID0gKCkgPT4gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZCA6IGZhbHNlO1xuXG4vLyBzcmMvaGVscGVycy9XaW5kb3cudHNcbnZhciBHZXRXaW5kb3dJbmZvID0gKCkgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiBFcnIobmV3IE5vdEFCcm93c2VyRXJyb3IpO1xuICB9XG4gIHJldHVybiBPayh7XG4gICAgb3JpZ2luOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgIHBvcnQ6IHdpbmRvdy5sb2NhdGlvbi5wb3J0LFxuICAgIHBhdGg6IFwiL1wiICsgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KFwiL1wiKS5maWx0ZXIoKHBhcnQpID0+IHBhcnQubGVuZ3RoID4gMCkuam9pbihcIi9cIiksXG4gICAgaG9zdDogd2luZG93LmxvY2F0aW9uLmhvc3QsXG4gICAgaG9zdF9uYW1lOiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgc2VhcmNoOiB3aW5kb3cubG9jYXRpb24uc2VhcmNoLFxuICAgIGhhc2g6IHdpbmRvdy5sb2NhdGlvbi5oYXNoLFxuICAgIHByb3RvY29sOiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2xcbiAgfSk7XG59O1xuLy8gc3JjL2luZGV4LnRzXG5jb25zb2xlLmxvZyhcInRlc3Q/ITEhXCIpO1xuZXhwb3J0IHtcbiAgdXJpLFxuICBzbHVnLFxuICBzZWQsXG4gIHNlYXJjaCxcbiAgcGF0aCxcbiAgb3IsXG4gIGxvd2VyLFxuICBqb2luLFxuICBpc0luLFxuICBlcSxcbiAgY29hbGVzY2UsXG4gIGFycmF5LFxuICBhbmQsXG4gIFZpZGVvTWltZXMsXG4gIFZhbHVlT3IsXG4gIFVua25vd25CaWRkZXJFcnJvcixcbiAgVHJ5R2V0LFxuICBUcnlEbyxcbiAgU3RhcnRSZXF1ZXN0LFxuICBTdGFydE5hdGl2ZSxcbiAgU29tZSxcbiAgUmVzdWx0U3RyZWFtLFxuICBSZXF1ZXN0QmlkcyxcbiAgUGxhY2VtZW50VHlwZXMsXG4gIFBpcGUsXG4gIFBST0RfU1BPTlNPUkVEX1BST0RVQ1RfRkVFRCxcbiAgUFJPRF9SRUNPTU1FTkRFUl9TRVJWSUNFLFxuICBQUk9EX1JFQ09NTUVOREVEX1BST0RVQ1RfRkVFRCxcbiAgUFJPRF9DT05GSUdVUkFUSU9OX1NFUlZJQ0UsXG4gIFBST0RfQklEREVSLFxuICBPayxcbiAgTm90QUJyb3dzZXJFcnJvcixcbiAgTm9OYXRpdmVFcnJvcixcbiAgTm9CaWRzRXJyb3IsXG4gIE5hdGl2ZVJlc3BvbnNlVG9Qcm9kdWN0SW5mb3JtYXRpb24sXG4gIE5hdGl2ZVBvc2l0aW9uLFxuICBOYXRpdmVJbWFnZVR5cGVzLFxuICBOYXRpdmVEYXRhVHlwZXMsXG4gIE5hdGl2ZUFzc2V0SWQsXG4gIE11bHRpcGxlRXJyb3JzRXJyb3IsXG4gIE1pc3NpbmdXaW5VcmxFcnJvcixcbiAgTWlzc2luZ1Byb2R1Y3RJZEVycm9yLFxuICBNaXNzaW5nUHJvZHVjdEVycm9yLFxuICBNaXNzaW5nQ29uZmlndXJhdGlvbkVycm9yLFxuICBNaXNzaW5nQmlkc0Vycm9yLFxuICBNaXNzaW5nQWRtRXJyb3IsXG4gIE1hbGZvcm1lZE5hdGl2ZVJlc3BvbnNlRXJyb3IsXG4gIE1hbGZvcm1lZEJpZFJlc3BvbnNlRXJyb3IsXG4gIEludGVybmFsU2VydmVyRXJyb3IsXG4gIEluaXRTdXJmQWRzQ29yZVNlcnZpY2VzLFxuICBJbml0U3VyZkFkc0NvcmVTU1IsXG4gIEluaXRTdXJmQWRzQ29yZUludGVybmFsLFxuICBJbml0U3VyZkFkc0NvcmUsXG4gIEluaXRMb2dnZXIsXG4gIEdldFdpbmRvd0luZm8sXG4gIEdldFZhbHVlT3JUaHJvdyxcbiAgR2V0VmFsdWUsXG4gIEdldFNwb25zb3JlZFByb2R1Y3QsXG4gIEdldFJlY29tbWVuZGVkUHJvZHVjdCxcbiAgR2V0SGVscGVycyxcbiAgR2V0R2VvLFxuICBHZXREZXZpY2UsXG4gIEdldENvbmZpZ3VyYXRpb24sXG4gIEdldEFsbFNwb25zb3JlZFByb2R1Y3RzLFxuICBHZW9Db250ZXh0VG9PUlRCLFxuICBHZW5lcmF0ZVRvcFByb2R1Y3RzLFxuICBHZW5lcmF0ZVNwb25zb3JlZFByb2R1Y3RDYXJkUmVzcG9uc2UsXG4gIEdlbmVyYXRlUHJldmlvdXNQdXJjaGFzZXMsXG4gIEdlbmVyYXRlRm9yWW91LFxuICBHZW5lcmF0ZUFycmF5LFxuICBGaWx0ZXIsXG4gIEV2ZW50VHlwZXMsXG4gIEV2ZW50VHJhY2tpbmdNZXRob2RzLFxuICBFcnIsXG4gIERlZmF1bHROYXRpdmUsXG4gIEN0eCxcbiAgQ3JlYXRpdmVUeXBlLFxuICBDb250ZXh0VHlwZXMsXG4gIENvbnRleHRTdWJUeXBlcyxcbiAgQ29uc3VtZU5Bc3luYyxcbiAgQ29uc3VtZU4sXG4gIENvbnN1bWVBbGxBc3luYyxcbiAgQ29uc3VtZUFsbCxcbiAgQnVpbGRDbGlja3Rocm91Z2hVcmwsXG4gIEJ1aWxkQWxsU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZXMsXG4gIEJpZGRlclN0YXJ0aW5nVXBFcnJvcixcbiAgQXN5bmNQaXBlLFxuICBBc3NlcnRWYWx1ZSxcbiAgQW55RmFpbGVkLFxuICBBbGxPck5vbmUsXG4gIEFnZW50VHlwZXMsXG4gIEFkQ29tMTBEZXZpY2VUeXBlc1xufTtcblxuLy8jIGRlYnVnSWQ9NkIxRUE5MkM5NDdGQzYzNDY0NzU2RTIxNjQ3NTZFMjFcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxuIiwKICAgICJpbXBvcnQge1xuICAgIEJ1aWxkQ2xpY2t0aHJvdWdoVXJsLFxuICAgIEN0eCxcbiAgICBFcnIsXG4gICAgR2V0VmFsdWUsXG4gICAgSUJpZCxcbiAgICBJQnVpbHRCYW5uZXJSZXNwb25zZSxcbiAgICBJQ29tcGlsZWRQdWJsaXNoZXJDb25maWd1cmF0aW9uLFxuICAgIElMb2dnZXIsXG4gICAgSU5hdGl2ZVRlbXBsYXRlRGVsZWdhdGVXaW5kb3csXG4gICAgSVByb2R1Y3RJbmZvcm1hdGlvbixcbiAgICBNaXNzaW5nQWRtRXJyb3IsXG4gICAgT2ssXG4gICAgUmVzdWx0XG59IGZyb20gJ0BzdXJmc2lkZS9hZHMtY29yZSc7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkQmFubmVyUmVzcG9uc2VGbiA9IChiaWQ6IElCaWQpID0+IFJlc3VsdDxJQnVpbHRCYW5uZXJSZXNwb25zZT47XG5cbmV4cG9ydCBjb25zdCBCdWlsZEJhbm5lclJlc3BvbnNlID0gKFxuICAgIGxvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB3aW5kb3dJbmZvOiBJTmF0aXZlVGVtcGxhdGVEZWxlZ2F0ZVdpbmRvdyxcbiAgICBjb25maWc6IElDb21waWxlZFB1Ymxpc2hlckNvbmZpZ3VyYXRpb24sXG4gICAgYmlkOiBJQmlkXG4pOiBSZXN1bHQ8SUJ1aWx0QmFubmVyUmVzcG9uc2U+ID0+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnQnVpbGRCYW5uZXJSZXNwb25zZScpO1xuICAgIGxvZz8uaW5mbygnQnVpbGRpbmcgYmFubmVyIHJlc3BvbnNlJyk7XG4gICAgbG9nPy5kZWJ1ZyhiaWQpO1xuICAgIGNvbnN0IGFkbSA9IGJpZD8uYWRtO1xuICAgIGlmKGFkbSA9PT0gdW5kZWZpbmVkIHx8IGFkbSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gRXJyKG5ldyBNaXNzaW5nQWRtRXJyb3IoYmlkID8/IG51bGwpKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgY29uc3QgYWRtRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhhZG0sICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCBkYXRhVGFnID0gYWRtRG9jLmdldEVsZW1lbnRCeUlkKCdzdXJmLXByb2R1Y3QtaW5mbycpO1xuICAgIGFkbURvYy5jaGlsZE5vZGVzLmZvckVhY2goY2hpbGQgPT4gbG9nPy5kZWJ1ZygoY2hpbGQgYXMgSFRNTEVsZW1lbnQpLm91dGVySFRNTCkpO1xuICAgIGNvbnN0IHByb2R1Y3REYXRhID0gZ2V0UHJvZHVjdEluZm9Gcm9tRGl2VGFnKGxvZywgZGF0YVRhZywgYmlkKTtcbiAgICBjb25zdCBjbGlja3Rocm91Z2ggPSBidWlsZEJpZGRlckNsaWNrQ2FsbGJhY2sobG9nLCB3aW5kb3dJbmZvLCBjb25maWcsIEdldFZhbHVlKHByb2R1Y3REYXRhKSwgYWRtRG9jKTtcbiAgICBpZighY2xpY2t0aHJvdWdoLm9rKSB7XG4gICAgICAgIGxvZz8uZXJyb3IoJ0ZhaWxlZCB0byBidWlsZCBiYW5uZXInLCBjbGlja3Rocm91Z2guZXJyb3IpO1xuICAgICAgICByZXR1cm4gY2xpY2t0aHJvdWdoO1xuICAgIH1cbiAgICBjb25zdCBzZXJpYWxpemVyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKTtcbiAgICBjb25zdCBodG1sID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhhZG1Eb2MpO1xuXG4gICAgcmV0dXJuIE9rKHtcbiAgICAgICAgdHlwZTogMCxcbiAgICAgICAgYWRtOiBodG1sLFxuICAgICAgICBjbGlja3Rocm91Z2g6IGNsaWNrdGhyb3VnaC52YWx1ZSxcbiAgICAgICAgYmlkXG4gICAgfSk7XG59O1xuXG5jb25zdCBidWlsZEJpZGRlckNsaWNrQ2FsbGJhY2sgPSAoXG4gICAgbG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIHdpbmRvd0luZm86IElOYXRpdmVUZW1wbGF0ZURlbGVnYXRlV2luZG93LFxuICAgIGNvbmZpZ3VyYXRpb246IElDb21waWxlZFB1Ymxpc2hlckNvbmZpZ3VyYXRpb24sXG4gICAgcHJvZHVjdERhdGE6IElQcm9kdWN0SW5mb3JtYXRpb24gfCB1bmRlZmluZWQsXG4gICAgZG9jdW1lbnQ6IERvY3VtZW50XG4pOiBSZXN1bHQ8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2J1aWxkQmlkZGVyQ2xpY2tDYWxsYmFjaycpO1xuICAgIGxvZz8uaW5mbygnQnVpbGRpbmcgYmlkZGVyIGNsaWNrIGNhbGxiYWNrJyk7XG4gICAgY29uc3QgYmlkZGVyQ2xpY2tDYWxsYmFja1VybEFuY2hvcnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdhW2hyZWYqPVxcXFx7U1VSRl9DT01NRVJDRV9VUkxcXFxcfV0nKTtcbiAgICBpZihiaWRkZXJDbGlja0NhbGxiYWNrVXJsQW5jaG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmKHByb2R1Y3REYXRhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxvZz8uZXJyb3IoXG4gICAgICAgICAgICAgICAgJ1RoZSBiYW5uZXIgaGFkIHtTVVJGX0NPTU1FUkNFX1VSTH0gaW4gaXRzIGNsaWNrdGhyb3VnaCBsaW5rLCBzbyBpdCBpcyBleHBlY3RpbmcgYSByZW5kZXJlZCAnICtcbiAgICAgICAgICAgICAgICAnY2xpY2t0aHJvdWdoIFVSTCwgYnV0IHRoZXJlIHdhcyBubyBwcm9kdWN0IGluZm8gcHJvdmlkZWQuIFRoZXJlZm9yZSwgdGhlIGJhbm5lciBjYW5ub3QgYmUgcmVuZGVyZWQsICcgK1xuICAgICAgICAgICAgICAgICdvciBlbHNlIGl0IG1pZ2h0IHJlZGlyZWN0IHRvIGFuIGludmFsaWQgcGFnZSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gRXJyKG5ldyBNaXNzaW5nUHJvZHVjdEluZm9FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpY2t0aHJvdWdoID0gQnVpbGRDbGlja3Rocm91Z2hVcmwoXG4gICAgICAgICAgICBsb2csIHdpbmRvd0luZm8sXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgICAgICAgcHJvZHVjdERhdGEgLy8gZGVzdHJ1Y3R1cmUgaW4gY2FzZSBpdCdzIHVuZGVmaW5lZC4gUHJvZHVjdEluZm8gaGFzIG5vIHJlcXVpcmVkIGZpZWxkc1xuICAgICAgICApO1xuICAgICAgICBpZiAoY2xpY2t0aHJvdWdoLm9rID09PSBmYWxzZSkge1xuICAgICAgICAgICAgbG9nPy5lcnJvcihcbiAgICAgICAgICAgICAgICAnVGhlIGJhbm5lciBoYWQge1NVUkZfQ09NTUVSQ0VfVVJMfSBpbiBpdHMgY2xpY2t0aHJvdWdoIGxpbmssIHNvIGl0IGlzIGV4cGVjdGluZyBhIHJlbmRlcmVkICcgK1xuICAgICAgICAgICAgICAgICdjbGlja3Rocm91Z2ggVVJMLCBidXQgdGhlIGNsaWNrdGhyb3VnaCBmYWlsZWQgdG8gcmVuZGVyLiBUaGVyZWZvcmUsIHRoZSBiYW5uZXIgY2Fubm90IGJlIHJlbmRlcmVkLCAnICtcbiAgICAgICAgICAgICAgICAnb3IgZWxzZSBpdCBtaWdodCByZWRpcmVjdCB0byBhbiBpbnZhbGlkIHBhZ2UnLFxuICAgICAgICAgICAgICAgIGNsaWNrdGhyb3VnaC5lcnJvclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjbGlja3Rocm91Z2g7IC8vIEVycm9yIFJlc3VsdFxuICAgICAgICB9XG4gICAgICAgIGJpZGRlckNsaWNrQ2FsbGJhY2tVcmxBbmNob3JzLmZvckVhY2goYSA9PiB7XG4gICAgICAgICAgICBjb25zdCBocmVmID0gYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICAgIGlmKGhyZWYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaW5hbENsaWNrID0gaHJlZi5yZXBsYWNlKCd7U1VSRl9DT01NRVJDRV9VUkx9JywgY2xpY2t0aHJvdWdoLnZhbHVlKTtcbiAgICAgICAgICAgIGEuc2V0QXR0cmlidXRlKCdocmVmJywgZmluYWxDbGljayk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBPayhjbGlja3Rocm91Z2gudmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gT2sodW5kZWZpbmVkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQcm9kdWN0SW5mb0Zyb21EaXZUYWcgPSAoXG4gICAgbG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIGRpdjogSFRNTEVsZW1lbnQgfCBudWxsLFxuICAgIGJpZDogSUJpZFxuKSA6IFJlc3VsdDxJUHJvZHVjdEluZm9ybWF0aW9uPiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2dldFByb2R1Y3RJbmZvRnJvbURpdlRhZycpO1xuICAgIGxvZz8uaW5mbygnR2V0dGluZyBwcm9kdWN0IGluZm8gZm9yIGJhbm5lcicpO1xuICAgIGlmIChkaXYgPT09IG51bGwpIHtcbiAgICAgICAgbG9nPy53YXJuKCdObyBwcm9kdWN0IGRhdGEgZm9yIGJhbm5lciBpbiBkaXYgdGFnJyk7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdQcm9kdWN0SW5mb0Vycm9yKTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgICBpbWFnZSxcbiAgICAgICAgcHJpY2UsXG4gICAgICAgIHNhbGVwcmljZSxcbiAgICAgICAgdGhjLFxuICAgICAgICBzdHJhaW4sXG4gICAgICAgIGNiZCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgYnJhbmRuYW1lLFxuICAgICAgICBwcm9kdWN0dHlwZSxcbiAgICAgICAgZGV0YWlscyxcbiAgICAgICAgY3RhLFxuICAgICAgICBjbGlja3Rocm91Z2h1cmwsXG4gICAgICAgIHdpbnVybCxcbiAgICAgICAgcGl4ZWx1cmwsXG4gICAgfSA9IGRpdi5kYXRhc2V0O1xuICAgIGxvZz8uZGVidWcoJ0JyYW5kIE5hbWU6JyArIGJyYW5kbmFtZSArICdcXG5Qcm9kdWN0IFR5cGUnICsgcHJvZHVjdHR5cGUpO1xuXG4gICAgaWYgKGJyYW5kbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxvZz8ud2FybihcbiAgICAgICAgICAgICdNaXNzaW5nIGJyYW5kIG5hbWUgZmllbGQgaW4gYmFubmVyIGNyZWF0aXZlLiBUaGUgYnJhbmQgbmFtZSB3YXMgcHJvYmFibHkgbm90IHNldCBvbiB0aGUgYmFubmVyLiAnICtcbiAgICAgICAgICAgICdUZWNobmljYWxseSwgdGhpcyBpc25cXCd0IGFuICplcnJvciosIGJ1dCBhbG1vc3QgYWxsIGJhbm5lciBjcmVhdGl2ZXMgcmVseSBvbiBicmFuZCBpbmZvLCBzbyB0aGUgJyArXG4gICAgICAgICAgICAnYmFubmVyIHByb2JhYmx5IGlzblxcJ3Qgd29ya2luZy4gQ0hFQ0sgVEhFIENSRUFUSVZFLiBCYW5uZXIgSUQgaXM6ICcgKyBiaWQuY3JpZFxuICAgICAgICApO1xuICAgIH1cblxuXG4gICAgY29uc3QgcHJvZHVjdERhdGEgPSB7XG4gICAgICAgIGltYWdlLFxuICAgICAgICBwcmljZSxcbiAgICAgICAgc2FsZVByaWNlOiBzYWxlcHJpY2UsXG4gICAgICAgIHRoYyxcbiAgICAgICAgc3RyYWluLFxuICAgICAgICBjYmQsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGJyYW5kX25hbWU6IGJyYW5kbmFtZSxcbiAgICAgICAgYnJhbmROYW1lOiBicmFuZG5hbWUsXG4gICAgICAgIHByb2R1Y3RUeXBlOiBwcm9kdWN0dHlwZSxcbiAgICAgICAgZGV0YWlscyxcbiAgICAgICAgY3RhLFxuICAgICAgICBjbGlja3Rocm91Z2hVcmw6IGNsaWNrdGhyb3VnaHVybCxcbiAgICAgICAgd2ludXJsLFxuICAgICAgICBwaXhlbHVybFxuICAgIH07XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb2R1Y3REYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIEVycihuZXcgTWlzc2luZ1Byb2R1Y3RJbmZvRXJyb3IoKSk7XG4gICAgfVxuICAgIHJldHVybiBPayhwcm9kdWN0RGF0YSk7XG59O1xuXG5leHBvcnQgY2xhc3MgTWlzc2luZ1Byb2R1Y3RJbmZvRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdNaXNzaW5nIHByb2R1Y3QgaW5mbyBpbiBiYW5uZXInKTtcbiAgICB9XG59XG4iLAogICAgImltcG9ydCB7XG4gICAgSUFkLFxuICAgIElCaWQsXG4gICAgSUltcHJlc3Npb24sXG4gICAgSUlubGluZSxcbiAgICBJTGluZWFyLFxuICAgIElNZWRpYUZpbGUsXG4gICAgSVRyYWNraW5nRXZlbnQsXG4gICAgSVZhc3QsXG4gICAgSVZpZGVvQ2xpY2ssXG4gICAgTWlzc2luZ0FkbUVycm9yLFxuICAgIEFsbE9yTm9uZSxcbiAgICBBbnlGYWlsZWQsXG4gICAgQXNzZXJ0VmFsdWUsXG4gICAgQ3R4LFxuICAgIEVycixcbiAgICBHZXRWYWx1ZSxcbiAgICBJTG9nZ2VyLFxuICAgIE11bHRpcGxlRXJyb3JzRXJyb3IsXG4gICAgT2ssXG4gICAgUmVzdWx0LFxuICAgIElCdWlsdFZpZGVvLFxuICAgIEdldFNwb25zb3JlZFByb2R1Y3RGcm9tTmF0aXZlSWRGbixcbiAgICBNaXNzaW5nUHJvZHVjdEVycm9yLFxuICAgIElQcm9kdWN0SW5mb3JtYXRpb24sXG4gICAgQnVpbGRDbGlja3Rocm91Z2hVcmwsXG4gICAgSU5hdGl2ZVRlbXBsYXRlRGVsZWdhdGVXaW5kb3csXG4gICAgSUNvbXBpbGVkUHVibGlzaGVyQ29uZmlndXJhdGlvblxufSBmcm9tICdAc3VyZnNpZGUvYWRzLWNvcmUnO1xuXG5leHBvcnQgdHlwZSBCdWlsZFZpZGVvUmVzcG9uc2VGbiA9IChiaWQ6IElCaWQpID0+IFJlc3VsdDxJQnVpbHRWaWRlbz47XG5cbmV4cG9ydCBjb25zdCBCdWlsZFZpZGVvUmVzcG9uc2UgPSAoXG4gICAgbG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIHdpbmRvd0luZm86IElOYXRpdmVUZW1wbGF0ZURlbGVnYXRlV2luZG93LFxuICAgIGNvbmZpZ3VyYXRpb246IElDb21waWxlZFB1Ymxpc2hlckNvbmZpZ3VyYXRpb24sXG4gICAgYmlkOiBJQmlkXG4pOiBSZXN1bHQ8SUJ1aWx0VmlkZW8+ID0+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnQnVpbGRWaWRlb1Jlc3BvbnNlJyk7XG4gICAgbG9nPy5pbmZvKCdCdWlsZGluZyB2aWRlbyByZXNwb25zZScpO1xuICAgIGNvbnN0IHZpZGVvID0gRGVzZXJpYWxpemVWaWRlbyhsb2dnZXIsIGJpZCk7XG4gICAgaWYgKCF2aWRlby5vaykge1xuICAgICAgICByZXR1cm4gdmlkZW87XG4gICAgfVxuICAgIGNvbnN0IGNyZWF0aXZlID0gdmlkZW8udmFsdWUuYWRzWzBdPy5pbmxpbmUuY3JlYXRpdmVzPy5bMF0gYXMgKElMaW5lYXIgfCB1bmRlZmluZWQpO1xuICAgIGlmIChjcmVhdGl2ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdDcmVhdGl2ZUVycm9yKHZpZGVvLnZhbHVlKSk7XG4gICAgfVxuICAgIGNvbnN0IGNsaWNrdGhyb3VnaCA9IGNyZWF0aXZlLnZpZGVvQ2xpY2tzWzBdPy51cmw7XG4gICAgaWYgKGNsaWNrdGhyb3VnaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdDbGlja3Rocm91Z2hVcmxFcnJvcih2aWRlby52YWx1ZSkpO1xuICAgIH1cbiAgICBpZiAoY2xpY2t0aHJvdWdoID09PSAne1NVUkZfQ09NTUVSQ0VfVVJMfScpIHtcbiAgICAgICAgY29uc3QgcHJvZHVjdCA9IGdldFByb2R1Y3RJbmZvRnJvbVZhc3QobG9nLCB2aWRlby52YWx1ZSwgYmlkKTtcbiAgICAgICAgaWYgKCFwcm9kdWN0Lm9rKSB7XG4gICAgICAgICAgICByZXR1cm4gcHJvZHVjdDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGlja3Rocm91Z2ggPSBCdWlsZENsaWNrdGhyb3VnaFVybChsb2csXG4gICAgICAgICAgICB3aW5kb3dJbmZvLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIHByb2R1Y3QudmFsdWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFjbGlja3Rocm91Z2gub2spIHtcbiAgICAgICAgICAgIHJldHVybiBjbGlja3Rocm91Z2g7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9rKHtcbiAgICAgICAgICAgIGNsaWNrdGhyb3VnaDogY2xpY2t0aHJvdWdoLnZhbHVlLFxuICAgICAgICAgICAgdmlkZW86IHZpZGVvLnZhbHVlLFxuICAgICAgICAgICAgYmlkLFxuICAgICAgICAgICAgdHlwZTogMVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIE9rKHtcbiAgICAgICAgY2xpY2t0aHJvdWdoLFxuICAgICAgICB2aWRlbzogdmlkZW8udmFsdWUsXG4gICAgICAgIGJpZCxcbiAgICAgICAgdHlwZTogMVxuICAgIH0pO1xufVxuXG5jb25zdCBnZXRQcm9kdWN0SW5mb0Zyb21WYXN0ID0gKFxuICAgIGxvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB2YXN0OiBJVmFzdCxcbiAgICBiaWQ6IElCaWRcbik6IFJlc3VsdDxJUHJvZHVjdEluZm9ybWF0aW9uPiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2dldFByb2R1Y3RJbmZvRnJvbVZhc3QnKTtcbiAgICBsb2c/LmluZm8oJ0dldHRpbmcgcHJvZHVjdCBpbmZvIGZyb20gdmFzdCcpO1xuICAgIGxvZz8uZGVidWcodmFzdCk7XG4gICAgY29uc3QgcHJvZHVjdCA9IHZhc3QuYWRzWzBdPy5pbmxpbmUucHJvZHVjdDtcbiAgICBpZiAocHJvZHVjdCA9PT0gdW5kZWZpbmVkIHx8IE9iamVjdC5rZXlzKHByb2R1Y3QpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBsb2c/LmVycm9yKCdNaXNzaW5nIHByb2R1Y3QgaW5mbyBmcm9tIHZhc3QnKTtcbiAgICAgICAgcmV0dXJuIEVycihuZXcgTWlzc2luZ1Byb2R1Y3RFcnJvcihiaWQpKTtcbiAgICB9XG4gICAgbG9nPy5kZWJ1Zyhwcm9kdWN0KTtcbiAgICBpZiAocHJvZHVjdC5icmFuZE5hbWUgPT09IHVuZGVmaW5lZCB8fCBwcm9kdWN0LmJyYW5kX25hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsb2c/Lndhcm4oXG4gICAgICAgICAgICAnTWlzc2luZyBicmFuZCBuYW1lIGZpZWxkIGluIGJhbm5lciBjcmVhdGl2ZS4gVGhlIGJyYW5kIG5hbWUgd2FzIHByb2JhYmx5IG5vdCBzZXQgb24gdGhlIGJhbm5lci4gJyArXG4gICAgICAgICAgICAnVGVjaG5pY2FsbHksIHRoaXMgaXNuXFwndCBhbiAqZXJyb3IqLCBidXQgYWxtb3N0IGFsbCBiYW5uZXIgY3JlYXRpdmVzIHJlbHkgb24gYnJhbmQgaW5mbywgc28gdGhlICcgK1xuICAgICAgICAgICAgJ2Jhbm5lciBwcm9iYWJseSBpc25cXCd0IHdvcmtpbmcuIENIRUNLIFRIRSBDUkVBVElWRS4gQmFubmVyIElEIGlzOiAnICsgYmlkLmNyaWRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIE9rKHByb2R1Y3QpO1xufVxuXG5jb25zdCBnZXRDaGlsZCA9IChsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQsIHRhZ05hbWU6IHN0cmluZyk6IFJlc3VsdDxFbGVtZW50PiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2dldENoaWxkT3JUaHJvdycpO1xuICAgIGxvZz8uZGVidWcoJ25hbWUnLCB0YWdOYW1lKTtcbiAgICBjb25zdCBjaGlsZCA9IGVsZW1lbnQucXVlcnlTZWxlY3Rvcih0YWdOYW1lKTtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIEVycihuZXcgTWlzc2luZ0NoaWxkVGFnRXJyb3IoZWxlbWVudCwgdGFnTmFtZSkpO1xuICAgIH1cbiAgICBsb2c/LmRlYnVnKCdjaGlsZCAnICsgdGFnTmFtZSwgY2hpbGQpO1xuICAgIHJldHVybiBPayhjaGlsZCk7XG59O1xuXG5jb25zdCBnZXRUZXh0Q29udGVudCA9IChsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQsIHRhZ05hbWU/OiBzdHJpbmcpOiBSZXN1bHQ8c3RyaW5nPiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2dldFRleHRDb250ZW50Jyk7XG4gICAgbG9nPy5pbmZvKCdHZXR0aW5nIHRleHQgY29udGVudCBmb3IgJywgdGFnTmFtZSk7XG4gICAgaWYgKHRhZ05hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGdldENoaWxkKGxvZywgZWxlbWVudCwgdGFnTmFtZSk7XG4gICAgICAgIGlmKCFjaGlsZC5vaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSBjaGlsZC52YWx1ZS50ZXh0Q29udGVudDtcbiAgICAgICAgaWYgKHRleHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdUZXh0Q29udGVudEVycm9yKGVsZW1lbnQsIHRhZ05hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2sodGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG4gICAgICAgIGlmKHRleHQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdUZXh0Q29udGVudEVycm9yKGVsZW1lbnQsIGVsZW1lbnQudGFnTmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPayh0ZXh0KTtcbiAgICB9XG59O1xuXG5jb25zdCBnZXRBdHRyaWJ1dGUgPSAobG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLCBlbGVtZW50OiBFbGVtZW50LCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBSZXN1bHQ8c3RyaW5nPiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2dldEF0dHJpYnV0ZScpO1xuICAgIGxvZz8uZGVidWcoJ25hbWUnLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICBpZiAoYXR0cmlidXRlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdBdHRyaWJ1dGVFcnJvcihlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKSk7XG4gICAgfVxuICAgIGxvZz8uZGVidWcoJ2F0dHJpYnV0ZSAnICsgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlKTtcbiAgICByZXR1cm4gT2soYXR0cmlidXRlKTtcbn07XG5cbmNvbnN0IGdldE51bWJlciA9IChsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IFJlc3VsdDxudW1iZXI+ID0+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnZ2V0TnVtYmVyJyk7XG4gICAgY29uc3QgbnVtID0gZ2V0QXR0cmlidXRlKGxvZywgZWxlbWVudCwgYXR0cmlidXRlTmFtZSk7XG4gICAgaWYoIW51bS5vaykge1xuICAgICAgICByZXR1cm4gbnVtO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZWQgPSBOdW1iZXIobnVtLnZhbHVlKTtcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkge1xuICAgICAgICBsb2c/LmRlYnVnKCdBdHRyaWJ1dGUgd2FzIG5vdCBhIG51bWJlcicsIGVsZW1lbnQudGFnTmFtZSwgYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE5vdEFOdW1iZXJFcnJvcihlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKSk7XG4gICAgfVxuICAgIHJldHVybiBPayhwYXJzZWQpO1xufTtcblxuZXhwb3J0IGNvbnN0IERlc2VyaWFsaXplVmlkZW8gPSAobG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLCBiaWQ6IElCaWQpOiBSZXN1bHQ8SVZhc3Q+ID0+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnRGVzZXJpYWxpemVWaWRlbycpO1xuICAgIGNvbnN0IGFkbSA9IGJpZC5hZG07XG4gICAgaWYgKGFkbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdBZG1FcnJvcihiaWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIERlc2VyaWFsaXplVmFzdChsb2csIGFkbSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gRGVzZXJpYWxpemVWYXN0KGxvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCwgYWRtOiBzdHJpbmcpOiBSZXN1bHQ8SVZhc3Q+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnRGVzZXJpYWxpemVWYXN0Jyk7XG4gICAgbG9nPy5kZWJ1ZygnYWRtJywgYWRtKTtcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGFkbSwgJ3RleHQveG1sJyk7XG4gICAgbG9nPy5kZWJ1ZygnZG9jJywgZG9jKTtcblxuICAgIGNvbnN0IHJvb3QgPSBkb2MucXVlcnlTZWxlY3RvcignVkFTVCcpO1xuICAgIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBFcnIobmV3IE1pc3NpbmdDaGlsZFRhZ0Vycm9yKHVuZGVmaW5lZCwgJ1ZBU1QnKSk7XG4gICAgfVxuICAgIGxvZz8uZGVidWcoJ3Jvb3QnLCByb290KTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBnZXRBdHRyaWJ1dGUobG9nLCByb290LCAndmVyc2lvbicpO1xuICAgIGlmKCF2ZXJzaW9uLm9rKSB7XG4gICAgICAgIHJldHVybiB2ZXJzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGFkcyA9IEFsbE9yTm9uZShBcnJheS5mcm9tKHJvb3QucXVlcnlTZWxlY3RvckFsbCgnQWQnKSlcbiAgICAgICAgLm1hcChkZXNlcmlhbGl6ZUFkLmJpbmQodW5kZWZpbmVkLCBsb2cpKSk7XG4gICAgaWYoIWFkcy5vaykge1xuICAgICAgICByZXR1cm4gYWRzO1xuICAgIH1cblxuICAgIHJldHVybiBPayh7XG4gICAgICAgIHZlcnNpb246IHZlcnNpb24udmFsdWUsXG4gICAgICAgIGFkczogYWRzLnZhbHVlXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplQWQobG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLCBlbGVtZW50OiBFbGVtZW50KTogUmVzdWx0PElBZD4ge1xuICAgIGNvbnN0IGxvZyA9IEN0eChsb2dnZXIpPy53aXRoKCdkZXNlcmlhbGl6ZUFkJyk7XG4gICAgbG9nPy5kZWJ1ZygnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGlkID0gR2V0VmFsdWUoZ2V0QXR0cmlidXRlKGxvZywgZWxlbWVudCwgJ2lkJykpO1xuXG4gICAgY29uc3QgaW5saW5lRWxlbWVudCA9IGdldENoaWxkKGxvZywgZWxlbWVudCwgJ0luTGluZScpO1xuICAgIGlmKCFpbmxpbmVFbGVtZW50Lm9rKSB7XG4gICAgICAgIHJldHVybiBpbmxpbmVFbGVtZW50O1xuICAgIH1cbiAgICBjb25zdCBpbmxpbmUgPSBkZXNlcmlhbGl6ZUlubGluZShsb2csIGlubGluZUVsZW1lbnQudmFsdWUpO1xuICAgIGlmKCFpbmxpbmUub2spIHtcbiAgICAgICAgcmV0dXJuIGlubGluZTtcbiAgICB9XG5cbiAgICByZXR1cm4gT2soe1xuICAgICAgICBpZCxcbiAgICAgICAgaW5saW5lOiBpbmxpbmUudmFsdWVcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZGVzZXJpYWxpemVJbmxpbmUobG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLCBlbGVtZW50OiBFbGVtZW50KTogUmVzdWx0PElJbmxpbmU+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnZGVzZXJpYWxpemVJbmxpbmUnKTtcbiAgICBsb2c/LmRlYnVnKCdlbGVtZW50JywgZWxlbWVudCk7XG4gICAgY29uc3QgYWRTeXN0ZW0gPSBnZXRUZXh0Q29udGVudChsb2csIGVsZW1lbnQsICdBZFN5c3RlbScpO1xuICAgIGNvbnN0IGFkVGl0bGUgPSBnZXRUZXh0Q29udGVudChsb2csIGVsZW1lbnQsICdBZFRpdGxlJyk7XG4gICAgY29uc3QgaW1wcmVzc2lvbkVsZW1lbnQgPSBnZXRDaGlsZChsb2csIGVsZW1lbnQsICdJbXByZXNzaW9uJyk7XG4gICAgaWYoIWltcHJlc3Npb25FbGVtZW50Lm9rKSB7XG4gICAgICAgIHJldHVybiBpbXByZXNzaW9uRWxlbWVudDtcbiAgICB9XG4gICAgY29uc3QgaW1wcmVzc2lvbiA9IGRlc2VyaWFsaXplSW1wcmVzc2lvbihsb2csIGltcHJlc3Npb25FbGVtZW50LnZhbHVlKTtcbiAgICBjb25zdCBjcmVhdGl2ZXMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnTGluZWFyJykpXG4gICAgICAgIC5tYXAoZGVzZXJpYWxpemVMaW5lYXIuYmluZChudWxsLCBsb2cpKTtcblxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSBBcnJheS5mcm9tKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnRXh0ZW5zaW9ucyBFeHRlbnNpb24nKSk7XG4gICAgY29uc3QgcHJvZHVjdEV4dGVuc2lvbiA9IGV4dGVuc2lvbnNbMF07XG4gICAgY29uc3QgcHJvZHVjdDogSVByb2R1Y3RJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCA9IHByb2R1Y3RFeHRlbnNpb24gPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHtcbiAgICAgICAgICAgIGltYWdlOiBHZXRWYWx1ZShnZXRUZXh0Q29udGVudChsb2csIHByb2R1Y3RFeHRlbnNpb24sICdJbWFnZScpKSxcbiAgICAgICAgICAgIHByaWNlOiBHZXRWYWx1ZShnZXRUZXh0Q29udGVudChsb2csIHByb2R1Y3RFeHRlbnNpb24sICdQcmljZScpKSxcbiAgICAgICAgICAgIHNhbGVQcmljZTogR2V0VmFsdWUoZ2V0VGV4dENvbnRlbnQobG9nLCBwcm9kdWN0RXh0ZW5zaW9uLCAnU2FsZVByaWNlJykpLFxuICAgICAgICAgICAgdGhjOiBHZXRWYWx1ZShnZXRUZXh0Q29udGVudChsb2csIHByb2R1Y3RFeHRlbnNpb24sICdUSEMnKSksXG4gICAgICAgICAgICBzdHJhaW46IEdldFZhbHVlKGdldFRleHRDb250ZW50KGxvZywgcHJvZHVjdEV4dGVuc2lvbiwgJ1N0cmFpbicpKSxcbiAgICAgICAgICAgIGNiZDogR2V0VmFsdWUoZ2V0VGV4dENvbnRlbnQobG9nLCBwcm9kdWN0RXh0ZW5zaW9uLCAnQ0JEJykpLFxuICAgICAgICAgICAgbmFtZTogR2V0VmFsdWUoZ2V0VGV4dENvbnRlbnQobG9nLCBwcm9kdWN0RXh0ZW5zaW9uLCAnTmFtZScpKSxcbiAgICAgICAgICAgIGJyYW5kTmFtZTogR2V0VmFsdWUoZ2V0VGV4dENvbnRlbnQobG9nLCBwcm9kdWN0RXh0ZW5zaW9uLCAnQnJhbmROYW1lJykpLFxuICAgICAgICAgICAgcHJvZHVjdFR5cGU6IEdldFZhbHVlKGdldFRleHRDb250ZW50KGxvZywgcHJvZHVjdEV4dGVuc2lvbiwgJ1Byb2R1Y3RUeXBlJykpLFxuICAgICAgICAgICAgZGV0YWlsczogR2V0VmFsdWUoZ2V0VGV4dENvbnRlbnQobG9nLCBwcm9kdWN0RXh0ZW5zaW9uLCAnRGV0YWlscycpKSxcbiAgICAgICAgICAgIGN0YTogR2V0VmFsdWUoZ2V0VGV4dENvbnRlbnQobG9nLCBwcm9kdWN0RXh0ZW5zaW9uLCAnQ1RBJykpXG4gICAgICAgIH07XG5cbiAgICBpZiAoIWltcHJlc3Npb24ub2spIHtcbiAgICAgICAgcmV0dXJuIGltcHJlc3Npb247XG4gICAgfVxuICAgIGlmICghYWRTeXN0ZW0ub2spIHtcbiAgICAgICAgcmV0dXJuIGFkU3lzdGVtO1xuICAgIH1cbiAgICBpZiAoIWFkVGl0bGUub2spIHtcbiAgICAgICAgcmV0dXJuIGFkVGl0bGU7XG4gICAgfVxuXG4gICAgY29uc3QgY3JlYXRpdmVSZXN1bHRzID0gQWxsT3JOb25lKGNyZWF0aXZlcyk7XG4gICAgaWYoIWNyZWF0aXZlUmVzdWx0cy5vaykge1xuICAgICAgICByZXR1cm4gY3JlYXRpdmVSZXN1bHRzO1xuICAgIH1cblxuICAgIHJldHVybiBPayh7XG4gICAgICAgIGltcHJlc3Npb246IGltcHJlc3Npb24udmFsdWUsXG4gICAgICAgIGFkU3lzdGVtOiBhZFN5c3RlbS52YWx1ZSxcbiAgICAgICAgYWRUaXRsZTogYWRUaXRsZS52YWx1ZSxcbiAgICAgICAgY3JlYXRpdmVzLFxuICAgICAgICBwcm9kdWN0XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplSW1wcmVzc2lvbihsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQpOiBSZXN1bHQ8SUltcHJlc3Npb24+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnZGVzZXJpYWxpemVJbXByZXNzaW9uJyk7XG4gICAgbG9nPy5kZWJ1ZygnZWxlbWVudCcsIGVsZW1lbnQpO1xuXG4gICAgY29uc3QgaWQgPSBnZXRBdHRyaWJ1dGUobG9nLCBlbGVtZW50LCAnaWQnKTtcbiAgICBpZiAoIWlkLm9rKSB7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG4gICAgY29uc3QgdmFsdWUgPSBnZXRUZXh0Q29udGVudChsb2csIGVsZW1lbnQpO1xuICAgIGlmICghdmFsdWUub2spIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBsb2c/LmRlYnVnKCd2YWx1ZScsIHZhbHVlKTtcblxuICAgIHJldHVybiBPayh7XG4gICAgICAgIGlkOiBpZC52YWx1ZSxcbiAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplTGluZWFyKGxvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCwgZWxlbWVudDogRWxlbWVudCk6IFJlc3VsdDxJTGluZWFyPiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2Rlc2VyaWFsaXplTGluZWFyJyk7XG4gICAgbG9nPy5kZWJ1ZygnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGR1cmF0aW9uID0gZ2V0VGV4dENvbnRlbnQobG9nLCBlbGVtZW50LCAnRHVyYXRpb24nKTtcbiAgICBpZighZHVyYXRpb24ub2spIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uO1xuICAgIH1cbiAgICBsb2c/LmRlYnVnKCdkZXNlcmlhbGl6ZUxpbmVhciBkdXJhdGlvbicsIGR1cmF0aW9uLnZhbHVlKTtcblxuICAgIGNvbnN0IHRyYWNraW5nRXZlbnRzID0gQWxsT3JOb25lKEFycmF5LmZyb20oZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdUcmFja2luZ0V2ZW50cyBUcmFja2luZycpKVxuICAgICAgICAubWFwKGRlc2VyaWFsaXplVHJhY2tpbmdFdmVudC5iaW5kKG51bGwsIGxvZ2dlcikpKTtcbiAgICBsb2c/LmRlYnVnKCdkZXNlcmlhbGl6ZUxpbmVhciB0cmFja2luZ0V2ZW50cycsIHRyYWNraW5nRXZlbnRzKTtcblxuICAgIGNvbnN0IG1lZGlhRmlsZXMgPSBBbGxPck5vbmUoQXJyYXkuZnJvbShlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ01lZGlhRmlsZXMgTWVkaWFGaWxlJykpXG4gICAgICAgIC5tYXAoZGVzZXJpYWxpemVNZWRpYUZpbGUuYmluZChudWxsLCBsb2dnZXIpKSk7XG4gICAgbG9nPy5kZWJ1ZygnZGVzZXJpYWxpemVMaW5lYXIgbWVkaWFGaWxlcycsIG1lZGlhRmlsZXMpO1xuXG4gICAgY29uc3QgdmlkZW9DbGlja3MgPSBBbGxPck5vbmUoQXJyYXkuZnJvbShlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1ZpZGVvQ2xpY2tzIENsaWNrVGhyb3VnaCcpKVxuICAgICAgICAubWFwKGRlc2VyaWFsaXplVmlkZW9DbGljay5iaW5kKG51bGwsIGxvZ2dlcikpKTtcbiAgICBsb2c/LmRlYnVnKCdkZXNlcmlhbGl6ZUxpbmVhciB2aWRlb0NsaWNrcycsIHZpZGVvQ2xpY2tzKTtcblxuICAgIGlmKCF0cmFja2luZ0V2ZW50cy5vaykge1xuICAgICAgICByZXR1cm4gdHJhY2tpbmdFdmVudHM7XG4gICAgfVxuICAgIGlmKCFtZWRpYUZpbGVzLm9rKSB7XG4gICAgICAgIHJldHVybiBtZWRpYUZpbGVzO1xuICAgIH1cbiAgICBpZighdmlkZW9DbGlja3Mub2spIHtcbiAgICAgICAgcmV0dXJuIHZpZGVvQ2xpY2tzO1xuICAgIH1cbiAgICByZXR1cm4gT2soe1xuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24udmFsdWUsXG4gICAgICAgIHRyYWNraW5nRXZlbnRzOiB0cmFja2luZ0V2ZW50cy52YWx1ZSxcbiAgICAgICAgbWVkaWFGaWxlczogbWVkaWFGaWxlcy52YWx1ZSxcbiAgICAgICAgdmlkZW9DbGlja3M6IHZpZGVvQ2xpY2tzLnZhbHVlXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplVHJhY2tpbmdFdmVudChsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQpOiBSZXN1bHQ8SVRyYWNraW5nRXZlbnQ+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnZGVzZXJpYWxpemVUcmFja2luZ0V2ZW50Jyk7XG4gICAgbG9nPy5kZWJ1ZygnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGV2ZW50ID0gZ2V0QXR0cmlidXRlKGxvZywgZWxlbWVudCwgJ2V2ZW50Jyk7XG4gICAgaWYoIWV2ZW50Lm9rKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICB9XG4gICAgY29uc3QgdXJsID0gZ2V0VGV4dENvbnRlbnQobG9nLCBlbGVtZW50KTtcbiAgICBpZiAoIXVybC5vaykge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfVxuICAgIGxvZz8uZGVidWcoJ3VybCcsIHVybCk7XG5cbiAgICByZXR1cm4gT2soe1xuICAgICAgICBldmVudDogZXZlbnQudmFsdWUsXG4gICAgICAgIHVybDogdXJsLnZhbHVlXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplTWVkaWFGaWxlKGxvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCwgZWxlbWVudDogRWxlbWVudCk6IFJlc3VsdDxJTWVkaWFGaWxlPiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2Rlc2VyaWFsaXplTWVkaWFGaWxlJyk7XG4gICAgbG9nPy5kZWJ1ZygnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIC8qIFRoZXNlIGZpZWxkcyBhcmVuJ3QgcmVxdWlyZWQgKi9cbiAgICBjb25zdCBpZCA9IEdldFZhbHVlKGdldEF0dHJpYnV0ZShsb2csIGVsZW1lbnQsICdpZCcpKTtcbiAgICBjb25zdCBiaXRyYXRlID0gR2V0VmFsdWUoZ2V0QXR0cmlidXRlKGxvZywgZWxlbWVudCwgJ2JpdHJhdGUnKSk7XG4gICAgbG9nPy5kZWJ1ZygnaWQnLCBpZCk7XG5cbiAgICBjb25zdCBkZWxpdmVyeSA9IGdldEF0dHJpYnV0ZShsb2csIGVsZW1lbnQsICdkZWxpdmVyeScpO1xuICAgIGNvbnN0IHR5cGUgPSBnZXRBdHRyaWJ1dGUobG9nLCBlbGVtZW50LCAndHlwZScpO1xuICAgIGNvbnN0IHdpZHRoID0gZ2V0TnVtYmVyKGxvZywgZWxlbWVudCwgJ3dpZHRoJyk7XG4gICAgY29uc3QgaGVpZ2h0ID0gZ2V0TnVtYmVyKGxvZywgZWxlbWVudCwgJ2hlaWdodCcpO1xuICAgIGNvbnN0IHVybCA9IGdldFRleHRDb250ZW50KGxvZywgZWxlbWVudCk7XG5cbiAgICBjb25zdCBbZmFpbGVkLCBlcnJvcnNdID0gQW55RmFpbGVkKGRlbGl2ZXJ5LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCB1cmwpO1xuICAgIGlmKGZhaWxlZCkge1xuICAgICAgICByZXR1cm4gRXJyKG5ldyBNdWx0aXBsZUVycm9yc0Vycm9yKGVycm9ycykpO1xuICAgIH1cblxuICAgIGxvZz8uZGVidWcoJ3VybCcsIHVybCk7XG4gICAgcmV0dXJuIE9rKHtcbiAgICAgICAgaWQsXG4gICAgICAgIGJpdHJhdGUsXG4gICAgICAgIGRlbGl2ZXJ5OiBBc3NlcnRWYWx1ZShkZWxpdmVyeSksXG4gICAgICAgIHR5cGU6IEFzc2VydFZhbHVlKHR5cGUpLFxuICAgICAgICB3aWR0aDogQXNzZXJ0VmFsdWUod2lkdGgpLFxuICAgICAgICBoZWlnaHQ6IEFzc2VydFZhbHVlKGhlaWdodCksXG4gICAgICAgIHVybDogQXNzZXJ0VmFsdWUodXJsKVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBkZXNlcmlhbGl6ZVZpZGVvQ2xpY2sobG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLCBlbGVtZW50OiBFbGVtZW50KTogUmVzdWx0PElWaWRlb0NsaWNrPiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ2Rlc2VyaWFsaXplVmlkZW9DbGljaycpXG4gICAgbG9nPy5kZWJ1ZygnZWxlbWVudCcsIGVsZW1lbnQpO1xuICAgIGNvbnN0IGlkID0gR2V0VmFsdWUoZ2V0QXR0cmlidXRlKGxvZywgZWxlbWVudCwgJ2lkJykpO1xuICAgIGxvZz8uZGVidWcoJ2lkJywgaWQpO1xuXG4gICAgY29uc3QgdXJsID0gZ2V0VGV4dENvbnRlbnQobG9nLCBlbGVtZW50KTtcbiAgICBpZiAoIXVybC5vaykge1xuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBsb2c/LmRlYnVnKCd1cmwnLCB1cmwpO1xuXG4gICAgcmV0dXJuIE9rKHtcbiAgICAgICAgaWQsXG4gICAgICAgIHVybDogdXJsLnZhbHVlXG4gICAgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nQ2hpbGRUYWdFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudCB8IHVuZGVmaW5lZCwgcHVibGljIHRhZ05hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihgTWlzc2luZyBjaGlsZCB0YWcgJyR7dGFnTmFtZX0nIGluIHBhcmVudCBlbGVtZW50ICcke2VsZW1lbnQ/LnRhZ05hbWUgPz8gJ2RvY3VtZW50J30nYCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0F0dHJpYnV0ZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50LCBwdWJsaWMgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGBNaXNzaW5nIGF0dHJpYnV0ZSAnJHthdHRyaWJ1dGVOYW1lfScgaW4gZWxlbWVudCAnJHtlbGVtZW50LnRhZ05hbWV9YCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm90QU51bWJlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50LCBwdWJsaWMgYXR0cmlidXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGBBdHRyaWJ1dGUgJyR7YXR0cmlidXRlTmFtZX0nIG9uIGVsZW1lbnQgJyR7ZWxlbWVudC50YWdOYW1lfScgaXMgbm90IGEgbnVtZXJgKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nVGV4dENvbnRlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudDogRWxlbWVudCwgcHVibGljIGF0dHJpYnV0ZU5hbWU6IHN0cmluZykge1xuICAgICAgICBzdXBlcihgTWlzc2luZyB0ZXh0IGNvbnRlbnQgb24gYXR0cmlidXRlICcke2F0dHJpYnV0ZU5hbWV9JyBvbiBlbGVtZW50ICcke2VsZW1lbnQudGFnTmFtZX0nYCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0NyZWF0aXZlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IocHVibGljIHZhc3Q6IElWYXN0KSB7XG4gICAgICAgIHN1cGVyKCdWYXN0IHZpZGVvIHdhcyBtaXNzaW5nIGNyZWF0aXZlJyk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0NsaWNrdGhyb3VnaFVybEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2YXN0OiBJVmFzdCkge1xuICAgICAgICBzdXBlcignVmFzdCB2aWRlbyB3YXMgbWlzc2luZyBjbGlja3Rocm91Z2ggVVJMJyk7XG4gICAgfVxufSIsCiAgICAiaW1wb3J0IHtcbiAgICBBbGxPck5vbmUsXG4gICAgQXN5bmNSZXN1bHQsXG4gICAgQnVpbGRBbGxTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlc0ZuLFxuICAgIEN0eCxcbiAgICBHZXRWYWx1ZSxcbiAgICBJQmlkUmVxdWVzdCxcbiAgICBJQmlkUmVzcG9uc2UsXG4gICAgSUJ1aWx0QmFubmVyUmVzcG9uc2UsXG4gICAgSUJ1aWx0UHJvZHVjdENhcmRCaWRSZXNwb25zZSxcbiAgICBJQnVpbHRQcm9kdWN0Q2FyZFJlc3BvbnNlLFxuICAgIElCdWlsdFZpZGVvLFxuICAgIElMb2dnZXIsXG4gICAgT2ssXG4gICAgVmFsdWVPclxufSBmcm9tICdAc3VyZnNpZGUvYWRzLWNvcmUnO1xuaW1wb3J0IHsgQnVpbGRCYW5uZXJSZXNwb25zZUZuIH0gZnJvbSAnLi9CYW5uZXInO1xuaW1wb3J0IHsgQnVpbGRWaWRlb1Jlc3BvbnNlRm4gfSBmcm9tICcuL1ZpZGVvJztcblxuZXhwb3J0IHR5cGUgQnVpbGRBbGxSZXNwb25zZXNGbiA9IChcbiAgICByZXF1ZXN0OiBJQmlkUmVxdWVzdCxcbiAgICByZXNwb25zZTogSUJpZFJlc3BvbnNlXG4pID0+IEFzeW5jUmVzdWx0PElCdWlsdFJlc3BvbnNlQ29sbGVjdGlvbj47XG5cbmV4cG9ydCB0eXBlIEdlbmVyYXRlQWxsUmVzcG9uc2VzRm4gPSAoXG4gICAgcmVxdWVzdDogSUJpZFJlcXVlc3QsXG4gICAgcmVzcG9uc2U6IElCaWRSZXNwb25zZSxcbiAgICBwYWdlU2l6ZTogbnVtYmVyXG4pID0+IEFzeW5jUmVzdWx0PElCdWlsdFJlc3BvbnNlR2VuZXJhdG9yQ29sbGVjdGlvbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJ1aWx0UmVzcG9uc2VDb2xsZWN0aW9uIHtcbiAgICBiYW5uZXJzOiBJQnVpbHRCYW5uZXJSZXNwb25zZVtdO1xuICAgIHZpZGVvczogSUJ1aWx0VmlkZW9bXTtcbiAgICBwcm9kdWN0Q2FyZHM6IElCdWlsdFByb2R1Y3RDYXJkQmlkUmVzcG9uc2VbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQnVpbHRSZXNwb25zZUdlbmVyYXRvckNvbGxlY3Rpb24ge1xuICAgIGJhbm5lcnM6IElCdWlsdEJhbm5lclJlc3BvbnNlW107XG4gICAgdmlkZW9zOiBJQnVpbHRWaWRlb1tdO1xuICAgIHByb2R1Y3RDYXJkcz86IElCdWlsdFByb2R1Y3RDYXJkUmVzcG9uc2VbXVxufVxuXG5leHBvcnQgY29uc3QgQnVpbGRBbGxSZXNwb25zZXMgPSBhc3luYyAoXG4gICAgbG9nZ2VyOiBJTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIGJ1aWxkQmFubmVyUmVzcG9uc2U6IEJ1aWxkQmFubmVyUmVzcG9uc2VGbixcbiAgICBidWlsZFZpZGVvUmVzcG9uc2U6IEJ1aWxkVmlkZW9SZXNwb25zZUZuLFxuICAgIGJ1aWxkQWxsUHJvZHVjdENhcmRSZXNwb25zZXM6IEJ1aWxkQWxsU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZXNGbixcbiAgICByZXF1ZXN0OiBJQmlkUmVxdWVzdCxcbiAgICByZXNwb25zZTogSUJpZFJlc3BvbnNlXG4pOiBBc3luY1Jlc3VsdDxJQnVpbHRSZXNwb25zZUNvbGxlY3Rpb24+ID0+IHtcbiAgICBjb25zdCBsb2cgPSBDdHgobG9nZ2VyKT8ud2l0aCgnQnVpbGRBbGxSZXNwb25zZXMnKTtcbiAgICBsb2c/LmluZm8oJ0J1aWxkaW5nIGFsbCBiaWQgcmVzcG9uc2VzJyk7XG4gICAgbG9nPy5kZWJ1ZyhyZXF1ZXN0LCByZXNwb25zZSk7XG4gICAgY29uc3QgYmFubmVyUmVxdWVzdElkcyA9IHJlcXVlc3QuaW1wLmZpbHRlcihpbXAgPT4gaW1wLmJhbm5lciAhPT0gdW5kZWZpbmVkKS5tYXAoaW1wID0+IGltcC5pZCk7XG4gICAgY29uc3QgdmlkZW9SZXF1ZXN0SWRzID0gcmVxdWVzdC5pbXAuZmlsdGVyKGltcCA9PiBpbXAudmlkZW8gIT09IHVuZGVmaW5lZCkubWFwKGltcCA9PiBpbXAuaWQpO1xuICAgIGNvbnN0IG5hdGl2ZVJlcXVlc3RJZHMgPSByZXF1ZXN0LmltcC5maWx0ZXIoaW1wID0+IGltcC5uYXRpdmUgIT09IHVuZGVmaW5lZCkubWFwKGltcCA9PiBpbXAuaWQpO1xuICAgIGxvZz8uZGVidWcoYmFubmVyUmVxdWVzdElkcywgdmlkZW9SZXF1ZXN0SWRzLCBuYXRpdmVSZXF1ZXN0SWRzKTtcbiAgICBjb25zdCBiYW5uZXJCaWRzID0gcmVzcG9uc2Uuc2VhdGJpZD8uWzBdPy5iaWQuZmlsdGVyKGJpZCA9PiBiYW5uZXJSZXF1ZXN0SWRzLmluY2x1ZGVzKGJpZC5pbXBpZCkpID8/IFtdO1xuICAgIGNvbnN0IHZpZGVvQmlkcyA9IHJlc3BvbnNlLnNlYXRiaWQ/LlswXT8uYmlkLmZpbHRlcihiaWQgPT4gdmlkZW9SZXF1ZXN0SWRzLmluY2x1ZGVzKGJpZC5pbXBpZCkpID8/IFtdO1xuICAgIGNvbnN0IG5hdGl2ZUJpZHMgPSByZXNwb25zZS5zZWF0YmlkPy5bMF0/LmJpZC5maWx0ZXIoYmlkID0+IG5hdGl2ZVJlcXVlc3RJZHMuaW5jbHVkZXMoYmlkLmltcGlkKSkgPz8gW107XG4gICAgbG9nPy5kZWJ1ZyhiYW5uZXJCaWRzLCB2aWRlb0JpZHMsIG5hdGl2ZUJpZHMpO1xuICAgIHJldHVybiBPayh7XG4gICAgICAgIGJhbm5lcnM6IFZhbHVlT3IoQWxsT3JOb25lKGJhbm5lckJpZHMubWFwKGJ1aWxkQmFubmVyUmVzcG9uc2UpKSwgW10pLFxuICAgICAgICB2aWRlb3M6IFZhbHVlT3IoQWxsT3JOb25lKHZpZGVvQmlkcy5tYXAoYnVpbGRWaWRlb1Jlc3BvbnNlKSksIFtdKSxcbiAgICAgICAgcHJvZHVjdENhcmRzOiBWYWx1ZU9yKGF3YWl0IGJ1aWxkQWxsUHJvZHVjdENhcmRSZXNwb25zZXMobmF0aXZlQmlkcyksIFtdKVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IEdlbmVyYXRlQWxsUmVzcG9uc2VzID0gYXN5bmMgKFxuICAgIGxvZ2dlcjogSUxvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICBidWlsZEJhbm5lclJlc3BvbnNlOiBCdWlsZEJhbm5lclJlc3BvbnNlRm4sXG4gICAgYnVpbGRWaWRlb1Jlc3BvbnNlOiBCdWlsZFZpZGVvUmVzcG9uc2VGbixcbiAgICBidWlsZFByb2R1Y3RDYXJkOiBCdWlsZEFsbFNwb25zb3JlZFByb2R1Y3RDYXJkUmVzcG9uc2VzRm4sXG4gICAgcmVxdWVzdDogSUJpZFJlcXVlc3QsXG4gICAgcmVzcG9uc2U6IElCaWRSZXNwb25zZVxuKTogQXN5bmNSZXN1bHQ8SUJ1aWx0UmVzcG9uc2VHZW5lcmF0b3JDb2xsZWN0aW9uPiA9PiB7XG4gICAgY29uc3QgbG9nID0gQ3R4KGxvZ2dlcik/LndpdGgoJ0dlbmVyYXRlQWxsUmVzcG9uc2VzJyk7XG4gICAgbG9nPy5pbmZvKCdHZW5lcmF0aW5nIGFsbCByZXNwb25zZXMnKTtcbiAgICBsb2c/LmRlYnVnKHJlcXVlc3QsIHJlc3BvbnNlKTtcbiAgICBjb25zdCBiYW5uZXJSZXF1ZXN0SWRzID0gcmVxdWVzdC5pbXAuZmlsdGVyKGltcCA9PiBpbXAuYmFubmVyICE9PSB1bmRlZmluZWQpLm1hcChpbXAgPT4gaW1wLmlkKTtcbiAgICBjb25zdCB2aWRlb1JlcXVlc3RJZHMgPSByZXF1ZXN0LmltcC5maWx0ZXIoaW1wID0+IGltcC52aWRlbyAhPT0gdW5kZWZpbmVkKS5tYXAoaW1wID0+IGltcC5pZCk7XG4gICAgY29uc3QgbmF0aXZlUmVxdWVzdElkcyA9IHJlcXVlc3QuaW1wLmZpbHRlcihpbXAgPT4gaW1wLm5hdGl2ZSAhPT0gdW5kZWZpbmVkKS5tYXAoaW1wID0+IGltcC5pZCk7XG4gICAgbG9nPy5kZWJ1ZyhiYW5uZXJSZXF1ZXN0SWRzLCB2aWRlb1JlcXVlc3RJZHMsIG5hdGl2ZVJlcXVlc3RJZHMpO1xuICAgIGNvbnN0IGJhbm5lckJpZHMgPSByZXNwb25zZS5zZWF0YmlkPy5bMF0/LmJpZC5maWx0ZXIoYmlkID0+IGJhbm5lclJlcXVlc3RJZHMuaW5jbHVkZXMoYmlkLmltcGlkKSkgPz8gW107XG4gICAgY29uc3QgdmlkZW9CaWRzID0gcmVzcG9uc2Uuc2VhdGJpZD8uWzBdPy5iaWQuZmlsdGVyKGJpZCA9PiB2aWRlb1JlcXVlc3RJZHMuaW5jbHVkZXMoYmlkLmltcGlkKSkgPz8gW107XG4gICAgY29uc3QgbmF0aXZlQmlkcyA9IHJlc3BvbnNlLnNlYXRiaWQ/LlswXT8uYmlkLmZpbHRlcihiaWQgPT4gbmF0aXZlUmVxdWVzdElkcy5pbmNsdWRlcyhiaWQuaW1waWQpKSA/PyBbXTtcbiAgICBsb2c/LmRlYnVnKGJhbm5lckJpZHMsIHZpZGVvQmlkcywgbmF0aXZlQmlkcyk7XG4gICAgcmV0dXJuIE9rKHtcbiAgICAgICAgYmFubmVyczogVmFsdWVPcihBbGxPck5vbmUoYmFubmVyQmlkcy5tYXAoYnVpbGRCYW5uZXJSZXNwb25zZSkpLCBbXSksXG4gICAgICAgIHZpZGVvczogVmFsdWVPcihBbGxPck5vbmUodmlkZW9CaWRzLm1hcChidWlsZFZpZGVvUmVzcG9uc2UpKSwgW10pLFxuICAgICAgICBwcm9kdWN0Q2FyZHM6IEdldFZhbHVlKGF3YWl0IGJ1aWxkUHJvZHVjdENhcmQobmF0aXZlQmlkcykpXG4gICAgfSk7XG59O1xuIiwKICAgICJpbXBvcnQge1xuICAgIEFzeW5jUmVzdWx0LFxuICAgIEJ1aWxkQWxsU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZXNGbixcbiAgICBHZW5lcmF0ZVNwb25zb3JlZFByb2R1Y3RDYXJkUmVzcG9uc2VGbixcbiAgICBHZXRBbGxTcG9uc29yZWRQcm9kdWN0RnJvbU5hdGl2ZUlkRm4sXG4gICAgR2V0Q29uZmlndXJhdGlvbkZuLFxuICAgIEdldERldmljZUZuLFxuICAgIEdldEdlb0ZuLFxuICAgIEdldFJlY29tbWVuZGVkUHJvZHVjdEZyb21Qcm9kdWN0SWRGbixcbiAgICBHZXRTcG9uc29yZWRQcm9kdWN0RnJvbU5hdGl2ZUlkRm4sXG4gICAgR2V0V2luZG93SW5mbyxcbiAgICBJTG9nZ2VyLFxuICAgIElOYXRpdmVUZW1wbGF0ZURlbGVnYXRlV2luZG93LFxuICAgIElOYXZpZ2F0b3IsXG4gICAgSW5pdFN1cmZBZHNDb3JlSW50ZXJuYWwsXG4gICAgSW5pdFN1cmZBZHNDb3JlU2VydmljZXMsXG4gICAgSVNjcmVlbixcbiAgICBJU3VyZnNpZGVBcGksXG4gICAgTm9uUGVyc29uYWxSZWNvbW1lbmRlckZuLFxuICAgIE9rLFxuICAgIFBlcnNvbmFsUmVjb21tZW5kZXJGbixcbiAgICBQUk9EX0JJRERFUixcbiAgICBQUk9EX0NPTkZJR1VSQVRJT05fU0VSVklDRSxcbiAgICBQUk9EX1JFQ09NTUVOREVEX1BST0RVQ1RfRkVFRCxcbiAgICBQUk9EX1JFQ09NTUVOREVSX1NFUlZJQ0UsXG4gICAgUFJPRF9TUE9OU09SRURfUFJPRFVDVF9GRUVELFxuICAgIFJlcXVlc3RCaWRzRm5cbn0gZnJvbSAnQHN1cmZzaWRlL2Fkcy1jb3JlJztcbmltcG9ydCB7IEJ1aWxkQWxsUmVzcG9uc2VzLCBCdWlsZEFsbFJlc3BvbnNlc0ZuLCBCdWlsZEJhbm5lclJlc3BvbnNlLCBCdWlsZEJhbm5lclJlc3BvbnNlRm4sIEJ1aWxkVmlkZW9SZXNwb25zZSwgQnVpbGRWaWRlb1Jlc3BvbnNlRm4sIEdlbmVyYXRlQWxsUmVzcG9uc2VzLCBHZW5lcmF0ZUFsbFJlc3BvbnNlc0ZuIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuZXhwb3J0ICogZnJvbSAnQHN1cmZzaWRlL2Fkcy1jb3JlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVscGVycyc7XG5cbmNvbnN0IFRMUyA9ICh1cmw6IHN0cmluZykgPT4gJ2h0dHBzOicgKyB1cmw7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1cmZzaWRlQ2xpZW50QXBpIGV4dGVuZHMgSVN1cmZzaWRlQXBpIHtcbiAgICBidWlsZEJhbm5lclJlc3BvbnNlOiBCdWlsZEJhbm5lclJlc3BvbnNlRm5cbiAgICBidWlsZFZpZGVvUmVzcG9uc2U6IEJ1aWxkVmlkZW9SZXNwb25zZUZuLFxuICAgIGJ1aWxkQWxsUmVzcG9uc2VzOiBCdWlsZEFsbFJlc3BvbnNlc0ZuLFxuICAgIGdlbmVyYXRlQWxsUmVzcG9uc2VzOiBHZW5lcmF0ZUFsbFJlc3BvbnNlc0ZuXG59XG5cbmV4cG9ydCBjb25zdCBJbml0U3VyZkFkc0NvcmVDbGllbnRJbnRlcm5hbCA9IGFzeW5jIChcbiAgICBsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsXG4gICAgcmVxdWVzdEJpZHM6IFJlcXVlc3RCaWRzRm4sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogR2V0Q29uZmlndXJhdGlvbkZuLFxuICAgIGdldEdlbzogR2V0R2VvRm4sXG4gICAgZ2V0RGV2aWNlOiBHZXREZXZpY2VGbixcbiAgICBnZXRTcG9uc29yZWRQcm9kdWN0OiBHZXRTcG9uc29yZWRQcm9kdWN0RnJvbU5hdGl2ZUlkRm4sXG4gICAgZ2V0QWxsU3BvbnNvcmVkUHJvZHVjdHM6IEdldEFsbFNwb25zb3JlZFByb2R1Y3RGcm9tTmF0aXZlSWRGbixcbiAgICBnZXRSZWNvbW1lbmRlZFByb2R1Y3Q6IEdldFJlY29tbWVuZGVkUHJvZHVjdEZyb21Qcm9kdWN0SWRGbixcbiAgICBnZW5lcmF0ZVRvcFByb2R1Y3RzOiBOb25QZXJzb25hbFJlY29tbWVuZGVyRm4sXG4gICAgZ2VuZXJhdGVGb3JZb3U6IFBlcnNvbmFsUmVjb21tZW5kZXJGbixcbiAgICBnZW5lcmF0ZVByZXZpb3VzUHVyY2hhc2VzOiBQZXJzb25hbFJlY29tbWVuZGVyRm4sXG4gICAgYnVpbGRBbGxQcm9kdWN0Q2FyZFJlc3BvbnNlczogQnVpbGRBbGxTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlc0ZuLFxuICAgIGdlbmVyYXRlUHJvZHVjdENhcmRSZXNwb25zZTogR2VuZXJhdGVTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlRm4sXG4gICAgYnVpbGRCYW5uZXJSZXNwb25zZTogQnVpbGRCYW5uZXJSZXNwb25zZUZuLFxuICAgIGJ1aWxkVmlkZW9SZXNwb25zZTogQnVpbGRWaWRlb1Jlc3BvbnNlRm4sXG4gICAgYnVpbGRBbGxSZXNwb25zZXM6IEJ1aWxkQWxsUmVzcG9uc2VzRm4sXG4gICAgZ2VuZXJhdGVBbGxSZXNwb25zZXM6IEdlbmVyYXRlQWxsUmVzcG9uc2VzRm4sXG4gICAgaGFuZGxlYmFyczogdHlwZW9mIEhhbmRsZWJhcnMsXG4gICAgc2NyZWVuOiBJU2NyZWVuLFxuICAgIG5hdmlnYXRvcjogSU5hdmlnYXRvcixcbiAgICBtb2JpbGU6IGJvb2xlYW4sXG4gICAgaXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBnZW9Qcm92aWRlclRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgd2luZG93SW5mbzogSU5hdGl2ZVRlbXBsYXRlRGVsZWdhdGVXaW5kb3csXG4gICAgYWNjb3VudElkOiBzdHJpbmcsXG4gICAgc2l0ZUlkOiBzdHJpbmcsXG4gICAgY2hhbm5lbElkOiBzdHJpbmcsXG4gICAgbG9jYXRpb25JZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogQXN5bmNSZXN1bHQ8SVN1cmZzaWRlQ2xpZW50QXBpPiA9PiB7XG4gICAgY29uc3QgYXBpUmVzID0gYXdhaXQgSW5pdFN1cmZBZHNDb3JlSW50ZXJuYWwoXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgcmVxdWVzdEJpZHMsXG4gICAgICAgIGdldENvbmZpZ3VyYXRpb24sXG4gICAgICAgIGdldEdlbyxcbiAgICAgICAgZ2V0RGV2aWNlLFxuICAgICAgICBnZXRTcG9uc29yZWRQcm9kdWN0LFxuICAgICAgICBnZXRBbGxTcG9uc29yZWRQcm9kdWN0cyxcbiAgICAgICAgZ2V0UmVjb21tZW5kZWRQcm9kdWN0LFxuICAgICAgICBnZW5lcmF0ZVRvcFByb2R1Y3RzLFxuICAgICAgICBnZW5lcmF0ZUZvcllvdSxcbiAgICAgICAgZ2VuZXJhdGVQcmV2aW91c1B1cmNoYXNlcyxcbiAgICAgICAgYnVpbGRBbGxQcm9kdWN0Q2FyZFJlc3BvbnNlcyxcbiAgICAgICAgZ2VuZXJhdGVQcm9kdWN0Q2FyZFJlc3BvbnNlLFxuICAgICAgICBoYW5kbGViYXJzLFxuICAgICAgICB3aW5kb3dJbmZvLFxuICAgICAgICBzY3JlZW4sXG4gICAgICAgIG5hdmlnYXRvcixcbiAgICAgICAgbW9iaWxlLFxuICAgICAgICBpcCxcbiAgICAgICAgZ2VvUHJvdmlkZXJUb2tlbixcbiAgICAgICAgYWNjb3VudElkLFxuICAgICAgICBzaXRlSWQsXG4gICAgICAgIGNoYW5uZWxJZCxcbiAgICAgICAgbG9jYXRpb25JZCxcbiAgICAgICAgdXNlcklkXG4gICAgKTtcbiAgICBpZiAoIWFwaVJlcy5vaykge1xuICAgICAgICByZXR1cm4gYXBpUmVzO1xuICAgIH1cblxuICAgIHJldHVybiBPayh7XG4gICAgICAgIC4uLmFwaVJlcy52YWx1ZSxcbiAgICAgICAgYnVpbGRCYW5uZXJSZXNwb25zZSxcbiAgICAgICAgYnVpbGRWaWRlb1Jlc3BvbnNlLFxuICAgICAgICBidWlsZEFsbFJlc3BvbnNlcyxcbiAgICAgICAgZ2VuZXJhdGVBbGxSZXNwb25zZXNcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBJbml0U3VyZkFkc0NvcmVDbGllbnRTZXJ2aWNlcyA9IGFzeW5jIChcbiAgICBsb2dnZXI6IElMb2dnZXIgfCB1bmRlZmluZWQsXG4gICAgYmlkZGVyU2VydmljZVVybDogc3RyaW5nLFxuICAgIGNvbmZpZ3VyYXRpb25TZXJ2aWNlVXJsOiBzdHJpbmcsXG4gICAgcHJvZHVjdEZlZWRVcmw6IHN0cmluZyxcbiAgICByZWNvbW1lbmRlZFByb2R1Y3RGZWVkVXJsOiBzdHJpbmcsXG4gICAgcmVjb21tZW5kZXJTZXJ2aWNlVXJsOiBzdHJpbmcsXG4gICAgd2luZG93SW5mbzogSU5hdGl2ZVRlbXBsYXRlRGVsZWdhdGVXaW5kb3csXG4gICAgc2NyZWVuOiBJU2NyZWVuLFxuICAgIG5hdmlnYXRvcjogSU5hdmlnYXRvcixcbiAgICBtb2JpbGU6IGJvb2xlYW4sXG4gICAgaXA6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBnZW9Qcm92aWRlclRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgYWNjb3VudElkOiBzdHJpbmcsXG4gICAgc2l0ZUlkOiBzdHJpbmcsXG4gICAgY2hhbm5lbElkOiBzdHJpbmcsXG4gICAgbG9jYXRpb25JZDogc3RyaW5nLFxuICAgIHVzZXJJZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuKTogQXN5bmNSZXN1bHQ8SVN1cmZzaWRlQ2xpZW50QXBpPiA9PiB7XG4gICAgY29uc3QgYXBpUmVzID0gYXdhaXQgSW5pdFN1cmZBZHNDb3JlU2VydmljZXMoXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgYmlkZGVyU2VydmljZVVybCxcbiAgICAgICAgY29uZmlndXJhdGlvblNlcnZpY2VVcmwsXG4gICAgICAgIHByb2R1Y3RGZWVkVXJsLFxuICAgICAgICByZWNvbW1lbmRlZFByb2R1Y3RGZWVkVXJsLFxuICAgICAgICByZWNvbW1lbmRlclNlcnZpY2VVcmwsXG4gICAgICAgIHdpbmRvd0luZm8sXG4gICAgICAgIHNjcmVlbixcbiAgICAgICAgbmF2aWdhdG9yLFxuICAgICAgICBtb2JpbGUsXG4gICAgICAgIGlwLFxuICAgICAgICBnZW9Qcm92aWRlclRva2VuLFxuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIHNpdGVJZCxcbiAgICAgICAgY2hhbm5lbElkLFxuICAgICAgICBsb2NhdGlvbklkLFxuICAgICAgICB1c2VySWRcbiAgICApO1xuICAgIFxuICAgIGlmICghYXBpUmVzLm9rKSB7XG4gICAgICAgIHJldHVybiBhcGlSZXM7XG4gICAgfVxuXG4gICAgY29uc3QgYXBpID0gYXBpUmVzLnZhbHVlO1xuXG4gICAgY29uc3QgYnVpbGRCYW5uZXJSZXNwb25zZSA9IEJ1aWxkQmFubmVyUmVzcG9uc2UuYmluZCh1bmRlZmluZWQsIGxvZ2dlciwgd2luZG93SW5mbywgYXBpLmNvbmZpZ3VyYXRpb24pO1xuICAgIGNvbnN0IGJ1aWxkVmlkZW9SZXNwb25zZSA9IEJ1aWxkVmlkZW9SZXNwb25zZS5iaW5kKHVuZGVmaW5lZCwgbG9nZ2VyLCB3aW5kb3dJbmZvLCBhcGkuY29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gSW5pdFN1cmZBZHNDb3JlQ2xpZW50SW50ZXJuYWwoXG4gICAgICAgIGxvZ2dlcixcbiAgICAgICAgYXBpLnJlcXVlc3RCaWRzLFxuICAgICAgICBhcGkuZ2V0Q29uZmlndXJhdGlvbixcbiAgICAgICAgYXBpLmdldEdlbyxcbiAgICAgICAgYXBpLmdldERldmljZSxcbiAgICAgICAgYXBpLmdldFNwb25zb3JlZFByb2R1Y3QsXG4gICAgICAgIGFwaS5nZXRBbGxTcG9uc29yZWRQcm9kdWN0cyxcbiAgICAgICAgYXBpLmdldFJlY29tbWVuZGVkUHJvZHVjdCxcbiAgICAgICAgYXBpLmdlbmVyYXRlVG9wUHJvZHVjdHMsXG4gICAgICAgIGFwaS5nZW5lcmF0ZUZvcllvdSxcbiAgICAgICAgYXBpLmdlbmVyYXRlUHJldmlvdXNQdXJjaGFzZXMsXG4gICAgICAgIGFwaS5idWlsZEFsbFNwb25zb3JlZFByb2R1Y3RDYXJkUmVzcG9uc2VzLFxuICAgICAgICBhcGkuZ2VuZXJhdGVTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlLFxuICAgICAgICBidWlsZEJhbm5lclJlc3BvbnNlLFxuICAgICAgICBidWlsZFZpZGVvUmVzcG9uc2UsXG4gICAgICAgIEJ1aWxkQWxsUmVzcG9uc2VzLmJpbmQodW5kZWZpbmVkLCBsb2dnZXIsXG4gICAgICAgICAgICBidWlsZEJhbm5lclJlc3BvbnNlLFxuICAgICAgICAgICAgYnVpbGRWaWRlb1Jlc3BvbnNlLFxuICAgICAgICAgICAgYXBpLmJ1aWxkQWxsU3BvbnNvcmVkUHJvZHVjdENhcmRSZXNwb25zZXNcbiAgICAgICAgKSxcbiAgICAgICAgR2VuZXJhdGVBbGxSZXNwb25zZXMuYmluZCh1bmRlZmluZWQsIGxvZ2dlcixcbiAgICAgICAgICAgIGJ1aWxkQmFubmVyUmVzcG9uc2UsXG4gICAgICAgICAgICBidWlsZFZpZGVvUmVzcG9uc2UsXG4gICAgICAgICAgICBhcGkuYnVpbGRBbGxTcG9uc29yZWRQcm9kdWN0Q2FyZFJlc3BvbnNlc1xuICAgICAgICApLFxuICAgICAgICBhcGkuaGFuZGxlYmFycyxcbiAgICAgICAgc2NyZWVuLFxuICAgICAgICBuYXZpZ2F0b3IsXG4gICAgICAgIG1vYmlsZSxcbiAgICAgICAgaXAsXG4gICAgICAgIGdlb1Byb3ZpZGVyVG9rZW4sXG4gICAgICAgIHdpbmRvd0luZm8sXG4gICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgc2l0ZUlkLFxuICAgICAgICBjaGFubmVsSWQsXG4gICAgICAgIGxvY2F0aW9uSWQsXG4gICAgICAgIHVzZXJJZFxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgSW5pdFN1cmZBZHNDb3JlQ2xpZW50ID0gYXN5bmMgKFxuICAgIGFjY291bnRJZDogc3RyaW5nLFxuICAgIHNpdGVJZDogc3RyaW5nLFxuICAgIGNoYW5uZWxJZDogc3RyaW5nLFxuICAgIGxvY2F0aW9uSWQ6IHN0cmluZyxcbiAgICB1c2VySWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBsb2dnZXI/OiBJTG9nZ2VyXG4pOiBBc3luY1Jlc3VsdDxJU3VyZnNpZGVDbGllbnRBcGk+ID0+IHtcbiAgICBjb25zdCB3aW5kb3dJbmZvID0gR2V0V2luZG93SW5mbygpO1xuICAgIGlmKCF3aW5kb3dJbmZvLm9rKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3dJbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBJbml0U3VyZkFkc0NvcmVDbGllbnRTZXJ2aWNlcyhcbiAgICAgICAgbG9nZ2VyLFxuICAgICAgICBUTFMoUFJPRF9CSURERVIpLFxuICAgICAgICBUTFMoUFJPRF9DT05GSUdVUkFUSU9OX1NFUlZJQ0UpLFxuICAgICAgICBUTFMoUFJPRF9TUE9OU09SRURfUFJPRFVDVF9GRUVEKSxcbiAgICAgICAgVExTKFBST0RfUkVDT01NRU5ERURfUFJPRFVDVF9GRUVEKSxcbiAgICAgICAgVExTKFBST0RfUkVDT01NRU5ERVJfU0VSVklDRSksXG4gICAgICAgIHdpbmRvd0luZm8udmFsdWUsXG4gICAgICAgIHdpbmRvdy5zY3JlZW4sXG4gICAgICAgIHdpbmRvdy5uYXZpZ2F0b3IsXG4gICAgICAgIGlzTW9iaWxlKCksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBhY2NvdW50SWQsXG4gICAgICAgIHNpdGVJZCxcbiAgICAgICAgY2hhbm5lbElkLFxuICAgICAgICBsb2NhdGlvbklkLFxuICAgICAgICB1c2VySWRcbiAgICApO1xufVxuXG5jb25zdCBpc01vYmlsZSA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gKHdpbmRvdy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZCkgOiBmYWxzZTtcbiIKICBdLAogICJtYXBwaW5ncyI6ICI7QUFBQSxJQUFJLFdBQVcsT0FBTztBQUN0QixJQUFJLGVBQWUsT0FBTztBQUMxQixJQUFJLFlBQVksT0FBTztBQUN2QixJQUFJLG9CQUFvQixPQUFPO0FBQy9CLElBQUksZUFBZSxPQUFPLFVBQVU7QUFDcEMsSUFBSSxVQUFVLENBQUMsS0FBSyxZQUFZLFdBQVc7QUFBQSxFQUN6QyxTQUFTLE9BQU8sT0FBTyxTQUFTLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQztBQUFBLEVBQ3RELE1BQU0sS0FBSyxlQUFlLFFBQVEsSUFBSSxhQUFhLFVBQVUsUUFBUSxXQUFXLEVBQUUsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLElBQUk7QUFBQSxFQUNwSCxTQUFTLE9BQU8sa0JBQWtC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\n",
28
- "var __create = Object.create;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __toESM = (mod, isNodeMode, target) => {\n target = mod != null ? __create(__getProtoOf(mod)) : {};\n const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target;\n for (let key of __getOwnPropNames(mod))\n if (!__hasOwnProp.call(to, key))\n __defProp(to, key, {\n get: () => mod[key],\n enumerable: true\n });\n return to;\n};\nvar __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/utils.js\nvar require_utils = __commonJS((exports) => {\n exports.__esModule = true;\n exports.extend = extend;\n exports.indexOf = indexOf;\n exports.escapeExpression = escapeExpression;\n exports.isEmpty = isEmpty;\n exports.createFrame = createFrame;\n exports.blockParams = blockParams;\n exports.appendContextPath = appendContextPath;\n var escape = {\n \"&\": \"&amp;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\",\n '\"': \"&quot;\",\n \"'\": \"&#x27;\",\n \"`\": \"&#x60;\",\n \"=\": \"&#x3D;\"\n };\n var badChars = /[&<>\"'`=]/g;\n var possible = /[&<>\"'`=]/;\n function escapeChar(chr) {\n return escape[chr];\n }\n function extend(obj) {\n for (var i = 1;i < arguments.length; i++) {\n for (var key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n return obj;\n }\n var toString = Object.prototype.toString;\n exports.toString = toString;\n var isFunction = function isFunction(value) {\n return typeof value === \"function\";\n };\n if (isFunction(/x/)) {\n exports.isFunction = isFunction = function(value) {\n return typeof value === \"function\" && toString.call(value) === \"[object Function]\";\n };\n }\n exports.isFunction = isFunction;\n var isArray = Array.isArray || function(value) {\n return value && typeof value === \"object\" ? toString.call(value) === \"[object Array]\" : false;\n };\n exports.isArray = isArray;\n function indexOf(array2, value) {\n for (var i = 0, len = array2.length;i < len; i++) {\n if (array2[i] === value) {\n return i;\n }\n }\n return -1;\n }\n function escapeExpression(string) {\n if (typeof string !== \"string\") {\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return \"\";\n } else if (!string) {\n return string + \"\";\n }\n string = \"\" + string;\n }\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n }\n function isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n }\n function createFrame(object) {\n var frame = extend({}, object);\n frame._parent = object;\n return frame;\n }\n function blockParams(params, ids) {\n params.path = ids;\n return params;\n }\n function appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + \".\" : \"\") + id;\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/exception.js\nvar require_exception = __commonJS((exports, module) => {\n exports.__esModule = true;\n var errorProps = [\"description\", \"fileName\", \"lineNumber\", \"endLineNumber\", \"message\", \"name\", \"number\", \"stack\"];\n function Exception(message, node) {\n var loc = node && node.loc, line = undefined, endLineNumber = undefined, column = undefined, endColumn = undefined;\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n message += \" - \" + line + \":\" + column;\n }\n var tmp = Error.prototype.constructor.call(this, message);\n for (var idx = 0;idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n if (Object.defineProperty) {\n Object.defineProperty(this, \"column\", {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, \"endColumn\", {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {}\n }\n Exception.prototype = new Error;\n exports.default = Exception;\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js\nvar require_block_helper_missing = __commonJS((exports, module) => {\n exports.__esModule = true;\n var _utils = require_utils();\n exports.default = function(instance) {\n instance.registerHelper(\"blockHelperMissing\", function(context2, options) {\n var { inverse, fn } = options;\n if (context2 === true) {\n return fn(this);\n } else if (context2 === false || context2 == null) {\n return inverse(this);\n } else if (_utils.isArray(context2)) {\n if (context2.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n return instance.helpers.each(context2, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n var data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);\n options = { data };\n }\n return fn(context2, options);\n }\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/each.js\nvar require_each = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"each\", function(context2, options) {\n if (!options) {\n throw new _exception2[\"default\"](\"Must pass iterator to #each\");\n }\n var { fn, inverse } = options, i = 0, ret = \"\", data = undefined, contextPath = undefined;\n if (options.data && options.ids) {\n contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + \".\";\n }\n if (_utils.isFunction(context2)) {\n context2 = context2.call(this);\n }\n if (options.data) {\n data = _utils.createFrame(options.data);\n }\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n ret = ret + fn(context2[field], {\n data,\n blockParams: _utils.blockParams([context2[field], field], [contextPath + field, null])\n });\n }\n if (context2 && typeof context2 === \"object\") {\n if (_utils.isArray(context2)) {\n for (var j = context2.length;i < j; i++) {\n if (i in context2) {\n execIteration(i, i, i === context2.length - 1);\n }\n }\n } else if (typeof Symbol === \"function\" && context2[Symbol.iterator]) {\n var newContext = [];\n var iterator = context2[Symbol.iterator]();\n for (var it = iterator.next();!it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context2 = newContext;\n for (var j = context2.length;i < j; i++) {\n execIteration(i, i, i === context2.length - 1);\n }\n } else {\n (function() {\n var priorKey = undefined;\n Object.keys(context2).forEach(function(key) {\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n })();\n }\n }\n if (i === 0) {\n ret = inverse(this);\n }\n return ret;\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js\nvar require_helper_missing = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"helperMissing\", function() {\n if (arguments.length === 1) {\n return;\n } else {\n throw new _exception2[\"default\"]('Missing helper: \"' + arguments[arguments.length - 1].name + '\"');\n }\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/if.js\nvar require_if = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"if\", function(conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2[\"default\"](\"#if requires exactly one argument\");\n }\n if (_utils.isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n instance.registerHelper(\"unless\", function(conditional, options) {\n if (arguments.length != 2) {\n throw new _exception2[\"default\"](\"#unless requires exactly one argument\");\n }\n return instance.helpers[\"if\"].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/log.js\nvar require_log = __commonJS((exports, module) => {\n exports.__esModule = true;\n exports.default = function(instance) {\n instance.registerHelper(\"log\", function() {\n var args = [undefined], options = arguments[arguments.length - 1];\n for (var i = 0;i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n var level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n instance.log.apply(instance, args);\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js\nvar require_lookup = __commonJS((exports, module) => {\n exports.__esModule = true;\n exports.default = function(instance) {\n instance.registerHelper(\"lookup\", function(obj, field, options) {\n if (!obj) {\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers/with.js\nvar require_with = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n exports.default = function(instance) {\n instance.registerHelper(\"with\", function(context2, options) {\n if (arguments.length != 2) {\n throw new _exception2[\"default\"](\"#with requires exactly one argument\");\n }\n if (_utils.isFunction(context2)) {\n context2 = context2.call(this);\n }\n var fn = options.fn;\n if (!_utils.isEmpty(context2)) {\n var data = options.data;\n if (options.data && options.ids) {\n data = _utils.createFrame(options.data);\n data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);\n }\n return fn(context2, {\n data,\n blockParams: _utils.blockParams([context2], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/helpers.js\nvar require_helpers = __commonJS((exports) => {\n exports.__esModule = true;\n exports.registerDefaultHelpers = registerDefaultHelpers;\n exports.moveHelperToHooks = moveHelperToHooks;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _helpersBlockHelperMissing = require_block_helper_missing();\n var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);\n var _helpersEach = require_each();\n var _helpersEach2 = _interopRequireDefault(_helpersEach);\n var _helpersHelperMissing = require_helper_missing();\n var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);\n var _helpersIf = require_if();\n var _helpersIf2 = _interopRequireDefault(_helpersIf);\n var _helpersLog = require_log();\n var _helpersLog2 = _interopRequireDefault(_helpersLog);\n var _helpersLookup = require_lookup();\n var _helpersLookup2 = _interopRequireDefault(_helpersLookup);\n var _helpersWith = require_with();\n var _helpersWith2 = _interopRequireDefault(_helpersWith);\n function registerDefaultHelpers(instance) {\n _helpersBlockHelperMissing2[\"default\"](instance);\n _helpersEach2[\"default\"](instance);\n _helpersHelperMissing2[\"default\"](instance);\n _helpersIf2[\"default\"](instance);\n _helpersLog2[\"default\"](instance);\n _helpersLookup2[\"default\"](instance);\n _helpersWith2[\"default\"](instance);\n }\n function moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js\nvar require_inline = __commonJS((exports, module) => {\n exports.__esModule = true;\n var _utils = require_utils();\n exports.default = function(instance) {\n instance.registerDecorator(\"inline\", function(fn, props, container, options) {\n var ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function(context2, options2) {\n var original = container.partials;\n container.partials = _utils.extend({}, original, props.partials);\n var ret2 = fn(context2, options2);\n container.partials = original;\n return ret2;\n };\n }\n props.partials[options.args[0]] = options.fn;\n return ret;\n });\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/decorators.js\nvar require_decorators = __commonJS((exports) => {\n exports.__esModule = true;\n exports.registerDefaultDecorators = registerDefaultDecorators;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _decoratorsInline = require_inline();\n var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);\n function registerDefaultDecorators(instance) {\n _decoratorsInline2[\"default\"](instance);\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/logger.js\nvar require_logger = __commonJS((exports, module) => {\n exports.__esModule = true;\n var _utils = require_utils();\n var logger = {\n methodMap: [\"debug\", \"info\", \"warn\", \"error\"],\n level: \"info\",\n lookupLevel: function lookupLevel(level) {\n if (typeof level === \"string\") {\n var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n return level;\n },\n log: function log(level) {\n level = logger.lookupLevel(level);\n if (typeof console !== \"undefined\" && logger.lookupLevel(logger.level) <= level) {\n var method = logger.methodMap[level];\n if (!console[method]) {\n method = \"log\";\n }\n for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1;_key < _len; _key++) {\n message[_key - 1] = arguments[_key];\n }\n console[method].apply(console, message);\n }\n }\n };\n exports.default = logger;\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/internal/create-new-lookup-object.js\nvar require_create_new_lookup_object = __commonJS((exports) => {\n exports.__esModule = true;\n exports.createNewLookupObject = createNewLookupObject;\n var _utils = require_utils();\n function createNewLookupObject() {\n for (var _len = arguments.length, sources = Array(_len), _key = 0;_key < _len; _key++) {\n sources[_key] = arguments[_key];\n }\n return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js\nvar require_proto_access = __commonJS((exports) => {\n exports.__esModule = true;\n exports.createProtoAccessControl = createProtoAccessControl;\n exports.resultIsAllowed = resultIsAllowed;\n exports.resetLoggedProperties = resetLoggedProperties;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _createNewLookupObject = require_create_new_lookup_object();\n var _logger = require_logger();\n var _logger2 = _interopRequireDefault(_logger);\n var loggedProperties = Object.create(null);\n function createProtoAccessControl(runtimeOptions) {\n var defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList[\"constructor\"] = false;\n defaultMethodWhiteList[\"__defineGetter__\"] = false;\n defaultMethodWhiteList[\"__defineSetter__\"] = false;\n defaultMethodWhiteList[\"__lookupGetter__\"] = false;\n var defaultPropertyWhiteList = Object.create(null);\n defaultPropertyWhiteList[\"__proto__\"] = false;\n return {\n properties: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n }\n function resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === \"function\") {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n }\n function checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n }\n function logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n _logger2[\"default\"].log(\"error\", 'Handlebars: Access has been denied to resolve the property \"' + propertyName + `\" because it is not an \"own property\" of its parent.\n` + `You can add a runtime option to disable the check or this warning:\n` + \"See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details\");\n }\n }\n function resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(function(propertyName) {\n delete loggedProperties[propertyName];\n });\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/base.js\nvar require_base = __commonJS((exports) => {\n exports.__esModule = true;\n exports.HandlebarsEnvironment = HandlebarsEnvironment;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n var _utils = require_utils();\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n var _helpers = require_helpers();\n var _decorators = require_decorators();\n var _logger = require_logger();\n var _logger2 = _interopRequireDefault(_logger);\n var _internalProtoAccess = require_proto_access();\n var VERSION = \"4.7.8\";\n exports.VERSION = VERSION;\n var COMPILER_REVISION = 8;\n exports.COMPILER_REVISION = COMPILER_REVISION;\n var LAST_COMPATIBLE_COMPILER_REVISION = 7;\n exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;\n var REVISION_CHANGES = {\n 1: \"<= 1.0.rc.2\",\n 2: \"== 1.0.0-rc.3\",\n 3: \"== 1.0.0-rc.4\",\n 4: \"== 1.x.x\",\n 5: \"== 2.0.0-alpha.x\",\n 6: \">= 2.0.0-beta.1\",\n 7: \">= 4.0.0 <4.3.0\",\n 8: \">= 4.3.0\"\n };\n exports.REVISION_CHANGES = REVISION_CHANGES;\n var objectType = \"[object Object]\";\n function HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n _helpers.registerDefaultHelpers(this);\n _decorators.registerDefaultDecorators(this);\n }\n HandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n logger: _logger2[\"default\"],\n log: _logger2[\"default\"].log,\n registerHelper: function registerHelper(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2[\"default\"](\"Arg not supported with multiple helpers\");\n }\n _utils.extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function unregisterHelper(name) {\n delete this.helpers[name];\n },\n registerPartial: function registerPartial(name, partial) {\n if (_utils.toString.call(name) === objectType) {\n _utils.extend(this.partials, name);\n } else {\n if (typeof partial === \"undefined\") {\n throw new _exception2[\"default\"]('Attempting to register a partial called \"' + name + '\" as undefined');\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function unregisterPartial(name) {\n delete this.partials[name];\n },\n registerDecorator: function registerDecorator(name, fn) {\n if (_utils.toString.call(name) === objectType) {\n if (fn) {\n throw new _exception2[\"default\"](\"Arg not supported with multiple decorators\");\n }\n _utils.extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function unregisterDecorator(name) {\n delete this.decorators[name];\n },\n resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {\n _internalProtoAccess.resetLoggedProperties();\n }\n };\n var log2 = _logger2[\"default\"].log;\n exports.log = log2;\n exports.createFrame = _utils.createFrame;\n exports.logger = _logger2[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/safe-string.js\nvar require_safe_string = __commonJS((exports, module) => {\n exports.__esModule = true;\n function SafeString(string) {\n this.string = string;\n }\n SafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n return \"\" + this.string;\n };\n exports.default = SafeString;\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/internal/wrapHelper.js\nvar require_wrapHelper = __commonJS((exports) => {\n exports.__esModule = true;\n exports.wrapHelper = wrapHelper;\n function wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== \"function\") {\n return helper;\n }\n var wrapper = function wrapper() {\n var options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/runtime.js\nvar require_runtime = __commonJS((exports) => {\n exports.__esModule = true;\n exports.checkRevision = checkRevision;\n exports.template = template;\n exports.wrapProgram = wrapProgram;\n exports.resolvePartial = resolvePartial;\n exports.invokePartial = invokePartial;\n exports.noop = noop;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n newObj[key] = obj[key];\n }\n }\n newObj[\"default\"] = obj;\n return newObj;\n }\n }\n var _utils = require_utils();\n var Utils = _interopRequireWildcard(_utils);\n var _exception = require_exception();\n var _exception2 = _interopRequireDefault(_exception);\n var _base = require_base();\n var _helpers = require_helpers();\n var _internalWrapHelper = require_wrapHelper();\n var _internalProtoAccess = require_proto_access();\n function checkRevision(compilerInfo) {\n var compilerRevision = compilerInfo && compilerInfo[0] || 1, currentRevision = _base.COMPILER_REVISION;\n if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {\n return;\n }\n if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {\n var runtimeVersions = _base.REVISION_CHANGES[currentRevision], compilerVersions = _base.REVISION_CHANGES[compilerRevision];\n throw new _exception2[\"default\"](\"Template was precompiled with an older version of Handlebars than the current runtime. \" + \"Please update your precompiler to a newer version (\" + runtimeVersions + \") or downgrade your runtime to an older version (\" + compilerVersions + \").\");\n } else {\n throw new _exception2[\"default\"](\"Template was precompiled with a newer version of Handlebars than the current runtime. \" + \"Please update your runtime to a newer version (\" + compilerInfo[1] + \").\");\n }\n }\n function template(templateSpec, env) {\n if (!env) {\n throw new _exception2[\"default\"](\"No environment passed to template\");\n }\n if (!templateSpec || !templateSpec.main) {\n throw new _exception2[\"default\"](\"Unknown template object: \" + typeof templateSpec);\n }\n templateSpec.main.decorator = templateSpec.main_d;\n env.VM.checkRevision(templateSpec.compiler);\n var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;\n function invokePartialWrapper(partial, context2, options) {\n if (options.hash) {\n context2 = Utils.extend({}, context2, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context2, options);\n var extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n var result = env.VM.invokePartial.call(this, partial, context2, extendedOptions);\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);\n result = options.partials[options.name](context2, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n var lines = result.split(`\n`);\n for (var i = 0, l = lines.length;i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n lines[i] = options.indent + lines[i];\n }\n result = lines.join(`\n`);\n }\n return result;\n } else {\n throw new _exception2[\"default\"](\"The partial \" + options.name + \" could not be compiled when running in runtime-only mode\");\n }\n }\n var container = {\n strict: function strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new _exception2[\"default\"]('\"' + name + '\" not defined in ' + obj, {\n loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function lookupProperty(parent, propertyName) {\n var result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return;\n },\n lookup: function lookup(depths, name) {\n var len = depths.length;\n for (var i = 0;i < len; i++) {\n var result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function lambda(current, context2) {\n return typeof current === \"function\" ? current.call(context2) : current;\n },\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n fn: function fn(i) {\n var ret2 = templateSpec[i];\n ret2.decorator = templateSpec[i + \"_d\"];\n return ret2;\n },\n programs: [],\n program: function program(i, data, declaredBlockParams, blockParams, depths) {\n var programWrapper = this.programs[i], fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n data: function data(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function mergeIfNeeded(param, common) {\n var obj = param || common;\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n return obj;\n },\n nullContext: Object.seal({}),\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n function ret(context2) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var data = options.data;\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context2, data);\n }\n var depths = undefined, blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths = context2 != options.depths[0] ? [context2].concat(options.depths) : options.depths;\n } else {\n depths = [context2];\n }\n }\n function main(context3) {\n return \"\" + templateSpec.main(container, context3, container.helpers, container.partials, data, blockParams, depths);\n }\n main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);\n return main(context2, options);\n }\n ret.isTop = true;\n ret._setup = function(options) {\n if (!options.partial) {\n var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n if (templateSpec.usePartial) {\n container.partials = container.mergeIfNeeded(options.partials, env.partials);\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend({}, env.decorators, options.decorators);\n }\n container.hooks = {};\n container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);\n var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;\n _helpers.moveHelperToHooks(container, \"helperMissing\", keepHelperInHelpers);\n _helpers.moveHelperToHooks(container, \"blockHelperMissing\", keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl;\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n ret._child = function(i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new _exception2[\"default\"](\"must pass block params\");\n }\n if (templateSpec.useDepths && !depths) {\n throw new _exception2[\"default\"](\"must pass parent depths\");\n }\n return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);\n };\n return ret;\n }\n function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {\n function prog(context2) {\n var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n var currentDepths = depths;\n if (depths && context2 != depths[0] && !(context2 === container.nullContext && depths[0] === null)) {\n currentDepths = [context2].concat(depths);\n }\n return fn(container, context2, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);\n }\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n }\n function resolvePartial(partial, context2, options) {\n if (!partial) {\n if (options.name === \"@partial-block\") {\n partial = options.data[\"partial-block\"];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n }\n function invokePartial(partial, context2, options) {\n var currentPartialBlock = options.data && options.data[\"partial-block\"];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n var partialBlock = undefined;\n if (options.fn && options.fn !== noop) {\n (function() {\n options.data = _base.createFrame(options.data);\n var fn = options.fn;\n partialBlock = options.data[\"partial-block\"] = function partialBlockWrapper(context3) {\n var options2 = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];\n options2.data = _base.createFrame(options2.data);\n options2.data[\"partial-block\"] = currentPartialBlock;\n return fn(context3, options2);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n })();\n }\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n if (partial === undefined) {\n throw new _exception2[\"default\"](\"The partial \" + options.name + \" could not be found\");\n } else if (partial instanceof Function) {\n return partial(context2, options);\n }\n }\n function noop() {\n return \"\";\n }\n function initData(context2, data) {\n if (!data || !(\"root\" in data)) {\n data = data ? _base.createFrame(data) : {};\n data.root = context2;\n }\n return data;\n }\n function executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n var props = {};\n prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);\n Utils.extend(prog, props);\n }\n return prog;\n }\n function wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(function(helperName) {\n var helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n }\n function passLookupPropertyOption(helper, container) {\n var lookupProperty = container.lookupProperty;\n return _internalWrapHelper.wrapHelper(helper, function(options) {\n return Utils.extend({ lookupProperty }, options);\n });\n }\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars/no-conflict.js\nvar require_no_conflict = __commonJS((exports, module) => {\n exports.__esModule = true;\n exports.default = function(Handlebars) {\n (function() {\n if (typeof globalThis === \"object\")\n return;\n Object.prototype.__defineGetter__(\"__magic__\", function() {\n return this;\n });\n __magic__.globalThis = __magic__;\n delete Object.prototype.__magic__;\n })();\n var $Handlebars = globalThis.Handlebars;\n Handlebars.noConflict = function() {\n if (globalThis.Handlebars === Handlebars) {\n globalThis.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n };\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/dist/cjs/handlebars.runtime.js\nvar require_handlebars_runtime = __commonJS((exports, module) => {\n exports.__esModule = true;\n function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n }\n function _interopRequireWildcard(obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key))\n newObj[key] = obj[key];\n }\n }\n newObj[\"default\"] = obj;\n return newObj;\n }\n }\n var _handlebarsBase = require_base();\n var base = _interopRequireWildcard(_handlebarsBase);\n var _handlebarsSafeString = require_safe_string();\n var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);\n var _handlebarsException = require_exception();\n var _handlebarsException2 = _interopRequireDefault(_handlebarsException);\n var _handlebarsUtils = require_utils();\n var Utils = _interopRequireWildcard(_handlebarsUtils);\n var _handlebarsRuntime = require_runtime();\n var runtime = _interopRequireWildcard(_handlebarsRuntime);\n var _handlebarsNoConflict = require_no_conflict();\n var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);\n function create() {\n var hb = new base.HandlebarsEnvironment;\n Utils.extend(hb, base);\n hb.SafeString = _handlebarsSafeString2[\"default\"];\n hb.Exception = _handlebarsException2[\"default\"];\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n hb.VM = runtime;\n hb.template = function(spec) {\n return runtime.template(spec, hb);\n };\n return hb;\n }\n var inst = create();\n inst.create = create;\n _handlebarsNoConflict2[\"default\"](inst);\n inst[\"default\"] = inst;\n exports.default = inst;\n module.exports = exports[\"default\"];\n});\n\n// ../../node_modules/handlebars/runtime.js\nvar require_runtime2 = __commonJS((exports, module) => {\n module.exports = require_handlebars_runtime()[\"default\"];\n});\n// src/models/rtb/BidRequest.ts\nvar AgentTypes = {\n Session: 1,\n Device: 2,\n User: 3\n};\nvar AdCom10DeviceTypes = {\n Mobile: 1,\n PC: 2,\n CTV: 3,\n Phone: 4,\n Tablet: 5,\n Connected: 6,\n SetTop: 7,\n OOH: 8\n};\n// src/models/rtb/NativeRequest.ts\nvar NativePosition = {\n Unknown: 0,\n AboveTheFold: 1,\n BelowTheFold: 3,\n Header: 4,\n Footer: 5,\n Sidebar: 6,\n FullScreen: 7\n};\nvar NativeImageTypes = {\n Icon: 1,\n Main: 3\n};\nvar NativeDataTypes = {\n Sponsored: 1,\n Desc: 2,\n Rating: 3,\n Likes: 4,\n Downloads: 5,\n Price: 6,\n SalePrice: 7,\n Phone: 8,\n Address: 9,\n Desc2: 10,\n DisplayURL: 11,\n CTAText: 12,\n SurfStrain: 500,\n SurfTHC: 501,\n SurfCBD: 502,\n SurfCategory: 503,\n SurfMetaProduct: 599\n};\nvar NativeAssetId = {\n Title: 0,\n Image: 1,\n Sponsored: 2,\n Desc: 3,\n Rating: 4,\n Price: 5,\n SalePrice: 6,\n DisplayURL: 7,\n CTAText: 8,\n Video: 9,\n SurfStrain: 500,\n SurfTHC: 501,\n SurfCBD: 502,\n SurfCategory: 503,\n SurfMetaProduct: 599\n};\nvar EventTypes = {\n Imp: 1,\n ViewableMRC50: 2,\n ViewableMRC100: 3,\n ViewableVIDEO50: 4\n};\nvar ContextTypes = {\n Content: 1,\n Social: 2,\n Product: 3\n};\nvar ContextSubTypes = {\n General: 10,\n Article: 11,\n Video: 12,\n Audio: 13,\n Image: 14,\n UserGenerated: 15,\n GeneralSocial: 20,\n Email: 21,\n Chat: 22,\n Product: 30,\n Application: 31,\n ProductReviews: 32\n};\nvar PlacementTypes = {\n InFeed: 1,\n Atomic: 2,\n OutsideCore: 3,\n Recommendation: 4\n};\nvar VideoMimes = {\n MP4: \"video/mp4\",\n WEBM: \"video/webm\"\n};\nvar EventTrackingMethods = {\n Img: 1,\n JS: 2\n};\n// src/models/rtb/NativeResponse.ts\nvar findDataAssetByType = (assets, id) => assets?.find((asset) => asset.id === id)?.data?.value;\nfunction NativeResponseToProductInformation(native) {\n const brand = findDataAssetByType(native.native.assets, NativeAssetId.Sponsored);\n return {\n image: native.native.assets?.find((asset) => asset.img?.type === NativeImageTypes.Main)?.img?.url,\n name: native.native.assets?.find((asset) => asset.title !== undefined)?.title?.text,\n price: findDataAssetByType(native.native.assets, NativeAssetId.Price),\n salePrice: findDataAssetByType(native.native.assets, NativeAssetId.SalePrice),\n thc: findDataAssetByType(native.native.assets, NativeAssetId.SurfTHC),\n cbd: findDataAssetByType(native.native.assets, NativeAssetId.SurfCBD),\n strain: findDataAssetByType(native.native.assets, NativeAssetId.SurfStrain),\n brand_name: brand,\n brandName: brand,\n productType: findDataAssetByType(native.native.assets, NativeAssetId.SurfCategory),\n details: findDataAssetByType(native.native.assets, NativeAssetId.Desc),\n cta: findDataAssetByType(native.native.assets, NativeAssetId.CTAText),\n clickthroughUrl: native.native.link?.url ?? null,\n pixelUrl: native.native.eventtrackers?.find((event) => event.event === EventTypes.Imp)?.url\n };\n}\n// src/services/Logger.ts\nvar SURF_PREFIX = \"%c[SURF]\";\nvar SEPARATOR = \" ›\";\nvar UNDEF = \"[ undefined ]\";\nvar LogColors = {\n Lavender: \"#c0abff\",\n UltraRed: \"#f97585\",\n SoftGold: \"#f4bd5d\",\n MagicMint: \"#baf7db\"\n};\nvar log = (log2, args, color) => {\n args.unshift(`border-radius: 3px; margin-left: 10px; background: ${color}; font-size: 12px; font-weight: bold;`);\n args.unshift(SURF_PREFIX);\n log2.apply(console, args);\n};\nvar info = (...args) => log(console.log, [\"(Info)\", ...args], LogColors.Lavender);\nvar warn = (...args) => log(console.warn, [\"(Warning)\", ...args], LogColors.SoftGold);\nvar debug = (...args) => log(console.debug, [\"(Debug)\", ...args], LogColors.MagicMint);\nvar error = (...args) => log(console.error, [\"(Error)\", ...args], LogColors.UltraRed);\nvar context = (logger, ...prefix) => {\n const newPrefix = joinCtx(prefix) + SEPARATOR;\n const newLogger = {\n info: logger.info.bind(undefined, newPrefix),\n warn: logger.warn.bind(undefined, newPrefix),\n debug: logger.debug.bind(undefined, newPrefix),\n error: logger.error.bind(undefined, newPrefix),\n table: console.table,\n with: logger.with\n };\n newLogger.with = context.bind(undefined, newLogger);\n return newLogger;\n};\nvar InitLogger = () => {\n const logger = {\n info,\n warn,\n debug,\n error,\n table: console.table\n };\n logger.with = context.bind(undefined, logger);\n return logger;\n};\nvar joinCtx = (ctx) => ctx.map((e) => e === undefined ? UNDEF : e).join(SEPARATOR);\nvar Ctx = (logger) => logger === undefined ? undefined : logger?.with === undefined ? { ...logger, with: () => Ctx(logger) } : logger;\n\n// src/services/Result.ts\nvar Ok = (t) => ({\n ok: true,\n value: t\n});\nvar Err = (e) => ({\n ok: false,\n error: e\n});\nvar TryDo = (fn) => {\n try {\n return Ok(fn());\n } catch (err) {\n return Err(err);\n }\n};\nvar GetValue = (result) => result?.ok ? result.value : undefined;\nvar ValueOr = (result, or) => result?.ok ? result.value : or;\nvar GetValueOrThrow = (result) => {\n if (result.ok) {\n return result.value;\n }\n throw result.error;\n};\nvar AssertValue = GetValueOrThrow;\nvar AllOrNone = (results) => {\n const failed = results.filter((res) => !res.ok).map((res) => res.error);\n if (failed.length > 0) {\n return Err(new MultipleErrorsError(failed));\n }\n const success = results.filter((res) => res.ok).map((res) => res.value);\n return Ok(success);\n};\nvar Some = (results) => {\n const success = results.filter((res) => res.ok).map((res) => res.value);\n return Ok(success);\n};\nvar Filter = (...results) => {\n const success = Some(results).value.map((val) => Ok(val));\n const failed = results.filter((res) => !res.ok);\n return [success, failed];\n};\nvar AnyFailed = (...results) => {\n const errors = results.filter((res) => !res.ok).map((res) => res.error);\n if (errors.length) {\n return [true, errors];\n }\n return [false];\n};\n\nclass MultipleErrorsError extends Error {\n errors;\n constructor(errors) {\n super(`Got multiple errors:\n` + errors.map((err) => \"\\t\" + err.message.substring(0, 32).padEnd(35, \".\")).join(`\n`));\n this.errors = errors;\n }\n}\nvar Pipe = (result) => ({\n then: pipeThen(result),\n result: pipeResult(result),\n value: pipeValue(result),\n valueOr: pipeValueOr(result),\n valueOrThrow: pipeValueOrThrow(result)\n});\nvar pipeThen = (result) => (fn) => {\n if (!result.ok) {\n return Pipe(result);\n }\n return Pipe(Ok(fn(result.value)));\n};\nvar pipeResult = (result) => () => result;\nvar pipeValue = (result) => () => GetValue(result);\nvar pipeValueOr = (result) => (or) => GetValue(result) ?? or;\nvar pipeValueOrThrow = (result) => () => {\n if (result.ok) {\n return result.value;\n }\n throw result.error;\n};\nvar AsyncPipe = (result) => ({\n then: asyncPipeThen(result),\n result: asyncPipeResult(result),\n value: asyncPipeValue(result),\n valueOr: asyncPipeValueOr(result),\n valueOrThrow: asyncPipeValueOrThrow(result)\n});\nvar asyncPipeThen = (result) => (fn) => {\n const wrappedPromiseResult = result.then((unwrappedResult) => {\n if (unwrappedResult.ok) {\n try {\n const fnRes = fn(unwrappedResult.value);\n return Promise.resolve(fnRes).catch(Err);\n } catch (err) {\n return Err(err);\n }\n } else {\n return unwrappedResult;\n }\n });\n return AsyncPipe(wrappedPromiseResult);\n};\nvar asyncPipeResult = (result) => () => result;\nvar asyncPipeValue = (result) => async () => {\n try {\n const res = await result;\n if (res.ok) {\n return res.value;\n }\n return;\n } catch {\n return;\n }\n};\nvar asyncPipeValueOr = (result) => async (or) => {\n try {\n const res = await result;\n if (res.ok) {\n return res.value;\n }\n return or;\n } catch {\n return or;\n }\n};\nvar asyncPipeValueOrThrow = (result) => async () => {\n const res = await result;\n if (res.ok) {\n return res.value;\n }\n throw res.error;\n};\nvar ResultStream = (results) => ({\n map: streamMap(results),\n filter: streamFilter(results),\n results: streamResults(results),\n value: streamValue(results),\n valueOr: streamValueOr(results),\n valueOrThrow: streamValueOrThrow(results)\n});\nvar streamMap = (results) => (fn) => {\n if (!results.ok) {\n return ResultStream(results);\n }\n return ResultStream(Ok(results.value.map(fn)));\n};\nvar streamFilter = (results) => (fn) => {\n if (!results.ok) {\n return ResultStream(results);\n }\n return ResultStream(Ok(results.value.filter(fn)));\n};\nvar streamResults = (results) => () => results;\nvar streamValue = (results) => () => results.ok ? results.value : undefined;\nvar streamValueOr = (results) => (or) => results.ok ? results.value : or;\nvar streamValueOrThrow = (results) => () => {\n if (results.ok) {\n return results.value;\n } else {\n throw results.error;\n }\n};\n\n// src/services/Geo.ts\nvar SURF_GEO_SERVICE_URL = \"https://g.surfside.io/enrich\";\nvar LOCATION_TYPE_IP = 2;\nvar IP_SERVICES_MAXMIND = 3;\nvar GetGeo = async (logger, apiToken, ip) => {\n const log2 = Ctx(logger)?.with(\"GeoService\");\n log2?.info(\"Getting Geo info\");\n try {\n const response = await fetch(SURF_GEO_SERVICE_URL);\n log2?.debug(\"Geo Response\", response);\n return Ok(await response.json());\n } catch (err) {\n return Err(err);\n }\n};\nvar GeoContextToORTB = (logger, geoContext) => ({\n lat: geoContext.coords.latitude,\n lon: geoContext.coords.longitude,\n city: geoContext.city,\n region: geoContext.region,\n country: geoContext.country,\n zip: geoContext.zip,\n type: LOCATION_TYPE_IP,\n accuracy: geoContext.coords.accuracy,\n utcoffset: geoContext.utcoffset,\n ipservice: IP_SERVICES_MAXMIND\n});\n// src/services/Device.ts\nvar GetDevice = (logger, screen, navigator2, mobile) => {\n const log2 = Ctx(logger)?.with(\"DeviceService\");\n log2?.info(\"Getting device info\");\n const deviceInfo = getDeviceInfo(log2, navigator2.userAgent);\n const sua = {\n model: deviceInfo?.model,\n mobile: mobile ? 1 : 0,\n browsers: deviceInfo?.browser !== undefined ? [deviceInfo.browser] : undefined,\n platform: deviceInfo?.os !== undefined ? {\n brand: deviceInfo?.os,\n version: deviceInfo?.osv?.split(\".\")\n } : undefined,\n architecture: getCPUArchitecture(log2, navigator2.userAgent, mobile),\n source: 3\n };\n return Ok({\n make: deviceInfo?.make,\n model: deviceInfo?.model,\n w: screen.width,\n h: screen.height,\n language: navigator2.language,\n ua: navigator2.userAgent,\n devicetype: getDeviceType(log2, screen, mobile),\n os: deviceInfo?.os,\n osv: deviceInfo?.osv,\n sua\n });\n};\nvar getDeviceInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"tryGetDeviceInfo\");\n log2?.debug(\"getting device info\");\n const userAgentLower = userAgent.toLowerCase();\n const browser = getBrowserInfo(log2, navigator.userAgent);\n if (userAgentLower.includes(\"android\")) {\n return {\n ...getAndroidDeviceInfo(log2, userAgent),\n browser\n };\n } else if (userAgentLower.includes(\"iphone\") || userAgentLower.includes(\"ipad\")) {\n return {\n ...getiPhoneDeviceInfo(log2, userAgent),\n browser\n };\n } else if (userAgentLower.includes(\"windows nt\")) {\n return {\n make: \"Microsoft\",\n model: \"Windows\",\n os: \"Windows\",\n osv: /Windows NT (?<osv>[0-9.]+)/ig.exec(userAgent)?.groups?.osv,\n browser\n };\n } else if (userAgentLower.includes(\"macintosh\")) {\n return {\n make: \"Apple\",\n model: \"Macintosh\",\n os: \"MacOS\",\n osv: /Mac OS X (?<osv>[0-9_]+)/ig.exec(userAgent)?.groups?.osv?.replaceAll(\"_\", \".\"),\n browser\n };\n }\n return { browser };\n};\nvar getAndroidDeviceInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"getAndroidDeviceInfo\");\n log2?.debug(\"getting android info\");\n const match = /^[^\\s]+\\s\\((?<Linux>.*);\\s*(?<osv>[^)]+);\\s*(?<Model>[^)]+)\\)/ig.exec(userAgent);\n const osv = match?.groups?.osv;\n const model = match?.groups?.Model;\n const partialDevice = {\n os: \"Android\",\n osv,\n model\n };\n if (model !== undefined) {\n if (model.includes(\"Pixel\")) {\n return {\n ...partialDevice,\n make: \"Google\"\n };\n } else if (model.includes(\"SM-\")) {\n return {\n ...partialDevice,\n make: \"Samsung\"\n };\n } else if (model.startsWith(\"LG-\")) {\n return {\n ...partialDevice,\n make: \"LG\"\n };\n } else if (model.startsWith(\"moto\")) {\n return {\n ...partialDevice,\n make: \"Motorola\"\n };\n } else if (model.startsWith(\"Redmi\")) {\n return {\n ...partialDevice,\n make: \"Xiaomi\"\n };\n } else {\n return {\n ...partialDevice,\n make: \"Android\"\n };\n }\n }\n return {\n os: \"Android\",\n osv\n };\n};\nvar getiPhoneDeviceInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"getIphoneDeviceInfo\");\n log2?.debug(\"getting iPhone info\");\n const match = /^[^\\s]+\\s*\\((?<Device>[^;]+);\\s(?<Model>[^;)]+[;)])\\s(?<ModelExt>[^;)]+[;)])?/ig.exec(userAgent);\n const make = \"Apple\";\n const device = match?.groups?.Device;\n const model = device?.toLowerCase().includes(\"ipad\") ? \"iPad\" : \"iPhone\";\n const modelGroup = match?.groups?.Model;\n const os = \"iOS\";\n const osvSearch = modelGroup === \"U\" ? match?.groups?.ModelExt : modelGroup;\n const osv = osvSearch !== undefined ? /OS (?<ver>[0-9_]+)/ig.exec(osvSearch)?.groups?.ModelExt : undefined;\n return {\n make,\n model,\n os,\n osv\n };\n};\nvar getBrowserInfo = (logger, userAgent) => {\n const log2 = Ctx(logger)?.with(\"getBrowserInfo\");\n log2?.debug(\"getting browser info\");\n try {\n if (userAgent.includes(\"Firefox/\")) {\n return {\n version: userAgent.split(\"Firefox/\")[1]?.split(\".\"),\n brand: \"Firefox\"\n };\n } else if (userAgent.includes(\"Chrome/\")) {\n return {\n version: userAgent.split(\"Chrome/\")[1]?.split(\" \")[0]?.split(\".\"),\n brand: \"Chrome\"\n };\n } else if (userAgent.includes(\"CriOS\")) {\n return {\n version: userAgent.split(\"CriOS/\")[1]?.split(\" \")[0]?.split(\".\"),\n brand: \"Chrome\"\n };\n } else if (userAgent.includes(\"Safari/\") && !userAgent.includes(\"Chrome\")) {\n return {\n version: userAgent.split(\"Version/\")[1]?.split(\" \")[0]?.split(\".\"),\n brand: \"Safari\"\n };\n } else if (userAgent.includes(\"Edg/\")) {\n return {\n version: userAgent.split(\"Edg/\")[1]?.split(\".\"),\n brand: \"Edge\"\n };\n }\n } catch (error2) {\n log2?.error(error2);\n }\n};\nvar getCPUArchitecture = (logger, userAgent, mobile) => {\n const log2 = Ctx(logger)?.with(\"getCPUArchitecture\");\n log2?.debug(\"Getting CPU arch\");\n if (/Win64|x64|x86_64|WOW64/.test(userAgent)) {\n return \"x64\";\n }\n if (/Win32|x86/.test(userAgent)) {\n return \"x86\";\n }\n if (/aarch64|arm64/.test(userAgent)) {\n return \"ARM64\";\n }\n if (/armv\\d+/.test(userAgent)) {\n return \"ARM\";\n }\n if (mobile) {\n return \"ARM\";\n }\n log2?.warn(\"Failed to get cpu architecture\");\n return;\n};\nvar getDeviceType = (logger, screen, mobile) => {\n const log2 = Ctx(logger)?.with(\"getDeviceType\");\n log2?.debug(\"getting device type\");\n const MINIMUM_SHORT_TABLET = 600;\n const MAXIMUM_LONG_TABLET = 960;\n const hasTouch = mobile;\n if (!hasTouch) {\n return AdCom10DeviceTypes.PC;\n }\n const width = screen.width;\n const height = screen.height;\n const [shorterSide, longerSide] = [width, height].sort((a, b) => a - b);\n if (hasTouch && shorterSide >= MINIMUM_SHORT_TABLET && longerSide >= MAXIMUM_LONG_TABLET) {\n return AdCom10DeviceTypes.Tablet;\n }\n return AdCom10DeviceTypes.Mobile;\n};\n// src/services/Configuration.ts\nvar GetConfiguration = async (logger, url, handlebars, accountId, siteId) => {\n const log2 = Ctx(logger)?.with(\"ConfigurationService\").with(url).with(accountId).with(siteId);\n log2?.info(\"Getting configuration\");\n try {\n const response = await fetch(`${url}/${accountId}/${siteId}/config.json`);\n if (!response.ok) {\n log2?.error(\"Failed to get configuration\", url, accountId, siteId);\n return Err(new Error(\"Failed to get configuration\"));\n }\n const config = await response.json();\n if (config.settings === undefined || config.templates === undefined) {\n log2?.error(\"configuration was an invalid format\");\n return Err(new Error(\"configuration was an invalid format\"));\n }\n log2?.debug(\"configuration: \", config);\n return await mapConfig(log2, handlebars, config);\n } catch (err) {\n return Err(err);\n }\n};\nvar mapConfig = async (logger, handlebars, config) => {\n const log2 = Ctx(logger)?.with(\"mapConfig\");\n log2?.debug(\"mapping configuration\");\n return Ok({\n settings: config.settings,\n templates: {\n clickThroughUrlTemplate: handlebars.template((await importModule(log2, `export default ${config.templates?.clickThroughUrlTemplate ?? \"\"}`)).default),\n productCardTemplate: handlebars.template((await importModule(log2, `export default ${config.templates?.productCardTemplate ?? \"\"}`)).default),\n javascriptCallbacks: await importModule(log2, config.templates?.javascriptCallbacks ?? \"\"),\n productCardStylesheet: config.templates?.productCardStylesheet,\n carouselStylesheet: config.templates?.carouselStylesheet\n }\n });\n};\nvar importModule = async (logger, script) => {\n const log2 = Ctx(logger)?.with(\"importModule\");\n log2?.debug(\"importing\", script);\n const blob = new Blob([script], { type: \"text/javascript\" });\n const moduleUrl = URL.createObjectURL(blob);\n log2?.debug(\"moduleUrl\", moduleUrl);\n const module = await import(moduleUrl);\n log2?.debug(\"module:\", module);\n return module;\n};\n// src/services/Bidder.ts\nvar AUCTION_PRICE_MACRO = /(?:\\$|%24)?(?:\\{|%7b)auction_price(?:\\}|%7d)/ig;\nvar RequestBids = async (logger, url, accountId, siteId, locationId, channelId, bidRequest) => {\n const log2 = Ctx(logger)?.with(\"RequestBids\").with(accountId).with(siteId).with(locationId).with(channelId);\n log2?.info(\"Requesting bids\");\n log2?.debug(bidRequest);\n try {\n const response = await fetch(url, {\n method: \"POST\",\n body: JSON.stringify(bidRequest)\n });\n log2?.debug(\"Got response\", response);\n if (response.status !== 200) {\n switch (response.status) {\n case 204:\n log2?.warn(\"No bids\", bidRequest, response);\n return Err(new NoBidsError(bidRequest, response));\n case 500:\n log2?.error(\"Bidder failed serverside. Report this error.\", bidRequest, response);\n return Err(new InternalServerError(bidRequest, response));\n case 503:\n log2?.error(\"Bidder starting up. Try again in a few minutes\", bidRequest, response);\n return Err(new BidderStartingUpError(bidRequest, response));\n default:\n log2?.error(\"Unknown bidder error\", bidRequest, response);\n return Err(new UnknownBidderError(bidRequest, response));\n }\n }\n log2?.debug(\"Successfully got bids\", bidRequest);\n const bidResponse = await response.json();\n if (bidResponse.seatbid === undefined || bidResponse.seatbid.length === 0) {\n log2?.error(\"Bidder didn't return any seatbids\");\n return Err(new MalformedBidResponseError(bidRequest, response, bidResponse));\n }\n for (let i = 0;i < bidResponse.seatbid.length; i++) {\n const seatbid = bidResponse.seatbid[i];\n if (seatbid === undefined) {\n log2?.warn(`Seatbid #${i} was undefined`, bidRequest, response, bidResponse);\n continue;\n }\n for (let j = 0;j < seatbid.bid.length; j++) {\n const bid = seatbid.bid[j];\n if (bid === undefined) {\n log2?.warn(`Bid #${j} in seatbid #${i} was undefined`);\n continue;\n }\n try {\n bid.adm = decodeURIComponent(bid?.adm ?? \"\").replaceAll(/\\\\\"/ig, '\"');\n } catch {\n log2?.debug(\"Adm is not encoded. This is not an issue. Moving on.\");\n }\n bid.nurl = bid.nurl?.replace(AUCTION_PRICE_MACRO, bid.price.toString());\n bid.adm = bid.adm?.replaceAll(AUCTION_PRICE_MACRO, bid.price.toString());\n }\n }\n log2?.debug(\"Returning bid responses\");\n return Ok(bidResponse);\n } catch (err) {\n return Err(err);\n }\n};\n\nclass NoBidsError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"204 - No bids available for request\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass InternalServerError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"500 - Bidder had an unknown serverside error\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass BidderStartingUpError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"503 - Bidder is starting up\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass UnknownBidderError extends Error {\n request;\n response;\n constructor(request, response) {\n super(\"Unknown bidder error\");\n this.request = request;\n this.response = response;\n }\n}\n\nclass MalformedBidResponseError extends Error {\n request;\n response;\n bidResponse;\n constructor(request, response, bidResponse) {\n super(\"Malformed bid response error\");\n this.request = request;\n this.response = response;\n this.bidResponse = bidResponse;\n }\n}\n// src/services/Product.ts\nasync function* GetSponsoredProduct(logger, url, accountId, locationId, nativeId) {\n const log2 = Ctx(logger)?.with(\"GetSponsoredProduct\").with(accountId).with(locationId).with(nativeId);\n log2?.info(\"Getting sponsored product\");\n try {\n const rawResponse = await fetch(`${url}/native/${accountId}/${locationId}/${nativeId}.json`);\n if (rawResponse.status !== 200) {\n log2?.error(\"product feed service returned with non-200 response\", rawResponse.status);\n return;\n }\n const products = rawResponse;\n log2?.debug(\"response\", products);\n if (Array.isArray(products)) {\n log2?.debug(\"Brand level creative\");\n const productArr = products;\n for (const product of productArr) {\n yield mapResponseToProductInfo(log2, product);\n }\n } else {\n log2?.debug(\"Individual product creative\");\n const product = products;\n return mapResponseToProductInfo(log2, product);\n }\n } catch (err) {\n log2?.error(err);\n }\n}\nvar GetAllSponsoredProducts = async (logger, url, accountId, locationId, nativeId) => {\n const log2 = Ctx(logger)?.with(\"GetSponsoredProduct\").with(accountId).with(locationId).with(nativeId);\n log2?.info(\"Getting sponsored product\");\n try {\n const rawResponse = await fetch(`${url}/native/${accountId}/${locationId}/${nativeId}.json`);\n if (rawResponse.status !== 200) {\n log2?.error(\"product feed service returned with non-200 response\", rawResponse.status);\n return Err(new NoNativeError(nativeId));\n }\n const products = rawResponse;\n log2?.debug(\"response\", products);\n if (Array.isArray(products)) {\n log2?.debug(\"Brand level creative\");\n const productArr = products;\n const mapResponseToProductInfoLogged = mapResponseToProductInfo.bind(undefined, log2);\n return Ok(productArr.map(mapResponseToProductInfoLogged));\n } else {\n log2?.debug(\"Individual product creative\");\n const product = products;\n return Ok([mapResponseToProductInfo(log2, product)]);\n }\n } catch (err) {\n log2?.error(err);\n return Err(err);\n }\n};\nvar GetRecommendedProduct = async (logger, url, accountId, locationId, productId) => {\n const log2 = Ctx(logger)?.with(\"GetRecommendedProduct\").with(accountId).with(locationId).with(productId);\n log2?.info(\"Getting recommended product\");\n try {\n const rawResponse = await fetch(`${url}product/${accountId}/${locationId}/${productId}.json`);\n if (rawResponse.status !== 200) {\n log2?.error(\"product feed service returned with non-200 response\", rawResponse.status);\n return Err(new Error(\"product feed service returned with non-200 response\"));\n }\n const rawProduct = await rawResponse.json();\n log2?.debug(\"response\", rawProduct);\n const productInfo = mapResponseToProductInfo(log2, rawProduct);\n log2?.debug(\"mapped\", productInfo);\n return Ok(productInfo);\n } catch (err) {\n log2?.error(err);\n return Err(err);\n }\n};\nvar mapResponseToProductInfo = (logger, data) => {\n const log2 = Ctx(logger)?.with(\"mapResponseToProductInfo\");\n log2?.debug(\"Mapping product\");\n const getField = fieldOrUndef.bind(undefined, data);\n return {\n image: getField(\"image_link\"),\n price: getField(\"price\"),\n salePrice: getField(\"sale_price\"),\n thc: getField(\"thc\"),\n cbd: getField(\"cbd\"),\n strain: getField(\"strain\"),\n name: getField(\"name\"),\n brand_name: getField(\"brand\"),\n brandName: getField(\"brand\"),\n productType: getField(\"productType\"),\n details: getField(\"details\"),\n cta: getField(\"cta\"),\n clickthroughUrl: getField(\"clickthroughUrl\"),\n winUrl: getField(\"winUrl\"),\n pixelUrl: getField(\"pixelUrl\"),\n ext: data\n };\n};\nvar fieldOrUndef = (data, field) => {\n if (field in data) {\n return String(data[field]);\n }\n return;\n};\n\nclass NoNativeError extends Error {\n nativeId;\n constructor(nativeId) {\n super(\"Native ID did not exist in product feed: \" + nativeId);\n this.nativeId = nativeId;\n }\n}\n// src/services/Recommender.ts\nasync function* GenerateTopProducts(logger, productFeed, url, accountId, siteId, locationId) {\n const log2 = Ctx(logger)?.with(\"GenerateTopProducts\").with(accountId).with(siteId).with(locationId);\n log2?.info(\"Generating top products\");\n yield* generateProductRecommendation(logger, productFeed, url, accountId, siteId, locationId, undefined, \"top-products\");\n}\nasync function* GenerateForYou(logger, productFeed, url, accountId, siteId, locationId, userId) {\n const log2 = Ctx(logger)?.with(\"GenerateForYou\").with(accountId).with(siteId).with(locationId).with(userId);\n log2?.info(\"Generating for you\");\n yield* generateProductRecommendation(logger, productFeed, url, accountId, siteId, locationId, userId, \"for-you\");\n}\nasync function* GeneratePreviousPurchases(logger, productFeed, url, accountId, siteId, locationId, userId) {\n const log2 = Ctx(logger)?.with(\"GeneratePreviousPurchases\").with(accountId).with(siteId).with(locationId).with(userId);\n log2?.info(\"Generating previous purchases\");\n yield* generateProductRecommendation(log2, productFeed, url, accountId, siteId, locationId, userId, \"buy-again\");\n}\nasync function* generateProductRecommendation(logger, productFeed, url, accountId, siteId, locationId, userId, type) {\n const log2 = Ctx(logger)?.with(\"generatreProductRecommendation\");\n log2?.debug(\"Generating product recommendation\");\n const recommendations = await fetchRecommendations(log2, url, accountId, siteId, locationId, userId, type);\n if (!recommendations.ok) {\n log2?.error(recommendations.error);\n return;\n }\n yield* generateProduct(log2, productFeed, accountId, locationId, recommendations.value);\n log2?.debug(\"out of recommendations\");\n}\nvar fetchRecommendations = async (logger, url, accountId, siteId, locationId, userId, type) => {\n const log2 = Ctx(logger)?.with(\"fetchRecommendations\");\n log2?.debug(\"Fetching recommendations\");\n const key = `accountId=${accountId}&siteId=${siteId}&locationId=${locationId}&userId=${userId ?? \"null\"}`;\n try {\n const results = await fetch(`${url}/r/${type}?${key}&limit=100`);\n if (!results.ok) {\n return Err(new Error(\"Failed to load recommendations. Service returned \" + results.status));\n }\n const recommendations = await results.json();\n const error2 = recommendations.error;\n if (error2 !== undefined) {\n return Err(new Error(error2));\n }\n return Ok(recommendations);\n } catch (err) {\n return Err(err);\n }\n};\nasync function* generateProduct(logger, productFeed, accountId, locationId, results) {\n const log2 = Ctx(logger)?.with(\"generateProduct\");\n log2?.debug(\"generating product info\");\n for (const item of results) {\n const itemId = item.item_id;\n try {\n log2?.debug(\"itemId\", itemId);\n const product = await productFeed(itemId);\n log2?.debug(\"product\", itemId, product);\n if (product.ok) {\n yield product.value;\n } else {\n log2?.warn(\"item was missing from product feed\", itemId);\n }\n } catch (err) {\n log2?.warn(\"couldn't get product\", err);\n }\n }\n log2?.info(\"no more products. Exiting\");\n}\n// src/helpers/NativeRequestBuilder.ts\nvar DEFAULT_LENGTH = 80;\nvar VAST_3_0 = 3;\nvar builderWithVer = (logger, state, ver) => {\n logger?.debug(\"Adding version to native request\", ver);\n return botsBuildBots(logger, { ...state, ver });\n};\nvar builderWithContext = (logger, state, context2) => {\n logger?.debug(\"Adding context to native request\", context2);\n return botsBuildBots(logger, { ...state, context: context2 });\n};\nvar builderWithContextSubType = (logger, state, contextSubType) => {\n logger?.debug(\"Adding context subtype to native request\", contextSubType);\n return botsBuildBots(logger, { ...state, contextSubType });\n};\nvar builderWithPlacementType = (logger, state, placementType) => {\n logger?.debug(\"Adding placement type to native request\", placementType);\n return botsBuildBots(logger, { ...state, placementType });\n};\nvar builderWithTitle = (logger, state, length = DEFAULT_LENGTH, required = true) => {\n logger?.debug(\"Adding title to native request\", length, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Title,\n required: required ? 1 : 0,\n title: {\n len: length\n }\n }\n ]\n });\n};\nvar builderWithImage = (logger, state, width, height, minWidth, minHeight, required = true) => {\n logger?.debug(\"Adding image to native request\", width, height, minWidth, minHeight, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Image,\n required: required ? 1 : 0,\n img: {\n w: width,\n h: height,\n wmin: minWidth,\n hmin: minHeight\n }\n }\n ]\n });\n};\nvar builderWithVideo = (logger, state, mimes, minDuration, maxDuration, required = true) => {\n logger?.debug(\"Adding video to native request\", mimes, minDuration, maxDuration, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id: NativeAssetId.Video,\n required: required ? 1 : 0,\n video: {\n mimes,\n minduration: minDuration,\n maxduration: maxDuration,\n protocols: [VAST_3_0]\n }\n }\n ]\n });\n};\nvar builderWithData = (logger, state, type, id, length = DEFAULT_LENGTH, required = true) => {\n logger?.debug(\"Adding data to request\", type, id, length, required);\n return botsBuildBots(logger, {\n ...state,\n assets: [\n ...state.assets,\n {\n id,\n required: required ? 1 : 0,\n data: {\n type,\n len: length\n }\n }\n ]\n });\n};\nvar passToData = (type, id) => (logger, state, length = DEFAULT_LENGTH, required = true) => builderWithData(logger, state, type, id, length, required);\nvar builderWithSponsored = passToData(NativeDataTypes.Sponsored, NativeAssetId.Sponsored);\nvar builderWithDescription = passToData(NativeDataTypes.Desc, NativeAssetId.Desc);\nvar builderWithRating = passToData(NativeDataTypes.Rating, NativeAssetId.Rating);\nvar builderWithPrice = passToData(NativeDataTypes.Price, NativeAssetId.Price);\nvar builderWithSalePrice = passToData(NativeDataTypes.SalePrice, NativeAssetId.SalePrice);\nvar builderWithDisplayURL = passToData(NativeDataTypes.DisplayURL, NativeAssetId.DisplayURL);\nvar builderWithCTAText = passToData(NativeDataTypes.CTAText, NativeAssetId.CTAText);\nvar builderWithCategory = passToData(NativeDataTypes.SurfCategory, NativeAssetId.SurfCategory);\nvar builderWithTHC = passToData(NativeDataTypes.SurfTHC, NativeAssetId.SurfTHC);\nvar builderWithCBD = passToData(NativeDataTypes.SurfCBD, NativeAssetId.SurfCBD);\nvar builderWithStrain = passToData(NativeDataTypes.SurfStrain, NativeAssetId.SurfStrain);\nvar builderWithMetaProduct = passToData(NativeDataTypes.SurfMetaProduct, NativeAssetId.SurfMetaProduct);\nvar builderWithEventTracker = (logger, state, event, methods) => {\n logger?.debug(\"Adding event tracker to big request\");\n return botsBuildBots(logger, {\n ...state,\n eventTrackers: [\n ...state.eventTrackers,\n {\n event,\n methods\n }\n ]\n });\n};\nvar builderBuild = (logger, state) => {\n logger?.debug(\"Building bid request\", state);\n return {\n ver: state.ver,\n context: state.context,\n contextsubtype: state.contextSubType,\n assets: state.assets,\n eventtrackers: state.eventTrackers\n };\n};\nvar botsBuildBots = (logger, state) => ({\n withVer: builderWithVer.bind(undefined, logger, state),\n withContext: builderWithContext.bind(undefined, logger, state),\n withContextSubType: builderWithContextSubType.bind(undefined, logger, state),\n withPlacementType: builderWithPlacementType.bind(undefined, logger, state),\n withTitle: builderWithTitle.bind(undefined, logger, state),\n withImage: builderWithImage.bind(undefined, logger, state),\n withVideo: builderWithVideo.bind(undefined, logger, state),\n withData: builderWithData.bind(undefined, logger, state),\n withSponsored: builderWithSponsored.bind(undefined, logger, state),\n withDescription: builderWithDescription.bind(undefined, logger, state),\n withRating: builderWithRating.bind(undefined, logger, state),\n withPrice: builderWithPrice.bind(undefined, logger, state),\n withSalePrice: builderWithSalePrice.bind(undefined, logger, state),\n withDisplayURL: builderWithDisplayURL.bind(undefined, logger, state),\n withCTAText: builderWithCTAText.bind(undefined, logger, state),\n withCategory: builderWithCategory.bind(undefined, logger, state),\n withTHC: builderWithTHC.bind(undefined, logger, state),\n withCBD: builderWithCBD.bind(undefined, logger, state),\n withStrain: builderWithStrain.bind(undefined, logger, state),\n withMetaProduct: builderWithMetaProduct.bind(undefined, logger, state),\n withEventTracker: builderWithEventTracker.bind(undefined, logger, state),\n build: builderBuild.bind(undefined, logger, state)\n});\nvar StartNative = (logger) => {\n const log2 = Ctx(logger)?.with(\"StartNative\");\n return botsBuildBots(log2, {\n assets: [],\n eventTrackers: []\n });\n};\nvar DefaultNative = (logger) => {\n const log2 = Ctx(logger)?.with(\"DefaultNative\");\n return StartNative(log2).withVer(\"1.2\").withContext(ContextTypes.Product).withContextSubType(ContextSubTypes.Product).withPlacementType(PlacementTypes.InFeed).withEventTracker(EventTypes.Imp, [EventTrackingMethods.Img, EventTrackingMethods.Img]);\n};\n// src/helpers/RequestBuilder.ts\nvar SURF_EID_SOURCE = \"surf-domain-id\";\nfunction StartRequest(logger, accountId, siteId, channelId, locationId, device, geo, userId, zoneId, id) {\n const log2 = Ctx(logger)?.with(\"StartRequest\").with(accountId).with(siteId).with(channelId).with(locationId).with(id);\n log2?.info(\"Starting request\");\n return botsBuildBots2(logger, {\n context: {\n accountId,\n siteId,\n channelId,\n locationId,\n zoneId,\n storeId: locationId,\n placementId: zoneId\n },\n geo,\n device,\n id,\n user: userId !== undefined ? {\n eids: [{\n source: SURF_EID_SOURCE,\n uids: [{\n id: userId,\n atype: AgentTypes.Session\n }]\n }]\n } : undefined,\n imp: []\n });\n}\nvar builderWithUser = (logger, state, user) => {\n logger?.debug(\"Adding user to request\", user);\n return botsBuildBots2(logger, {\n ...state,\n user: {\n ...user,\n eids: [\n ...state.user?.eids !== undefined ? state.user.eids : [],\n ...user.eids !== undefined ? user.eids : []\n ]\n }\n });\n};\nvar builderWithRegulations = (logger, state, regs) => {\n logger?.debug(\"Added regulations to request\", regs);\n return botsBuildBots2(logger, { ...state, regs });\n};\nvar builderWithApp = (logger, state, app) => {\n logger?.debug(\"Adding app to request\");\n return botsBuildBots2(logger, { ...state, app });\n};\nvar builderWithBanner = (logger, state, w, h, options, impOptions) => {\n logger?.debug(\"Addig banner to request\", w, h, options, impOptions);\n return botsBuildImp(logger, state, {\n id: generateId(),\n banner: {\n w,\n h,\n ...options\n },\n ...impOptions\n });\n};\nvar builderWithVideo2 = (logger, state, w, h, minduration, maxduration, mimes, options, impOptions) => {\n logger?.debug(\"Adding video to request\", w, h, minduration, maxduration, mimes, options, impOptions);\n return botsBuildImp(logger, state, {\n id: generateId(),\n video: {\n w,\n h,\n mimes: mimes ?? [\"video/mp4\", \"video/webm\"],\n minduration,\n maxduration,\n ...options\n },\n ...impOptions\n });\n};\nvar builderWithKeywords = (logger, state, keywords) => {\n logger?.debug(\"Adding keyword to request\", keywords);\n return botsBuildBots2(logger, {\n ...state,\n context: {\n ...state.context,\n keywords\n }\n });\n};\nvar builderWithNative = (logger, state, request, options, impOptions) => {\n logger?.debug(\"Adding native to request\", request, options, impOptions);\n return typeof request === \"string\" ? builderWithNativeStr(logger, state, request, options, impOptions) : builderWithNativeStr(logger, state, JSON.stringify(request), options, impOptions);\n};\nvar builderWithNativeStr = (logger, state, request, options, impOptions) => botsBuildImp(logger, state, {\n id: generateId(),\n native: {\n ver: \"1.2\",\n request,\n ...options\n },\n ...impOptions\n});\nvar builderBuild2 = (logger, state) => {\n logger?.debug(\"Building request\", state);\n return {\n id: state.id ?? generateId(),\n imp: state.imp.map((imp) => ({\n ...imp,\n ext: imp.ext === undefined ? undefined : { ...imp.ext, ...state.context }\n })),\n device: {\n ...state.device,\n geo: state.geo === undefined ? undefined : GeoContextToORTB(undefined, state.geo)\n },\n user: state.user,\n app: state.app,\n site: state.site,\n ext: state.context\n };\n};\nvar botsBuildBots2 = (logger, state) => ({\n withUser: builderWithUser.bind(undefined, logger, state),\n withRegulations: builderWithRegulations.bind(undefined, logger, state),\n withBanner: builderWithBanner.bind(undefined, logger, state),\n withVideo: builderWithVideo2.bind(undefined, logger, state),\n withNative: builderWithNative.bind(undefined, logger, state),\n withApp: builderWithApp.bind(undefined, logger, state),\n withKeywords: builderWithKeywords.bind(undefined, logger, state),\n build: builderBuild2.bind(undefined, logger, state)\n});\nvar botsBuildImp = (logger, state, imp) => botsBuildBots2(logger, { ...state, imp: [...state.imp, imp] });\nvar generateId = () => crypto.randomUUID();\n// src/helpers/response/BuiltResponse.ts\nvar CreativeType = {\n Banner: 0,\n Video: 1,\n ProductCard: 2,\n Carousel: 3\n};\n\nclass MissingAdmError extends Error {\n bid;\n constructor(bid) {\n super(\"Cannot build creative; missing adm field\");\n this.bid = bid;\n }\n}\n\nclass MissingProductError extends Error {\n bid;\n constructor(bid) {\n super(\"Could not find product data for creative while building clickthrough URL. Some data fields are missing\");\n this.bid = bid;\n }\n}\n// src/helpers/response/Clickthrough.ts\nvar BuildClickthroughUrl = (logger, windowInfo, configuration, product) => {\n const log2 = Ctx(logger)?.with(\"BuildClickthroughUrl\");\n log2?.info(\"Building clickthrough URL\");\n log2?.debug(windowInfo, product, configuration);\n try {\n return Ok(configuration.templates.clickThroughUrlTemplate({\n product,\n catalog: product,\n window: windowInfo,\n publisher: configuration,\n ...product\n }, {\n helpers: GetHelpers()\n }));\n } catch (e) {\n log2?.error(\"Failed to execute clickthrough URL template\", product, configuration, windowInfo);\n return Err(e);\n }\n};\n// src/helpers/Generator.ts\nvar ConsumeN = (generator, n) => {\n const consumed = [];\n for (let i = 0;i < n; i++) {\n const value = generator.next();\n if (value.done) {\n break;\n }\n consumed.push(value.value);\n }\n return consumed;\n};\nvar ConsumeAll = (generator) => {\n const consumed = [];\n for (const value of generator) {\n consumed.push(value);\n }\n return consumed;\n};\nvar ConsumeNAsync = async (generator, n) => {\n const consumed = [];\n while (consumed.length < n) {\n const result = await generator.next();\n if (result.done) {\n break;\n }\n consumed.push(result.value);\n }\n return consumed;\n};\nvar ConsumeAllAsync = async (generator) => {\n const consumed = [];\n for await (const value of generator) {\n consumed.push(value);\n }\n return consumed;\n};\nfunction* GenerateArray(data) {\n for (const t of data) {\n yield t;\n }\n}\n\n// src/helpers/TryGet.ts\nvar TryGet = (get) => {\n try {\n return Ok(get());\n } catch (error2) {\n return Err(error2);\n }\n};\n\n// src/helpers/response/ProductCard.ts\nvar BuildAllSponsoredProductCardResponses = async (logger, getAllSponsoredProducts, windowInfo, configuration, bids) => {\n const log2 = Ctx(logger)?.with(\"BuildProductCardResponse\");\n log2?.info(\"Building product card responses\");\n if (bids === undefined || bids === null) {\n return Err(new MissingBidsError);\n }\n const bidPromises = bids.map(buildAllProductCardResponsesFromBid.bind(undefined, log2, getAllSponsoredProducts, windowInfo, configuration));\n const productCardResponseResults = await Promise.allSettled(bidPromises);\n productCardResponseResults.filter((res) => res.status === \"rejected\").map((res) => res.reason).forEach((err) => log2?.warn(err));\n const fulfilled = productCardResponseResults.filter((res) => res.status === \"fulfilled\");\n fulfilled.filter((res) => !res.value.ok).map((res) => res.value).map((res) => res.error).forEach((err) => log2?.warn(err));\n return Ok(productCardResponseResults.filter((res) => res.status === \"fulfilled\").filter((res) => res.value.ok).map((res) => res.value).flatMap((res) => res.value));\n};\nasync function* GenerateSponsoredProductCardResponse(logger, getAllSponsoredProducts, windowInfo, configuration, bids) {\n const log2 = Ctx(logger)?.with(\"GenerateProductCardResponse\");\n log2?.info(\"Entering product card response generator\", bids);\n for (const bid of bids) {\n log2?.info(\"Generating product card response\", bid);\n const result = await buildAllProductCardResponsesFromBid(log2, getAllSponsoredProducts, windowInfo, configuration, bid);\n if (!result.ok) {\n log2?.warn(result.error);\n continue;\n }\n yield* GenerateArray(result.value);\n }\n}\nvar getField = (native) => (id) => native.native.assets?.find((asset) => asset.id === id)?.data?.value;\nvar getTrackers = (logger, bid, native) => {\n const log2 = Ctx(logger)?.with(\"getTrackers\");\n log2?.info(\"Getting trackers\");\n const win = bid.nurl;\n if (win === undefined) {\n return Err(new MissingWinUrlError(bid));\n }\n const imp = native.native.eventtrackers?.filter((tracker) => tracker.event === EventTypes.Imp && tracker.method === EventTrackingMethods.Img).map((tracker) => tracker.url).filter((url) => url !== undefined) ?? [];\n const others = native.native.eventtrackers?.filter((tracker) => tracker.url !== undefined).map((tracker) => ({\n type: tracker.method,\n url: tracker.url\n })) ?? [];\n return Ok({ win, imp, others });\n};\nvar fetchProductsFromBid = async (logger, getAllSponsoredProducts, bid) => {\n try {\n const log2 = Ctx(logger)?.with(\"fetchProductsFromBid\");\n log2?.info(\"Fetching products from IBid\");\n const productCardResponses = [];\n if (bid.adm === undefined) {\n log2?.warn(\"Bid is missing ADM\", bid);\n return Err(new MissingAdmError(bid));\n }\n const adm = bid.adm;\n const nativeRes = TryGet(() => JSON.parse(adm));\n if (!nativeRes.ok) {\n log2?.error(\"Bid adm failed to deserialize\", bid, adm);\n return Err(new MalformedNativeResponseError(bid));\n }\n const native = nativeRes.value;\n const metaProductId = getField(native)(NativeAssetId.SurfMetaProduct);\n if (metaProductId === undefined) {\n return Err(new MissingProductIdError(bid, native));\n }\n const productRes = await getAllSponsoredProducts(metaProductId);\n if (!productRes.ok) {\n return productRes;\n }\n return Ok({\n products: productRes.value,\n native\n });\n } catch (err) {\n return Err(err);\n }\n};\nfunction* buildProductCardResponseFromProductInfo(logger, windowInfo, configuration, bid, native, products) {\n const log2 = Ctx(logger)?.with(\"buildProductCardResponseFromProductInfo\");\n for (const product of products) {\n const clickthrough = BuildClickthroughUrl(log2, windowInfo, configuration, product);\n if (!clickthrough.ok) {\n return clickthrough;\n }\n const trackers = getTrackers(log2, bid, native);\n if (!trackers.ok) {\n return trackers;\n }\n const finalClickthrough = TryDo(() => {\n const bidderClickthrough = new URL(native.native.link.url);\n bidderClickthrough.searchParams.set(\"url\", clickthrough.value);\n return bidderClickthrough.toString();\n });\n if (!finalClickthrough.ok) {\n return finalClickthrough;\n }\n yield {\n type: 2,\n native,\n product,\n bid,\n clickthrough: finalClickthrough.value,\n trackers: trackers.value,\n sponsored: true\n };\n }\n}\nvar buildAllProductCardResponsesFromBid = async (logger, getAllSponsoredProducts, windowInfo, configuration, bid) => {\n const log2 = Ctx(logger)?.with(\"buildAllProductCardResponseBids\");\n log2?.info(\"Building all product card responses\");\n try {\n return Ok(await ConsumeAllAsync(generateProductCardResponseFromBid(log2, getAllSponsoredProducts, windowInfo, configuration, bid)));\n } catch (err) {\n return Err(err);\n }\n};\nasync function* generateProductCardResponseFromBid(logger, getAllSponsoredProducts, windowInfo, configuration, bid) {\n const log2 = Ctx(logger)?.with(\"generateProductCardResponseFromBid\");\n log2?.info(\"generating product card response from bid\");\n try {\n const productResult = await fetchProductsFromBid(log2, getAllSponsoredProducts, bid);\n if (!productResult.ok) {\n log2?.info(\"No products!\");\n return productResult;\n }\n const { products, native } = productResult.value;\n const builtProductCardResponses = [];\n yield* buildProductCardResponseFromProductInfo(log2, windowInfo, configuration, bid, native, products);\n } catch (err) {\n return;\n }\n}\n\nclass MissingBidsError extends Error {\n constructor() {\n super(\"Unable to build product cards - no bids were provided\");\n }\n}\n\nclass MalformedNativeResponseError extends Error {\n bid;\n constructor(bid) {\n super(\"Unable to build product card - missing native response\");\n this.bid = bid;\n }\n}\n\nclass MissingWinUrlError extends Error {\n bid;\n constructor(bid) {\n super(\"Unable to build product card - no win URL was provided\");\n this.bid = bid;\n }\n}\n\nclass MissingProductIdError extends Error {\n bid;\n native;\n constructor(bid, native) {\n super(\"Unable to build product card - no product ID was provided\");\n this.bid = bid;\n this.native = native;\n }\n}\n// src/helpers/Handlebars.ts\nvar DEFAULT_MAX_SLUG = 5;\nfunction slug(name, options) {\n if (name === undefined || name === null || typeof name !== \"string\") {\n return \"\";\n }\n const hyphenate = options.hash.hyphenate !== undefined ? new RegExp(options.hash.hyphenate, \"ig\") : /[\\s_\\-,]/ig;\n const drop = options.hash.drop !== undefined ? new RegExp(options.hash.drop, \"ig\") : /[^A-Za-z0-9-]/ig;\n const dropBefore = options.hash.dropBefore !== undefined ? new RegExp(options.hash.dropBefore) : undefined;\n const maxSlug = options.hash.length ?? DEFAULT_MAX_SLUG;\n const separator = options.hash.separator ?? \"-\";\n if (dropBefore !== undefined) {\n name = name.replace(dropBefore, \"\");\n }\n return name.replace(hyphenate, separator).replace(drop, \"\").toLowerCase().split(separator).slice(0, maxSlug).join(separator);\n}\nfunction lower(name) {\n if (name === undefined || name === null || typeof name !== \"string\") {\n return \"\";\n }\n return name.toLowerCase();\n}\nfunction path(position) {\n if (position === 0 || position === undefined || position === null) {\n return \"\";\n }\n const paths = window.location.pathname.split(\"/\");\n if (paths.length <= position) {\n return \"\";\n }\n return paths[position];\n}\nfunction sed(input, searchRegex, replacement) {\n return input.replace(new RegExp(searchRegex), (...args) => {\n const END = -2;\n const groups = args.slice(1, END);\n let result = replacement;\n result = result.replace(/\\\\(\\d+)/g, (_, groupIndex) => groups[groupIndex - 1] ?? \"\");\n result = result.replace(/\\\\U(\\d+)/g, (_, groupIndex) => (groups[groupIndex - 1] ?? \"\").toUpperCase());\n result = sedCommand(result, \"U\", groups, (str) => str?.toUpperCase());\n result = sedCommand(result, \"L\", groups, (str) => str?.toLowerCase());\n result = sedCommand(result, \"I\", groups, (str) => str?.[0]);\n return result ?? \"\";\n });\n}\nfunction sedCommand(input, char, groups, transform) {\n if (input === undefined) {\n return;\n }\n return input.replace(new RegExp(`\\\\\\\\${char}(\\\\d+)`, \"g\"), (_, groupIndex) => transform(groups[groupIndex - 1] ?? \"\") ?? \"\");\n}\nfunction search(name) {\n if (name?.length === undefined || name.length === 0) {\n return \"\";\n }\n const search2 = window.location.search;\n if (search2.length === 0) {\n return \"\";\n }\n const params = new URLSearchParams(search2);\n return params.get(name) ?? \"\";\n}\nfunction coalesce() {\n for (let i = 0;i < arguments.length - 1; i++) {\n const arg = arguments[i];\n if (arg !== null && arg !== undefined && arg !== \"\" && arg !== false) {\n return arg;\n }\n }\n return \"\";\n}\nfunction join() {\n const args = [...arguments].slice(0, arguments.length - 1);\n const options = arguments[arguments.length - 1];\n const separator = options.hash.separator ?? \"/\";\n return args.filter((arg) => arg !== undefined && arg !== null && arg !== \"\").join(separator);\n}\nfunction uri(component) {\n if (component?.length === undefined || component.length === 0) {\n return \"\";\n }\n const encoded = encodeURIComponent(component);\n return encoded.replaceAll(\"'\", \"%27\");\n}\nfunction eq(a, b) {\n return a === b;\n}\nfunction or(a, b) {\n return Boolean(a) || Boolean(b);\n}\nfunction and(a, b) {\n return Boolean(a) && Boolean(b);\n}\nfunction isIn(a, b) {\n if (b?.length === undefined || b.length === 0) {\n return false;\n }\n return b.includes(a);\n}\nfunction array() {\n return Array.from(arguments).slice(0, -1);\n}\nvar GetHelpers = () => ({\n slug,\n lower,\n path,\n sed,\n replace: sed,\n search,\n coalesce,\n join,\n get_first: coalesce,\n uri,\n or,\n and,\n isIn,\n array\n});\n// src/Api.ts\nvar import_runtime = __toESM(require_runtime2(), 1);\n\n// src/helpers/response/Carousel.ts\nvar BuildSponsoredCarousel = (logger, requestBids, generateProductCardResponse, request) => {\n const log2 = Ctx(logger)?.with(\"BuildSponsoredCarousel\");\n log2?.info(\"Building sponsored carousel\");\n return Ok({\n type: 3,\n getProduct: getNextSponsoredCarouselProduct.bind(undefined, log2, requestBids, generateProductCardResponse, request)\n });\n};\nvar BuildRecommendedCarousel = (logger, windowInfo, config, topProductGenerator, forYouProductGenerator, pastPurchasesProductGenerator, userId, recommenderType) => {\n switch (recommenderType.type) {\n case \"top-products\": {\n return buildRecommendedCarouselInternal(logger, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator\n });\n }\n case \"for-you\": {\n return buildRecommendedCarouselInternal(logger, windowInfo, config, {\n recommenderType: \"for-you\",\n forYouProductGenerator,\n topProductGenerator,\n userId\n });\n }\n case \"past-purchases\": {\n return buildRecommendedCarouselInternal(logger, windowInfo, config, {\n recommenderType: \"past-purchases\",\n pastPurchasesProductGenerator,\n topProductGenerator,\n userId\n });\n }\n }\n};\nvar buildRecommendedCarouselInternal = (logger, windowInfo, config, recommenderType) => {\n const log2 = Ctx(logger)?.with(\"buildRecommendedCarouselInternal\");\n log2?.info(\"Building Recommended Carousel\");\n return Ok({\n type: 3,\n getProduct: getNextRecommendedCarouselProduct.bind(undefined, log2, windowInfo, config, recommenderType)\n });\n};\nvar BuildHybridCarousel = (logger, windowInfo, config, requestBids, generateProductCardResponse, topProductGenerator, forYouProductGenerator, pastPurchasesProductGenerator, userId, request, recommenderType) => {\n switch (recommenderType.type) {\n case \"top-products\": {\n return buildHybridCarouselInternal(logger, windowInfo, config, requestBids, generateProductCardResponse, request, {\n recommenderType: \"top-products\",\n topProductGenerator\n });\n }\n case \"for-you\": {\n return buildHybridCarouselInternal(logger, windowInfo, config, requestBids, generateProductCardResponse, request, {\n recommenderType: \"for-you\",\n forYouProductGenerator,\n topProductGenerator,\n userId\n });\n }\n case \"past-purchases\": {\n return buildHybridCarouselInternal(logger, windowInfo, config, requestBids, generateProductCardResponse, request, {\n recommenderType: \"past-purchases\",\n pastPurchasesProductGenerator,\n topProductGenerator,\n userId\n });\n }\n }\n};\nvar buildHybridCarouselInternal = (logger, windowInfo, config, requestBids, generateProductCardResponse, request, recommenderType) => {\n const log2 = Ctx(logger)?.with(\"BuildHybridCarousel\");\n log2?.info(\"Building hybrid carousel\", request, recommenderType);\n return Ok({\n type: 3,\n getProduct: getNextHybridCarouselProduct.bind(undefined, log2, windowInfo, config, requestBids, generateProductCardResponse, request, recommenderType)\n });\n};\nasync function* getNextHybridCarouselProduct(logger, windowInfo, config, requestBids, generateProductCardResponse, request, recommenderType) {\n const log2 = Ctx(logger)?.with(\"getNextHybridCarouselProduct\");\n log2?.info(\"Entering hybrid carousel product generator\");\n yield* getNextSponsoredCarouselProduct(log2, requestBids, generateProductCardResponse, request);\n log2?.info(\"Done getting next sponsoredCarouselProduct\");\n yield* getNextRecommendedCarouselProduct(log2, windowInfo, config, recommenderType);\n}\nasync function* getNextSponsoredCarouselProduct(logger, requestBids, generateProductCardResponse, request) {\n const log2 = Ctx(logger)?.with(\"getNextSponsoredCarouselProduct\");\n try {\n log2?.info(\"Entering sponsored carousel product generator\");\n log2?.info(\"Getting next sponsored carousel products\", request);\n const response = await requestBids(request);\n if (!response.ok) {\n log2?.info(\"No response from bidder\", response.error);\n return;\n }\n const bids = response.value.seatbid?.[0]?.bid;\n if (bids === undefined) {\n log2?.info(\"Got no bids in response!\");\n return;\n }\n const generator = generateProductCardResponse(bids);\n for await (const product of generator) {\n log2?.debug(\"Getting next product from existing bidder response\", product);\n yield product;\n }\n log2?.debug(\"Out of bids from previous response. Requesting new bid response\");\n return;\n } catch (err) {\n log2?.error(\"product carousel generator failed! Got\", err);\n } finally {\n log2?.warn(\"Exiting carousel product generator\");\n }\n}\nasync function* getNextRecommendedCarouselProduct(logger, windowInfo, config, recommenderType) {\n const log2 = Ctx(logger)?.with(\"getNextRecommendedCarouselProduct\");\n log2?.info(\"Entering recommended carousel product generator\");\n log2?.info(\"Getting next recommended carousel product\");\n switch (recommenderType.recommenderType) {\n case \"top-products\": {\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, recommenderType);\n return;\n }\n case \"for-you\": {\n if (recommenderType.userId !== undefined) {\n yield* getNextForYouRecommendedCarouselProduct(log2, windowInfo, config, recommenderType, recommenderType.userId);\n }\n break;\n }\n case \"past-purchases\": {\n if (recommenderType.userId !== undefined) {\n yield* getNextPastPurchasesRecommendedCarouselProduct(log2, windowInfo, config, recommenderType, recommenderType.userId);\n }\n break;\n }\n }\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator: recommenderType.topProductGenerator\n });\n}\nasync function* getNextTopAllRecommendedCarouselProduct(logger, windowInfo, config, recommenderType) {\n const log2 = Ctx(logger)?.with(\"getNextTopAllRecommendedCarouselProduct\");\n log2?.info(\"Getting next top all product\");\n for await (const product of recommenderType.topProductGenerator()) {\n const built = recommendedProductToBuiltProduct(log2, windowInfo, config, product);\n if (!built.ok) {\n log2?.warn(\"Failed to build product response from recommended product. Skipping this one\", product);\n continue;\n }\n yield built.value;\n }\n}\nasync function* getNextForYouRecommendedCarouselProduct(logger, windowInfo, config, recommenderType, userId) {\n const log2 = Ctx(logger)?.with(\"getNextForYouRecommendedCarouselProduct\");\n log2?.info('Getting next \"for-you\" recommended product');\n for await (const product of recommenderType.forYouProductGenerator(userId)) {\n const built = recommendedProductToBuiltProduct(log2, windowInfo, config, product);\n if (!built.ok) {\n log2?.warn(\"Failed to build product response from recommended product. Skipping this one\", product);\n continue;\n }\n yield built.value;\n }\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator: recommenderType.topProductGenerator\n });\n}\nasync function* getNextPastPurchasesRecommendedCarouselProduct(logger, windowInfo, config, recommenderType, userId) {\n const log2 = Ctx(logger)?.with(\"getNextPastPurchasesRecommendedCarouselProduct\");\n log2?.info('Getting next \"buy-again\" recommended product');\n for await (const product of recommenderType.pastPurchasesProductGenerator(userId)) {\n const built = recommendedProductToBuiltProduct(log2, windowInfo, config, product);\n if (!built.ok) {\n log2?.warn(\"Failed to build product response from recommended product. Skipping this one\", product);\n continue;\n }\n yield built.value;\n }\n yield* getNextTopAllRecommendedCarouselProduct(log2, windowInfo, config, {\n recommenderType: \"top-products\",\n topProductGenerator: recommenderType.topProductGenerator\n });\n}\nvar recommendedProductToBuiltProduct = (logger, windowInfo, config, product) => {\n const log2 = Ctx(logger)?.with(\"recommendedProductToBuiltProduct\");\n log2?.info(\"Converting recommended product to built product card response\");\n const clickthrough = BuildClickthroughUrl(log2, windowInfo, config, product);\n if (!clickthrough.ok) {\n return clickthrough;\n }\n return Ok({\n type: 2,\n clickthrough: clickthrough.value + \"_recommended\",\n product,\n sponsored: false\n });\n};\n\n// src/Api.ts\nvar PROD_BIDDER = \"//bid.surfside.io\";\nvar PROD_CONFIGURATION_SERVICE = \"//r.surfside.io\";\nvar PROD_SPONSORED_PRODUCT_FEED = \"//creative.surfside.io\";\nvar PROD_RECOMMENDED_PRODUCT_FEED = \"//creative.surfside.io\";\nvar PROD_RECOMMENDER_SERVICE = \"//t.surfside.io\";\nvar TLS = (url) => \"https:\" + url;\nasync function InitSurfAdsCoreInternal(logger, requestBids, getConfiguration, getGeo, getDevice, getSponsoredProduct, getAllSponsoredProducts, getRecommendedProduct, generateTopProducts, generateForYou, generatePreviousPurchases, buildAllSponsoredProductCardResponses, generateSponsoredProductCardResponse, handlebars, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId) {\n const device = getDevice(screen, navigator2, mobile);\n const geo = await getGeo(ip, geoProviderToken);\n const configuration = await getConfiguration();\n if (!configuration.ok) {\n return Err(new MissingConfigurationError(accountId, siteId));\n }\n const startRequest = StartRequest.bind(undefined, logger, accountId, siteId, channelId, locationId, GetValue(device), GetValue(geo), userId);\n const startNative = StartNative.bind(undefined, logger);\n const defaultNative = DefaultNative.bind(undefined, logger);\n return Ok({\n logger,\n getDevice,\n device: GetValue(device),\n getGeo,\n geo: GetValue(geo),\n configuration: configuration.value,\n getConfiguration,\n handlebars,\n requestBids,\n startRequest,\n startNative,\n defaultNative,\n getSponsoredProduct,\n getAllSponsoredProducts,\n getRecommendedProduct,\n generateTopProducts,\n generateForYou,\n generatePreviousPurchases,\n buildAllSponsoredProductCardResponses,\n generateSponsoredProductCardResponse,\n buildSponsoredCarousel: BuildSponsoredCarousel.bind(undefined, logger, requestBids, generateSponsoredProductCardResponse),\n buildRecommendedCarousel: BuildRecommendedCarousel.bind(undefined, logger, windowInfo, configuration.value, generateTopProducts, generatePreviousPurchases, generateForYou, userId),\n buildHybridCarousel: BuildHybridCarousel.bind(undefined, logger, windowInfo, configuration.value, requestBids, generateSponsoredProductCardResponse, generateTopProducts, generatePreviousPurchases, generateForYou, userId)\n });\n}\nvar InitSurfAdsCoreServices = async (logger, bidderServiceUrl, configurationServiceUrl, productFeedUrl, recommendedProductFeedUrl, recommenderServiceUrl, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId) => {\n const handlebars = import_runtime.default.create();\n const recommendedProductFeed = GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId);\n const configurationService = GetConfiguration.bind(undefined, logger, configurationServiceUrl, handlebars, accountId, siteId);\n const configuration = await configurationService();\n if (!configuration.ok) {\n return configuration;\n }\n const getAllSponsoredProducts = GetAllSponsoredProducts.bind(undefined, logger, productFeedUrl, accountId, locationId);\n const generateProductCardResponse = GenerateSponsoredProductCardResponse.bind(undefined, logger, getAllSponsoredProducts, windowInfo, configuration.value);\n return await InitSurfAdsCoreInternal(logger, RequestBids.bind(undefined, logger, bidderServiceUrl, accountId, siteId, locationId, channelId), configurationService, GetGeo.bind(undefined, logger), GetDevice.bind(undefined, logger), GetSponsoredProduct.bind(undefined, logger, productFeedUrl, accountId, locationId), getAllSponsoredProducts, GetRecommendedProduct.bind(undefined, logger, recommendedProductFeedUrl, accountId, locationId), GenerateTopProducts.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId), GenerateForYou.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId, userId ?? \"undefined\"), GeneratePreviousPurchases.bind(undefined, logger, recommendedProductFeed, recommenderServiceUrl, accountId, siteId, locationId, userId ?? \"undefined\"), BuildAllSponsoredProductCardResponses.bind(undefined, logger, getAllSponsoredProducts, windowInfo, configuration.value), generateProductCardResponse, handlebars, windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);\n};\nvar InitSurfAdsCoreSSR = async (windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId, logger) => InitSurfAdsCoreServices(logger, TLS(PROD_BIDDER), TLS(PROD_CONFIGURATION_SERVICE), TLS(PROD_SPONSORED_PRODUCT_FEED), TLS(PROD_RECOMMENDED_PRODUCT_FEED), TLS(PROD_RECOMMENDER_SERVICE), windowInfo, screen, navigator2, mobile, ip, geoProviderToken, accountId, siteId, channelId, locationId, userId);\nvar InitSurfAdsCore = async (accountId, siteId, channelId, locationId, userId, logger) => {\n const windowInfo = GetWindowInfo();\n if (!windowInfo.ok) {\n return windowInfo;\n }\n return InitSurfAdsCoreServices(logger, TLS(PROD_BIDDER), TLS(PROD_CONFIGURATION_SERVICE), TLS(PROD_SPONSORED_PRODUCT_FEED), TLS(PROD_RECOMMENDED_PRODUCT_FEED), TLS(PROD_RECOMMENDER_SERVICE), windowInfo.value, window.screen, window.navigator, isMobile(), undefined, undefined, accountId, siteId, channelId, locationId, userId);\n};\n\nclass MissingConfigurationError extends Error {\n constructor(accountId, siteId) {\n super(`Missing configuration for\n` + ` accountId: ${accountId}\n` + ` siteId: ${siteId}\n` + \"1. Check to make sure that these are the correct values for each field\" + \"2. Check your publisher configuration at \" + `https://app.surfside.io/inventory/sites/publisher/${accountId}/${siteId}`);\n }\n}\n\nclass NotABrowserError extends Error {\n constructor() {\n super('You are not running Surfside Ads Core in a Web browser, so you cannot use \"InitSurfAdsCore\". ' + \"Instead, use InitSurfAdsCoreSSR, and pass the user's screen, navigator, and IP address explicitly \" + `so that Surfside Ads Core can initialize geo and device information services. e.g: \n` + ` InitSurfAdsCoreSSR(\n` + ` /* width and height of the user's screen: */\n` + ` { width: screenWidth, height: screenHeight },\n` + ` /* userAgent string and language of the user: */\n` + ` { userAgent: userAgent, language: userLanguage },\n` + ` /* whether the user is on mobile or not: */\n` + ` true,\n` + ` /* the requesting User's IP */\n` + ` request.ipAddress,\n` + ` /* Your API Token for the Surfside Geo Service: */\n` + ` geoProviderToken,\n` + ` accountId,\n` + ` siteId,\n` + ` channelId,\n` + ` locationId,\n` + ` userId,\n` + ` /* Optional logger: */\n` + ` logger\n` + \" )\");\n }\n}\nvar isMobile = () => typeof window !== \"undefined\" ? window.ontouchstart !== undefined : false;\n\n// src/helpers/Window.ts\nvar GetWindowInfo = () => {\n if (typeof window === \"undefined\") {\n return Err(new NotABrowserError);\n }\n return Ok({\n origin: window.location.origin,\n port: window.location.port,\n path: \"/\" + window.location.pathname.split(\"/\").filter((part) => part.length > 0).join(\"/\"),\n host: window.location.host,\n host_name: window.location.hostname,\n search: window.location.search,\n hash: window.location.hash,\n protocol: window.location.protocol\n });\n};\n// src/index.ts\nconsole.log(\"test?!1!\");\nexport {\n uri,\n slug,\n sed,\n search,\n path,\n or,\n lower,\n join,\n isIn,\n eq,\n coalesce,\n array,\n and,\n VideoMimes,\n ValueOr,\n UnknownBidderError,\n TryGet,\n TryDo,\n StartRequest,\n StartNative,\n Some,\n ResultStream,\n RequestBids,\n PlacementTypes,\n Pipe,\n PROD_SPONSORED_PRODUCT_FEED,\n PROD_RECOMMENDER_SERVICE,\n PROD_RECOMMENDED_PRODUCT_FEED,\n PROD_CONFIGURATION_SERVICE,\n PROD_BIDDER,\n Ok,\n NotABrowserError,\n NoNativeError,\n NoBidsError,\n NativeResponseToProductInformation,\n NativePosition,\n NativeImageTypes,\n NativeDataTypes,\n NativeAssetId,\n MultipleErrorsError,\n MissingWinUrlError,\n MissingProductIdError,\n MissingProductError,\n MissingConfigurationError,\n MissingBidsError,\n MissingAdmError,\n MalformedNativeResponseError,\n MalformedBidResponseError,\n InternalServerError,\n InitSurfAdsCoreServices,\n InitSurfAdsCoreSSR,\n InitSurfAdsCoreInternal,\n InitSurfAdsCore,\n InitLogger,\n GetWindowInfo,\n GetValueOrThrow,\n GetValue,\n GetSponsoredProduct,\n GetRecommendedProduct,\n GetHelpers,\n GetGeo,\n GetDevice,\n GetConfiguration,\n GetAllSponsoredProducts,\n GeoContextToORTB,\n GenerateTopProducts,\n GenerateSponsoredProductCardResponse,\n GeneratePreviousPurchases,\n GenerateForYou,\n GenerateArray,\n Filter,\n EventTypes,\n EventTrackingMethods,\n Err,\n DefaultNative,\n Ctx,\n CreativeType,\n ContextTypes,\n ContextSubTypes,\n ConsumeNAsync,\n ConsumeN,\n ConsumeAllAsync,\n ConsumeAll,\n BuildClickthroughUrl,\n BuildAllSponsoredProductCardResponses,\n BidderStartingUpError,\n AsyncPipe,\n AssertValue,\n AnyFailed,\n AllOrNone,\n AgentTypes,\n AdCom10DeviceTypes\n};\n\n//# debugId=6B1EA92C947FC63464756E2164756E21\n//# sourceMappingURL=index.js.map\n",
29
- "import {\n Ctx,\n ILogger,\n Ok,\n type AsyncResult,\n type ICompiledPublisherConfiguration\n} from '@surfside/ads-core';\n\n// import clickThroughUrlTemplate from './mock-configuration-templates/ClickthroughURL.component.hbs';\n// import productCardTemplate from './mock-configuration-templates/ProductCard.component.hbs';\n// import productCardStylesheet from './mock-configuration-templates/ProductCardStylesheet.component.scss';\n// import carouselStylesheet from './mock-configuration-templates/CarouselStylesheet.component.scss';\n\n/**\n * A mock configuration service that returns a hard-coded configuration. Enables geo and IP targeting by default.\n*/\n\nconst productCardTemplate = (data: any) => `\n<div class=\"mock-product-card\">\n <div class=\"card-shadow-area\"></div>\n <div class=\"card-pattern-area\"></div>\n <div class=\"main-card-area\">\n <div class=\"product-image\" _mousemove=\"moveImage\" _mouseleave=\"stopMove\">\n <img src=\"${data.product.image}\" />\n </div>\n <div class=\"product-data\">\n <h1>\n ${data.product.name}\n <div class=\"filter\"></div>\n </h1>\n <div class=\"brand\">\n <div class=\"horizontal-rule\"></div>\n <span>by ${data.product.brandName}</span>\n </div>\n <p>${data.product.details}</p>\n </div>\n <a _click=\"\" href=\"${data.clickthrough}\" target=\"_blank\">\n <div class=\"cta\">\n Add To Cart\n </div>\n </a>\n </div>\n</div>`;\n\nconst productCardStylesheet = `\n @keyframes scrollBackground {\n from {\n background-position: 0px 0px;\n }\n to {\n background-position: 50px 50px;\n }\n }\n\n .mock-product-card {\n display: none;\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n position: relative;\n margin-right: 30px;\n\n .product-image {\n\n width: calc(100% - 20px);\n margin: 10px;\n transition: transform 0.3s;\n z-index: 3;\n\n &:hover {\n transform: scale(1.25);\n }\n\n img {\n box-shadow: 4px 4px 1px -1px rgba(0, 0, 0, 0.2), 0px 0px 4px 0px rgba(0, 0, 0, 0.2);\n transition: transform 0.1s;\n }\n }\n\n .product-data {\n display: flex;\n flex-direction: column;\n }\n\n .main-card-area {\n width: 100%;\n height: 100%;\n background-color: rgb(244, 244, 244);\n transform: translate(-10px, -10px);\n transition: transform 0.1s ease-in, box-shadow 0.1s ease-in;\n box-shadow: 0px 0px 3px 2px rgba(0, 0, 0, 0.2);\n border: 2px dotted rgba(0, 0, 0, 0.4);\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n \n .product-image {\n img {\n width: 100%;\n }\n }\n\n h1 {\n font-family: 'Trebuchet MS', Helvetica, sans-serif;\n letter-spacing: 3px;\n text-transform: uppercase;\n padding: 0 5px;\n position: relative;\n font-size: 22px;\n margin-left: 5px;\n text-shadow: 0 0 4px rgba(0, 0, 0, 0.3);\n\n .filter {\n position: absolute;\n background: #baf7db;\n mix-blend-mode: multiply;\n width: calc(4ch + 10px);\n height: 1.5em;\n top: 0;\n left: 0;\n }\n }\n\n .brand {\n font-family: 'Tahoma', Helvetica, sans-serif;\n text-transform: uppercase;\n color: rgba(0, 0, 0, 0.4);\n font-size: 12px;\n width: 100%;\n display: flex;\n justify-content: flex-end;\n text-align: right;\n letter-spacing: 2px;\n box-sizing: border-box;\n padding: 0 10px;\n gap: 5px;\n text-shadow: 0 0 1px rgba(0, 0, 0, 0.3);\n \n\n .horizontal-rule {\n height: 2px;\n background: #baf7db;\n mix-blend-mode: multiply;\n flex-grow: 1;\n box-sizing: border-box;\n padding: 0 5px;\n transform: translateY(6px);\n }\n\n span {\n flex-shrink: 2;\n }\n }\n\n p {\n font-family: 'Tahoma', Helvetica, sans-serif;\n padding: 0 10px;\n margin: 10px auto;\n font-size: 14px;\n line-height: 32px;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis \" [...]\";\n color: rgb(59, 48, 68);\n }\n\n > a {\n text-decoration: none;\n letter-spacing: 3px;\n color: rgb(59, 48, 68);\n padding: 10px 10px;\n }\n .cta {\n width: 100%;\n background: #baf7db;\n padding: 5px 10px;\n display: flex;\n justify-content: space-around;\n box-sizing: border-box;\n font-family: 'Trebuchet MS', Helvetica, sans-serif;\n border: 2px dotted grey;\n transition: background 0.1s ease-in, color 0.1s ease-in;\n font-weight: 100;\n\n &:hover {\n background: #c0abff;\n color: #ecf0f1;\n }\n }\n }\n\n .card-shadow-area {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n background: #c0abff;\n border: 2px dashed rgba(0, 0, 0, 0.8);\n }\n\n .card-pattern-area {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n\n background-color: #c0abff;\n background-image: linear-gradient(#f4f4f4 2px, transparent 2px), linear-gradient(90deg, #f4f4f4 2px, transparent 2px), linear-gradient(#f4f4f4 1px, transparent 1px), linear-gradient(90deg, #f4f4f4 1px, #c0abff 1px);\n background-size: 50px 50px, 50px 50px, 10px 10px, 10px 10px;\n background-position: -2px -2px, -2px -2px, -1px -1px, -1px -1px;\n\n opacity: 0;\n transition: opacity 0.4s ease-in;\n animation: scrollBackground 2s linear infinite;\n }\n\n &:hover {\n .main-card-area {\n transform: translate(-20px, -20px);\n box-shadow: 10px 10px 7px 2px rgba(0, 0, 0, 0.2);\n }\n\n .card-pattern-area {\n opacity: 0.7;\n }\n }\n }\n\n .surf-product-card.sponsored {\n position: relative;\n\n &::after {\n left: -18px;\n letter-spacing: 2px;\n text-transform: uppercase;\n }\n }\n\n`;\n\nconst carouselStylesheet = `\n .surf-carousel {\n .sponsored-by {\n font-family: 'Trebuchet MS', Verdana, Geneva, Tahoma, sans-serif;\n margin: 0 0 20px 0;\n padding: 0;\n font-size: 26px;\n font-weight: 100;\n letter-spacing: 3px;\n text-transform: uppercase;\n text-decoration: underline dashed;\n color: rgba(0, 0, 0, 0.7);\n\n &.sponsoredByOne::before {\n content: 'Brought to you by ';\n }\n\n &.recommended::before {\n content: 'Suggested';\n }\n }\n }\n\n`;\n\nconst clickThroughUrlTemplate = (data: any) => `https://surfside.io/${data.product.brandName}`;\n\nexport const MockGetConfiguration = async (\n logger: ILogger | undefined\n): AsyncResult<ICompiledPublisherConfiguration> => {\n const log = Ctx(logger)?.with('MockGetConfiguration');\n log?.info('getting mock configuration');\n return Ok({\n templates: {\n productCardTemplate,\n clickThroughUrlTemplate,\n productCardStylesheet,\n carouselStylesheet,\n javascriptCallbacks: {\n 'moveImage': (e) => {\n const target = (e.currentTarget as HTMLElement);\n const img = target.querySelector('img')!;\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const offsetX = (e as MouseEvent).clientX - rect.left;\n const offsetY = (e as MouseEvent).clientY - rect.top;\n const dx = (offsetX - (target.clientWidth / 2)) /\n (target.clientWidth / 2);\n const dy = (offsetY - target.clientHeight / 2) /\n (target.clientHeight / 2);\n\n console.log(dx, dy);\n img.style.transform = `perspective(1000px)\n rotateY(${dx * 40}deg)\n rotateX(${-dy * 40}deg)`;\n },\n 'stopMove': (e) => {\n console.log('not stopping', (e.target as HTMLElement).tagName, ((e.currentTarget as HTMLElement).tagName));\n if(\n e.target === e.currentTarget\n ) {\n (e.currentTarget as HTMLElement).querySelector('img')!.style.transform = '';\n } else {\n }\n }\n }\n },\n settings: {\n commerceMediaEnabled: true,\n ipTargetingEnabled: true,\n geoTargetingEnabled: true,\n reauctionEnabled: true,\n reauctionIntervalMs: 30000,\n productFeedEnabled: true,\n sponsoredByEnabled: true\n }\n });\n};\n",
30
- "import { type AsyncResult, Ok, type IGeoContext } from '@surfside/ads-core';\n\nexport const MockGetGeo = async (): AsyncResult<IGeoContext> => Ok({\n country: 'USA',\n region: 'Virginia',\n city: 'Richmond',\n zip: '23218',\n coords: {\n latitude: 37.538837527059044,\n longitude: -77.43359909814527,\n accuracy: 1\n },\n utcoffset: -4,\n ip: '127.0.0.1'\n});\n",
31
- "import { Ok, type IDevice, type Result } from '@surfside/ads-core';\n\nexport const MockGetDevice = (): Result<IDevice> => Ok({\n ua: 'Mozilla/5.0 (X11; Linux x86_64; rv:138.0) Gecko/20100101 Firefox/138.0',\n make: 'Windows',\n model: 'PC',\n os: 'Windows',\n osv: '11',\n w: 1920,\n h: 1080\n});",
32
- "export const CHEAT_CODES = {\n returnSome: 'iddqd',\n returnNone: 'idkfa',\n allSameBrand: 'impulse101'\n} as const;\n",
33
- "import { Ctx, GetAllSponsoredProductFromNativeIdFn, GetValue, IBid, IBuiltProductCardBidResponse, ICompiledPublisherConfiguration, ILogger, INativeTemplateDelegateWindow, Ok, type AsyncResult, type IProductInformation, type Result } from '@surfside/ads-core';\nimport { CHEAT_CODES } from './CheatCodes';\n\nconst FakeProducts = [\n {\n \"name\": \"SkyHigh OG\",\n \"description\": \"Premium indica strain with earthy undertones and deep relaxation effects\",\n //\"brand\": \"CannaCloud\"\n \"brand\": \"Mid Software\"\n },\n {\n \"name\": \"Mellow Mint Tincture\",\n \"description\": \"Fast-acting CBD oil with refreshing mint flavor for daytime relief\",\n //\"brand\": \"GreenLeaf Therapeutics\"\n \"brand\": \"Mid Software\"\n },\n {\n \"name\": \"DreamWalker Gummies\",\n \"description\": \"Balanced THC:CBD ratio gummies for gentle euphoria and sleep support\",\n //\"brand\": \"Elevated Edibles\"\n \"brand\": \"Mid Software\"\n },\n {\n \"name\": \"Purple Haze Cartridge\",\n \"description\": \"Sativa-dominant vape cartridge with berry notes and creative stimulation\",\n //\"brand\": \"Vapor Valley\"\n \"brand\": \"Zen Cloud\"\n },\n {\n \"name\": \"Zen Garden Pre-rolls\",\n \"description\": \"Hand-rolled hybrid joints featuring calming terpene profile\",\n //\"brand\": \"Chronic Creations\"\n \"brand\": \"Zen Cloud\"\n },\n {\n \"name\": \"Relief Balm Plus\",\n \"description\": \"High-potency topical with cooling menthol for targeted muscle recovery\",\n //\"brand\": \"HempHeal\"\n \"brand\": \"Zen Cloud\"\n },\n {\n \"name\": \"Cosmic Cookie\",\n \"description\": \"Infused chocolate chip delight with precise 10mg THC microdosing\",\n //\"brand\": \"Baked Bliss\"\n \"brand\": \"Zen Cloud\"\n },\n {\n \"name\": \"Morning Mist Spray\",\n \"description\": \"Rapid sublingual delivery system with citrus essence for mood elevation\",\n //\"brand\": \"Aurora Botanicals\"\n \"brand\": \"Mid Software\"\n },\n {\n \"name\": \"Night Owl Resin\",\n \"description\": \"Premium live resin concentrate with sedative indica properties\",\n //\"brand\": \"Extract Experts\"\n \"brand\": \"Mid Software\"\n },\n {\n \"name\": \"Harmony Drops\",\n \"description\": \"1:1 CBD:THC oil drops for balanced relief without intense psychoactivity\",\n //\"brand\": \"Balanced Botanics\"\n \"brand\": \"Mid Software\"\n },\n {\n \"name\": \"Commander Kief\",\n \"description\": \"Billy Blazed - 28 year old man of below-average work ethic, working diligently in his living \" +\n \"room has created a device for slowing the progression of time using a crushed soda can and \" +\n \"tin foil. At 3pm on a Wednesday, when others are at work, Billy enters his living room, activates his \" +\n \"device with a Bic lighter, and transforms into... COMMANDER KIEF - Doer of nothing!\",\n //\"brand\": \"Mid Software\"\n \"brand\": \"Mid Software\"\n }\n];\n\nexport async function *MockGetSposoredProduct(\n logger: ILogger | undefined,\n accountId: string\n): AsyncGenerator<IProductInformation> {\n const log = Ctx(logger)?.with('MockGetSponsoredProduct');\n log?.info('Getting mock sponsored product');\n while(true) {\n for(const fake of FakeProducts) {\n log?.debug('Fake product', accountId);\n yield productify(fake);\n }\n log?.debug('Back to the beginning');\n }\n}\n\nexport const MockGetAllSponsoredProducts = async (): AsyncResult<IProductInformation[]> =>\n Ok(FakeProducts.map(productify));\n\nexport const MockGetRecommendedProduct = async (): AsyncResult<IProductInformation> =>\n Ok(productify(FakeProducts[Math.floor(Math.random() * FakeProducts.length)]!))\n\nconst productify = (\n product: {name: string, description: string, brand: string}\n): IProductInformation => ({\n name: product.name,\n brand_name: product.brand,\n brandName: product.brand,\n details: product.description,\n image: `http://creative.surfside.io/mock/flower${Math.floor(Math.random() * 10) + 1}.jpg`\n});\n\nexport async function *MockGenerateSponsoredProductCard(\n logger: ILogger | undefined,\n windowInfo: INativeTemplateDelegateWindow,\n config: ICompiledPublisherConfiguration,\n accountId: string,\n bids: IBid[]\n): AsyncGenerator<IBuiltProductCardBidResponse> {\n const log = Ctx(logger)?.with('MockGenerateSponsoredProductCard');\n log?.info('Generating mock sponsored product card response');\n for(const bid of bids) {\n log?.info('Going through bids', bid);\n const native = JSON.parse(bid?.adm ?? '');\n log?.debug('Native', native);\n for await(const product of MockGetSposoredProduct(logger, accountId)) {\n log?.info('Yielding sponsored product card');\n switch(accountId) {\n case CHEAT_CODES.returnSome: {\n log?.info('Checking cheatcode...');\n if(Math.random() > 0.75) {\n log?.info('Returning no product');\n return;\n };\n break;\n }\n case CHEAT_CODES.returnNone: {\n return;\n }\n }\n\n yield {\n type: 2,\n native,\n clickthrough: config.templates.clickThroughUrlTemplate({\n product,\n window: windowInfo,\n publisher: config,\n catalog: product\n }),\n bid: bid,\n product,\n trackers: {\n imp: ['https://surfside.io/track'],\n win: 'https://surfside.io/win',\n others: []\n },\n sponsored: true\n };\n }\n }\n};\n",
34
- "import { GetValueOrThrow, type GetRecommendedProductFromProductIdFn, type IProductInformation } from '@surfside/ads-core';\n\nexport async function *MockGenerateTopProducts(\n productFeed: GetRecommendedProductFromProductIdFn\n): AsyncGenerator<IProductInformation> {\n while(true) {\n yield GetValueOrThrow(await productFeed('12345')); // Doesn't matter for mock service\n }\n}\n\nexport const MockGenerateForYou = MockGenerateTopProducts;\nexport const MockGeneratePastPurchases = MockGenerateTopProducts;",
35
- "import {\n BuildAllResponses,\n BuildAllSponsoredProductCardResponses,\n BuildBannerResponse,\n BuildVideoResponse,\n GenerateAllResponses,\n GetValueOrThrow,\n GetWindowInfo,\n InitSurfAdsCoreClientInternal,\n ISurfsideClientApi,\n type AsyncResult,\n type ILogger,\n type ISurfsideApi\n} from '@surfside/ads-core-client';\nimport { MockGetConfiguration } from './mock/Configuration';\nimport { MockGetGeo } from './mock/Geo';\nimport { MockGetDevice } from './mock/Device';\nimport {\n MockGenerateSponsoredProductCard,\n MockGetAllSponsoredProducts,\n MockGetRecommendedProduct,\n MockGetSposoredProduct\n} from './mock/Product';\nimport { MockGenerateForYou, MockGeneratePastPurchases, MockGenerateTopProducts } from './mock/Recommender';\n\nimport Handlebars from 'handlebars/runtime';\nimport { MockRequestBids } from './mock';\n\nexport const InitSurfAdsCoreMock = async (\n accountId: string,\n siteId: string,\n channelId: string,\n locationId: string,\n userId: string | undefined,\n logger?: ILogger\n): AsyncResult<ISurfsideClientApi> => {\n const windowInfo = GetValueOrThrow(GetWindowInfo());\n const config = GetValueOrThrow(await MockGetConfiguration(logger));\n const\n buildBannerResponse = BuildBannerResponse.bind(undefined, logger, windowInfo, config),\n buildVideoResponse = BuildVideoResponse.bind(undefined, logger, windowInfo, config),\n buildAllSponsoredProductCardResponses = BuildAllSponsoredProductCardResponses.bind(undefined, logger,\n MockGetAllSponsoredProducts,\n windowInfo,\n config\n );\n logger?.error(accountId);\n\n return InitSurfAdsCoreClientInternal(\n logger,\n MockRequestBids.bind(undefined, logger),\n MockGetConfiguration.bind(undefined, logger),\n MockGetGeo,\n MockGetDevice,\n MockGetSposoredProduct.bind(undefined, logger, accountId),\n MockGetAllSponsoredProducts,\n MockGetRecommendedProduct,\n MockGenerateTopProducts.bind(undefined, MockGetRecommendedProduct),\n MockGenerateForYou.bind(undefined, MockGetRecommendedProduct),\n MockGeneratePastPurchases.bind(undefined, MockGetRecommendedProduct),\n buildAllSponsoredProductCardResponses,\n MockGenerateSponsoredProductCard.bind(undefined, logger,\n windowInfo,\n config,\n accountId\n ),\n buildBannerResponse,\n buildVideoResponse,\n BuildAllResponses.bind(undefined, logger,\n buildBannerResponse,\n buildVideoResponse,\n buildAllSponsoredProductCardResponses\n ),\n GenerateAllResponses.bind(undefined, logger,\n buildBannerResponse,\n buildVideoResponse,\n buildAllSponsoredProductCardResponses\n ),\n Handlebars.create(),\n window.screen,\n window.navigator,\n false,\n '127.0.0.1',\n undefined,\n windowInfo,\n accountId,\n siteId,\n channelId,\n locationId,\n userId\n );\n};\n",
36
- "import { CHEAT_CODES } from './CheatCodes';\nimport {\n type AsyncResult,\n Ctx,\n Err,\n EventTrackingMethods,\n EventTypes,\n GetValue,\n type IBanner,\n type IBidRequest,\n type IBidResponse,\n type ILogger,\n type INativeRequest,\n type INativeResponse,\n type IProductInformation,\n NativeAssetId,\n NativeDataTypes,\n NativeImageTypes,\n Ok,\n type Result\n} from '@surfside/ads-core';\n\nimport template from './templates/MockData.html' with { type: 'text' };\n\nconst FallbackWidth = 728;\nconst FallbackHeight = 90;\n\nconst NativeSize = 350;\n\nconst HardcodedVideoWidth = 800;\nconst HardcodedVideoHeight = 600;\n\nconst SurfColors = [\n /* Accents */\n '#331c7a',\n '#1f69ff',\n '#4ceaaa',\n '#c5f700',\n '#f7a800',\n '#f66d18',\n '#e72024',\n '#c0abff',\n '#f97585',\n '#f4bd5d',\n '#baf7db',\n '#7eceeb',\n '#0dcc91',\n '#d3d3e0'\n];\n\nconst FakeProducts = [\n {\n \"name\": \"SkyHigh OG\",\n \"description\": \"Premium indica strain with earthy undertones and deep relaxation effects\",\n \"brand\": \"CannaCloud\"\n },\n {\n \"name\": \"Mellow Mint Tincture\",\n \"description\": \"Fast-acting CBD oil with refreshing mint flavor for daytime relief\",\n \"brand\": \"GreenLeaf Therapeutics\"\n },\n {\n \"name\": \"DreamWalker Gummies\",\n \"description\": \"Balanced THC:CBD ratio gummies for gentle euphoria and sleep support\",\n \"brand\": \"Elevated Edibles\"\n },\n {\n \"name\": \"Purple Haze Cartridge\",\n \"description\": \"Sativa-dominant vape cartridge with berry notes and creative stimulation\",\n \"brand\": \"Vapor Valley\"\n },\n {\n \"name\": \"Zen Garden Pre-rolls\",\n \"description\": \"Hand-rolled hybrid joints featuring calming terpene profile\",\n \"brand\": \"Chronic Creations\"\n },\n {\n \"name\": \"Relief Balm Plus\",\n \"description\": \"High-potency topical with cooling menthol for targeted muscle recovery\",\n \"brand\": \"HempHeal\"\n },\n {\n \"name\": \"Cosmic Cookie\",\n \"description\": \"Infused chocolate chip delight with precise 10mg THC microdosing\",\n \"brand\": \"Baked Bliss\"\n },\n {\n \"name\": \"Morning Mist Spray\",\n \"description\": \"Rapid sublingual delivery system with citrus essence for mood elevation\",\n \"brand\": \"Aurora Botanicals\"\n },\n {\n \"name\": \"Night Owl Resin\",\n \"description\": \"Premium live resin concentrate with sedative indica properties\",\n \"brand\": \"Extract Experts\"\n },\n {\n \"name\": \"Harmony Drops\",\n \"description\": \"1:1 CBD:THC oil drops for balanced relief without intense psychoactivity\",\n \"brand\": \"Balanced Botanics\"\n },\n {\n \"name\": \"Commander Kief\",\n \"description\": \"Billy Blazed - 28 year old man of below-average work ethic, working diligently in his living \" +\n \"room has created a device for slowing the progression of time using a crushed soda can and \" +\n \"tin foil. At 3pm on a Wednesday, when others are at work, Billy enters his living room, activates his \" +\n \"device with a Bic lighter, and transforms into... COMMANDER KIEF - Doer of nothing!\",\n \"brand\": \"Mid Software\"\n }\n];\n\nexport const MockRequestBids = async (\n logger: ILogger | undefined,\n bidRequest: IBidRequest\n): AsyncResult<IBidResponse> => {\n const log = Ctx(logger)?.with('MockRequestBids');\n log?.info('Requesting mock bids');\n log?.debug(bidRequest);\n\n const responses: IBidResponse[] = [];\n const returned = bidRequest.imp.length;\n // const returned = (() => {\n // switch (bidRequest.ext?.accountId) {\n // case CHEAT_CODES.returnSome: {\n // return Math.round((bidRequest.imp.length / 2) + (Math.random() * bidRequest.imp.length / 2));\n // }\n // case CHEAT_CODES.returnNone: {\n // return 0;\n // }\n // default: {\n // return bidRequest.imp.length;\n // }\n // }\n // })();\n for (let i = 0; i < returned; i++) {\n const imp = bidRequest.imp[i];\n if(imp === undefined) {\n continue;\n }\n if (\n imp.video !== undefined &&\n /* Only one size for now */\n imp.video.w === HardcodedVideoWidth && imp.video.h === HardcodedVideoHeight\n ) {\n responses.push(makeVideo(bidRequest.id, imp.id));\n } else if (imp.native !== undefined) {\n const nativeRequest: INativeRequest = JSON.parse(imp.native.request);\n responses.push(makeNative(\n bidRequest.id,\n imp.id\n ));\n } else if (imp.banner !== undefined) {\n responses.push(makeBanner(bidRequest.id, imp.id, imp.banner));\n }\n }\n\n const response = flattenResponses(responses);\n return Ok(response);\n};\n\nconst flattenResponses = (responses: IBidResponse[]): IBidResponse => {\n if (responses.length === 0) {\n return {\n id: crypto.randomUUID(),\n seatbid: []\n };\n }\n const bids = responses.flatMap(response => (response.seatbid ?? []).flatMap(seatbid => seatbid.bid));\n return {\n ...(responses[0]!),\n seatbid: [{\n ...(responses[0]!.seatbid?.[0] ?? {}),\n bid: bids\n }]\n };\n};\n\nconst makeVideo = (requestId: string, impid: string): IBidResponse => ({\n id: requestId,\n seatbid: [{\n bid: [{\n id: impid,\n impid,\n price: 3.50,\n adid: '123456',\n adm: `<?xml version=\"1.0\" encoding=\"utf-8\"?>\n <VAST version=\"3.0\">\n <Ad id=\"preroll\">\n <InLine>\n <Impression id=\"impression\"><![CDATA[http://localhost:3005/impression]]></Impression>\n <AdSystem><![CDATA[2.0]]></AdSystem>\n <AdTitle><![CDATA[Title]]></AdTitle>\n <Creatives>\n <Creative>\n <CompanionAds/>\n </Creative>\n <Creative>\n <Linear>\n <TrackingEvents>\n <Tracking event=\"start\"><![CDATA[http://localhost:3005/start]]></Tracking>\n <Tracking event=\"firstQuartile\"><![CDATA[http://localhost:3005/first]]></Tracking>\n <Tracking event=\"midpoint\"><![CDATA[http://localhost:3005/midpoint]]></Tracking>\n <Tracking event=\"thirdQuartile\"><![CDATA[http://localhost:3005/third]]></Tracking>\n <Tracking event=\"complete\"><![CDATA[http://localhost:3005/complete]]></Tracking>\n <Tracking event=\"stop\"><![CDATA[http://localhost:3005/stop]]></Tracking>\n </TrackingEvents>\n <Duration><![CDATA[00:30]]></Duration>\n <MediaFiles>\n <MediaFile delivery=\"progressive\" type=\"video/mp4\" width=\"320\" height=\"240\"\n ><![CDATA[http://localhost:9001/local-assets/testsrc.mp4]]></MediaFile>\n </MediaFiles>\n <VideoClicks>\n <ClickThrough id=\"scanscout\"><![CDATA[{SURF_COMMERCE_URL}]]></ClickThrough>\n </VideoClicks>\n </Linear>\n <Extensions>\n <Extension>\n <Name>Wicked Sour Gummies</Name>\n <BrandName>Surfside</BrandName>\n <ProductType>Edible</ProductType>\n </Extension>\n </Extensions>\n </Creative>\n </Creatives>\n </InLine>\n </Ad>\n </VAST>`,\n nurl: 'https://www.surfside.io/win-notice'\n }]\n }]\n});\n\nconst makeBanner = (requestId: string, impid: string, banner: IBanner): IBidResponse => ({\n id: requestId,\n seatbid: [\n {\n bid: [{\n id: impid,\n impid,\n w: banner.w,\n h: banner.h,\n price: 3.50,\n adm: template\n .replaceAll('_WIDTH_', makeRealBannerSize(banner.w!))\n .replaceAll('_HEIGHT_', makeRealBannerSize(banner.h!))\n }]\n }\n ]\n});\n\nconst makeRealBannerSize = (s: number) => s < 5\n ? s * 200\n : s <= 16\n ? s * 100\n : s;\n\nexport const makeImage = (width: number, height: number, message?: string): Result<HTMLElement> => {\n const canv = document.createElement('canvas');\n const originalWidth = width;\n const originalHeight = height;\n if (width % 10 === width && height % 10 === height) {\n width *= 100;\n height *= 100;\n }\n canv.width = width;\n canv.height = height;\n\n const ctx = canv.getContext('2d');\n if (ctx === null) {\n return Err(new Error('Failed to create 2D Canvas'));\n }\n const gradient = ctx.createLinearGradient(0, 0, canv.width, canv.height);\n\n const randomColor1: string = SurfColors[\n Math.floor(Math.random() * SurfColors.length)\n ]!;\n const randomColor2: string = SurfColors[\n Math.floor(Math.random() * SurfColors.length)\n ]!;\n\n gradient.addColorStop(0, randomColor1);\n gradient.addColorStop(1, randomColor2);\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, canv.width, canv.height);\n\n ctx.font = '48px Arial';\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n\n ctx.fillStyle = 'white';\n ctx.strokeStyle = 'black';\n ctx.lineWidth = 5;\n\n const text = message ?? `${originalWidth}x${originalHeight}`;\n ctx.strokeText(text, canv.width / 2, canv.height / 2);\n ctx.fillText(text, canv.width / 2, canv.height / 2);\n\n const img = document.createElement('img');\n img.src = canv.toDataURL();\n img.width = width;\n img.height = height;\n\n const anchor = document.createElement('a');\n const coinflip = Math.round(Math.random()) === 0;\n if (coinflip) {\n anchor.href = 'https://www.surfside.io';\n } else {\n anchor.href = '{SURF_COMMERCE_URL}';\n }\n anchor.appendChild(img);\n\n const data: IProductInformation = {\n name: 'Product Title',\n details: 'Product Description',\n price: '50.00',\n salePrice: '35.00',\n clickthroughUrl: 'https://www.surfside.io',\n cta: 'Add to bag',\n productType: 'Flower',\n thc: '20%',\n cbd: '5%',\n strain: 'Hybrid',\n image: img.src,\n // eslint-disable-next-line @typescript-eslint/naming-convention\n brand_name: 'Surfside',\n brandName: 'Surfside',\n winUrl: 'https://www.surfside.io/win-notice',\n pixelUrl: 'https://www.surfside.io/pixel',\n ext: {}\n };\n\n const productInfo = document.createElement('div');\n productInfo.id = 'surf-product-info';\n productInfo.setAttribute('data-name', data.name ?? '');\n productInfo.setAttribute('data-details', data.details ?? '');\n productInfo.setAttribute('data-price', data.price ?? '');\n productInfo.setAttribute('data-saleprice', data.salePrice ?? '');\n productInfo.setAttribute('data-cta', data.cta ?? '');\n productInfo.setAttribute('data-producttype', data.productType ?? '');\n productInfo.setAttribute('data-thc', data.thc ?? '');\n productInfo.setAttribute('data-cbd', data.cbd ?? '');\n productInfo.setAttribute('data-strain', data.strain ?? '');\n productInfo.setAttribute('data-brandname', data.brandName ?? '');\n\n anchor.appendChild(productInfo);\n return Ok(anchor);\n};\n\nconst makeNative = (requestId: string, impid: string): IBidResponse => ({\n id: requestId,\n seatbid: [\n {\n bid: [{\n id: impid,\n impid,\n price: 3.50,\n nurl: 'https://www.surfside.io/win-notice',\n adm: JSON.stringify(makeNativeResponse())\n }]\n }\n ]\n});\n\nconst makeNativeResponse = (): INativeResponse => {\n const fakeProduct = FakeProducts[Math.floor(Math.random() * FakeProducts.length)]!;\n const adm = GetValue(makeImage(NativeSize, NativeSize, fakeProduct?.name));\n const img = adm?.querySelector('img')?.src;\n return {\n native: {\n ver: '1.2',\n eventtrackers: [\n {\n event: EventTypes.Imp,\n method: EventTrackingMethods.Img,\n url: 'https://www.surfside.io/pixel'\n },\n {\n event: EventTypes.Imp,\n method: EventTrackingMethods.JS,\n url: 'http://localhost:9001/local-assets/win-script.js'\n }\n ],\n assets: [\n {\n id: NativeAssetId.Title,\n required: 1,\n title: {\n text: fakeProduct.name\n }\n },\n {\n id: NativeAssetId.Image,\n required: 1,\n img: {\n type: NativeImageTypes.Main,\n url: img ?? ''\n }\n },\n {\n id: NativeAssetId.Sponsored,\n required: 1,\n data: {\n type: NativeDataTypes.Sponsored,\n value: fakeProduct.brand\n }\n },\n {\n id: NativeAssetId.Desc,\n required: 1,\n data: {\n type: NativeDataTypes.Desc,\n value: fakeProduct.description\n }\n }, {\n id: NativeAssetId.Rating,\n required: 1,\n data: {\n type: NativeDataTypes.Rating,\n value: '4.5'\n }\n }, {\n id: NativeAssetId.Price,\n required: 1,\n data: {\n type: NativeDataTypes.Price,\n value: '50.00'\n }\n }, {\n id: NativeAssetId.SalePrice,\n required: 1,\n data: {\n type: NativeDataTypes.SalePrice,\n value: '35.00'\n }\n },\n {\n id: NativeAssetId.DisplayURL,\n required: 1,\n data: {\n type: NativeDataTypes.DisplayURL,\n value: 'https://www.surfside.io'\n }\n }, {\n id: NativeAssetId.CTAText,\n required: 1,\n data: {\n type: NativeDataTypes.CTAText,\n value: 'Add to bag'\n }\n }, {\n id: NativeAssetId.SurfCategory,\n required: 1,\n data: {\n type: NativeDataTypes.SurfCategory,\n value: 'Software'\n }\n }, {\n id: NativeAssetId.SurfTHC,\n required: 1,\n data: {\n type: NativeDataTypes.SurfTHC,\n value: '20%'\n }\n }, {\n id: NativeAssetId.SurfCBD,\n required: 1,\n data: {\n type: NativeDataTypes.SurfCBD,\n value: '5%'\n }\n }, {\n id: NativeAssetId.SurfStrain,\n required: 1,\n data: {\n type: NativeDataTypes.SurfStrain,\n value: 'Hybrid'\n }\n },\n {\n id: NativeAssetId.SurfMetaProduct,\n required: 1,\n data: {\n type: NativeDataTypes.SurfMetaProduct,\n value: '123456'\n }\n }\n ],\n link: { url: '{SURF_COMMERCE_URL}?redirect=true' }\n }\n }\n};\n"
37
- ],
38
- "mappings": "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",
39
- "debugId": "D526E7CCF3E5B29C64756E2164756E21",
40
- "names": []
41
- }
1
+ {"version":3,"file":"index.js","sourceRoot":"src/","sources":["index.ts"],"names":[],"mappings":"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"}