axe 12.1.0 → 12.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/axe.js +25 -20
- package/dist/axe.min.js +1 -1
- package/lib/index.js +9 -4
- package/package.json +17 -17
package/dist/axe.js
CHANGED
|
@@ -1287,7 +1287,7 @@ module.exports = function unset(obj, prop) {
|
|
|
1287
1287
|
module.exports={
|
|
1288
1288
|
"name": "axe",
|
|
1289
1289
|
"description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
|
|
1290
|
-
"version": "12.
|
|
1290
|
+
"version": "12.2.0",
|
|
1291
1291
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
1292
1292
|
"browser": {
|
|
1293
1293
|
"parse-app-info": false
|
|
@@ -1312,42 +1312,42 @@ module.exports={
|
|
|
1312
1312
|
"iserror": "0.0.2",
|
|
1313
1313
|
"merge-options": "3.0.4",
|
|
1314
1314
|
"p-map-series": "2",
|
|
1315
|
-
"parse-app-info": "^
|
|
1315
|
+
"parse-app-info": "^5.0.0",
|
|
1316
1316
|
"parse-err": "^1.0.0",
|
|
1317
1317
|
"pick-deep": "1.0.0",
|
|
1318
1318
|
"unset-value": "2.0.1"
|
|
1319
1319
|
},
|
|
1320
1320
|
"devDependencies": {
|
|
1321
|
-
"@babel/cli": "^7.
|
|
1322
|
-
"@babel/core": "^7.
|
|
1323
|
-
"@babel/preset-env": "^7.
|
|
1324
|
-
"@commitlint/cli": "^17.
|
|
1325
|
-
"@commitlint/config-conventional": "^17.
|
|
1326
|
-
"ava": "^5.
|
|
1321
|
+
"@babel/cli": "^7.21.5",
|
|
1322
|
+
"@babel/core": "^7.21.8",
|
|
1323
|
+
"@babel/preset-env": "^7.21.5",
|
|
1324
|
+
"@commitlint/cli": "^17.6.1",
|
|
1325
|
+
"@commitlint/config-conventional": "^17.6.1",
|
|
1326
|
+
"ava": "^5.2.0",
|
|
1327
1327
|
"babelify": "^10.0.0",
|
|
1328
1328
|
"browserify": "^17.0.0",
|
|
1329
|
-
"consola": "^
|
|
1329
|
+
"consola": "^3.1.0",
|
|
1330
1330
|
"cross-env": "^7.0.3",
|
|
1331
|
-
"eslint": "^8.
|
|
1331
|
+
"eslint": "^8.39.0",
|
|
1332
1332
|
"eslint-config-xo-lass": "^2.0.1",
|
|
1333
|
-
"eslint-plugin-compat": "^4.
|
|
1333
|
+
"eslint-plugin-compat": "^4.1.4",
|
|
1334
1334
|
"eslint-plugin-node": "^11.1.0",
|
|
1335
1335
|
"express": "^4.18.2",
|
|
1336
1336
|
"fixpack": "^4.0.0",
|
|
1337
1337
|
"husky": "^8.0.3",
|
|
1338
1338
|
"jsdom": "15.x",
|
|
1339
|
-
"koa": "^2.14.
|
|
1340
|
-
"lint-staged": "^13.
|
|
1339
|
+
"koa": "^2.14.2",
|
|
1340
|
+
"lint-staged": "^13.2.2",
|
|
1341
1341
|
"lodash": "^4.17.21",
|
|
1342
1342
|
"nyc": "^15.1.0",
|
|
1343
|
-
"pino": "^8.
|
|
1343
|
+
"pino": "^8.12.0",
|
|
1344
1344
|
"remark-cli": "^11.0.0",
|
|
1345
1345
|
"remark-preset-github": "^4.0.4",
|
|
1346
|
-
"rimraf": "^
|
|
1346
|
+
"rimraf": "^5.0.0",
|
|
1347
1347
|
"signale": "^1.4.0",
|
|
1348
|
-
"sinon": "^15.0.
|
|
1348
|
+
"sinon": "^15.0.4",
|
|
1349
1349
|
"tinyify": "3.0.0",
|
|
1350
|
-
"xo": "^0.
|
|
1350
|
+
"xo": "^0.54.2"
|
|
1351
1351
|
},
|
|
1352
1352
|
"engines": {
|
|
1353
1353
|
"node": ">=14"
|
|
@@ -1472,6 +1472,7 @@ function dotifyToArray(obj) {
|
|
|
1472
1472
|
const newKey = current ? current + '.' + convertedKey : convertedKey; // joined key with dot
|
|
1473
1473
|
// if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
|
|
1474
1474
|
if (isPlainObject(value)) {
|
|
1475
|
+
res.push(convertedKey);
|
|
1475
1476
|
recurse(value, newKey); // it's a nested object, so do it again
|
|
1476
1477
|
} else {
|
|
1477
1478
|
res.push(newKey);
|
|
@@ -1490,7 +1491,7 @@ function isNull(value) {
|
|
|
1490
1491
|
return value === null;
|
|
1491
1492
|
}
|
|
1492
1493
|
function isUndefined(value) {
|
|
1493
|
-
return
|
|
1494
|
+
return value === undefined;
|
|
1494
1495
|
}
|
|
1495
1496
|
function isObject(value) {
|
|
1496
1497
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
@@ -1844,7 +1845,7 @@ class Axe {
|
|
|
1844
1845
|
if (index !== -1) {
|
|
1845
1846
|
let i = dotified.length;
|
|
1846
1847
|
while (i--) {
|
|
1847
|
-
if (
|
|
1848
|
+
if (dotified[i] === key.slice(0, -1)) dotified.splice(i, 1);else if (dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
|
|
1848
1849
|
}
|
|
1849
1850
|
}
|
|
1850
1851
|
}
|
|
@@ -1861,7 +1862,11 @@ class Axe {
|
|
|
1861
1862
|
// (and it doesn't also do bigints yet)
|
|
1862
1863
|
//
|
|
1863
1864
|
for (const prop of dotified) {
|
|
1864
|
-
if (isSymbol(prop)
|
|
1865
|
+
if (isSymbol(prop)) {
|
|
1866
|
+
if (meta[prop] !== undefined) pickedSymbols.push([prop, meta[prop]]);
|
|
1867
|
+
} else if (meta[Symbol.for(prop)] !== undefined) {
|
|
1868
|
+
pickedSymbols.push([Symbol.for(prop), meta[Symbol.for(prop)]]);
|
|
1869
|
+
}
|
|
1865
1870
|
}
|
|
1866
1871
|
|
|
1867
1872
|
//
|
package/dist/axe.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,s={},c=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var a=Symbol.prototype.toString,f=/^Symbol\(.*\)$/;s=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==c.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&f.test(a.call(e))}(e)}catch(t){return!1}}}else s=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,g=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),y=this,h={concatArrays:!1,ignoreUndefined:!1},m=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function d(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return m(e).forEach(r=>{g(t,r,d(e[r]))}),t}(e):e}const b=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?g(e,r,v(e[r],t[r],n)):g(e,r,d(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),g(n,o++,t===e?t[r]:d(t[r])));n=b(n,t,m(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?b(e,t,m(t),r):d(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,s=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(s.s();!(i=s.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){s.e(t)}finally{s.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),a=c.length,f=0;do{let t=c[f];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),c[++f]||""],s,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=f+1;for(;o<a;)if(n=(t=x([t,c[o++]],s,r))in e){if(!I(t,e,r))return r.default;e=e[t],f=o-1;break}if(!n)return r.default}}while(++f<a&&L(e));return f===a?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="12.1.0",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:c}=R,a=Symbol.for("axe.silent"),f=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},g="`level` invalid, must be: "+u.join(", "),m=i.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||s(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(d(h),this!==y&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||c(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||c(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:m,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||c(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const s=Object.keys(this.config.logger).filter(e=>!f.has(e));for(const i of s)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(g);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,f){const l=[],g=[];w(e)||l.push(e),w(i)||l.push(i),w(f)||l.push(f);for(var y=arguments.length,h=new Array(y>3?y-3:0),m=3;m<y;m++)h[m-3]=arguments[m];for(const t of Array.prototype.slice.call(h))l.push(t);let d=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(f=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(f=i,i=e,e=this.getNormalizedLevel(e),d=-1),-1===this.config.levels.indexOf(e))return;let v,j=!1;if((S(i)||Array.isArray(i))&&_(f)){j=!0;const e=f;f=i,i=_(e)&&l.length>=3+d?t(...l.slice(2+d)):e}if(w(i)&&(i=e),1!==l.slice(1+d).length||_(i)||o(i))if(!j&&l.length>=4+d){i=void 0,f={};const r=[];for(const e of l)o(e)?g.push(e):_(e)&&r.push(e);0===g.length&&r.length>0?i=t(...r):g.length>0&&"log"===e&&(e="error")}else if(!j&&l.length===3+d&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,f),f={};else if(o(i)){if(o(f)){g.push(f);for(const e of l.slice(2+d))f!==e&&o(e)&&g.push(e);f={}}}else o(f)?(g.push(f),f={}):S(f)||w(f)||null===f?_(i)||(i=t(i)):(i=t(i,f),f={});else f={message:i},i=e;w(f)||S(f)?S(f)||(f={}):f={original_meta:f},o(i)&&(g.unshift(i),i=void 0),S(f.err)&&(o(f.err)&&g.push(f.err),f.original_err=o(f.err)?E(f.err):f.err),g.length>0&&(1===g.length?v=g[0]:((v=new Error([...new Set(g.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(g.map(e=>e.stack).filter(Boolean))].join("\n\n"),v.errors=g),f.err=E(v),_(i)||(i=v.message)),f.level=e,this.appInfo&&(f.app=this.appInfo);const T=-1===d?"log":e;for(const t of this.config.hooks.pre)[v,i,f]=t(T,v,i,f);const k=c(f[a]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(f,this.config.meta.remappedFields[t],n(f,t)),B(f,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(f,r))&&B(f,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=s(o)?Symbol.keyFor(o)||o.description:o,a=n?n+"."+c:c;b(i)?e(i,a):t.push(a)}}(e),t}(f);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!s(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(s(r))f[r]&&t.push([r,f[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)s(e[t])||0!==e[t].indexOf(n)||e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)s(r)&&f[r]&&t.push([r,f[r]]);if(f=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let s=0;s<r;s++){const r=t[s],c=n(e,r,o);void 0!==c&&P(i,r,c,o)}return i})(e,t,i,r)}(f,e),t.length>0)for(const[r,n]of t)f[r]=n}return this.config.silent||k||(o(v)&&this.config.showStack?!this.config.meta.show||A(f)||this.config.meta.hideMeta&&f[this.config.meta.hideMeta]?this.config.logger[T](v):this.config.logger[T](v,f):!this.config.meta.show||A(f)||this.config.meta.hideMeta&&f[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&f[this.config.meta.hideHTTP]?this.config.logger[T](i):this.config.logger[T](i,f)),0===this.config.hooks.post.length?{method:T,err:v,message:i,meta:f}:O(this.config.hooks.post,e=>e(T,v,i,f)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
|
|
1
|
+
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Axe=e()}}((function(){!function(e){"use strict";e.console||(e.console={});for(var t,r,n=e.console,o=function(){},i=["memory"],s="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=i.pop();)n[t]||(n[t]={});for(;r=s.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window);var e={hostname:function(){return"undefined"!=typeof location?location.hostname:""}},t=function(e){var t=Array.prototype.slice.call(arguments,1);return t.length&&(e=e.toString().replace(/(%?)(%([jds]))/g,(function(e,r,n,o){var i=t.shift();switch(o){case"s":i=""+i;break;case"d":i=Number(i);break;case"j":i=JSON.stringify(i)}return r?(t.unshift(i),e):i}))),t.length&&(e=e.toString()+" "+t.join(" ")),""+e.toString().replace(/%{2,2}/g,"%")},r=["%s","%d","%i","%f","%j","%o","%O","%%"],n=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(n=e,"[object Object]"!==Object.prototype.toString.call(n)||!t)return e;var n;const o=Array.isArray(t)?t:String(t).split(r),{length:i}=o;return i<2?e[o[0]]:((e,t,r)=>{for(let n=0;n<r;n++){if(null===e)return;const r=e[t[n]];if(void 0===r)return;e=r}return e})(e,o,i)},o=function(e){switch(Object.prototype.toString.call(e)){case"[object Error]":case"[object Exception]":case"[object DOMException]":return!0;default:return e instanceof Error}},i="undefined"!=typeof Symbol&&Symbol,s={},c=Object.prototype.toString;if("function"==typeof i&&"function"==typeof Symbol&&"symbol"==typeof i("foo")&&"symbol"==typeof Symbol("bar")&&function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var e={},t=Symbol("test"),r=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(r))return!1;for(t in e[t]=42,e)return!1;if("function"==typeof Object.keys&&0!==Object.keys(e).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(e).length)return!1;var n=Object.getOwnPropertySymbols(e);if(1!==n.length||n[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var o=Object.getOwnPropertyDescriptor(e,t);if(42!==o.value||!0!==o.enumerable)return!1}return!0}()){var f=Symbol.prototype.toString,a=/^Symbol\(.*\)$/;s=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==c.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&a.test(f.call(e))}(e)}catch(t){return!1}}}else s=function(e){return!1};var l=e=>{if("[object Object]"!==Object.prototype.toString.call(e))return!1;const t=Object.getPrototypeOf(e);return null===t||t===Object.prototype};const{hasOwnProperty:u}=Object.prototype,{propertyIsEnumerable:p}=Object,y=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!0,configurable:!0}),g=this,h={concatArrays:!1,ignoreUndefined:!1},m=e=>{const t=[];for(const r in e)u.call(e,r)&&t.push(r);if(Object.getOwnPropertySymbols){const r=Object.getOwnPropertySymbols(e);for(const n of r)p.call(e,n)&&t.push(n)}return t};function d(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return m(e).forEach(r=>{y(t,r,d(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return m(e).forEach(r=>{y(t,r,d(e[r]))}),t}(e):e}const b=(e,t,r,n)=>(r.forEach(r=>{void 0===t[r]&&n.ignoreUndefined||(r in e&&e[r]!==Object.getPrototypeOf(e)?y(e,r,v(e[r],t[r],n)):y(e,r,d(t[r])))}),e);function v(e,t,r){return r.concatArrays&&Array.isArray(e)&&Array.isArray(t)?((e,t,r)=>{let n=e.slice(0,0),o=0;return[e,t].forEach(t=>{const i=[];for(let r=0;r<t.length;r++)u.call(t,r)&&(i.push(String(r)),y(n,o++,t===e?t[r]:d(t[r])));n=b(n,t,m(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?b(e,t,m(t),r):d(t)}var O={};const A=async(e,t)=>{const r=[];let n=0;for(const o of e)r.push(await t(await o,n++));return r};(O=A).default=A;var j={};function w(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(e){if("string"==typeof e)return S(e,void 0);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,void 0):void 0}}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){c=!0,i=e},f:function(){try{s||null==r.return||r.return()}finally{if(c)throw i}}}}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var E=function e(t){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(!o(t))throw new Error("`err` must be an Error");if(!Array.isArray(r))throw new TypeError("`fields` must be an Array");const n={};var i,s=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(s.s();!(i=s.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){s.e(t)}finally{s.f()}return!n.name&&t.constructor.name&&(n.name=t.constructor.name),Array.isArray(t.errors)&&(n.errors=t.errors.map(t=>o(t)?e(t,r):t)),Array.isArray(r)&&r.length>0?n.filter(e=>r.includes(e)):n};const _=e=>"object"==typeof e||"function"==typeof e,T=(e,t)=>"__proto__"==e||"constructor"==e&&"function"==typeof t.constructor;var P=function(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:".";if(!_(e)||!t||!t.length)return e;const o=Array.isArray(t)?t:String(t).split(n);if(T(o[0],e))return e;const{length:i}=o;return 1===i?(e[o[0]]=r,e):((e,t,r,n)=>{let o=e,i=0;for(;i<r-1;i++){const e=t[i];T(e,o)||(o=_(o[e])?o[e]:o[e]={})}return o[t[i]]=n,e})(e,o,i,r)},k=function(e){return null!=e&&"object"==typeof e&&!1===Array.isArray(e)};function x(e,t,r){return"function"==typeof r.join?r.join(e):e[0]+t+e[1]}function I(e,t,r){return"function"!=typeof r.isValid||r.isValid(e,t)}function L(e){return k(e)||Array.isArray(e)||"function"==typeof e}var M=Object.prototype.toString;function F(e){return"function"==typeof e.constructor?e.constructor.name:null}var N=function e(t){switch(function(e){if(void 0===e)return"undefined";if(null===e)return"null";var t=typeof e;if("boolean"===t)return"boolean";if("string"===t)return"string";if("number"===t)return"number";if("symbol"===t)return"symbol";if("function"===t)return"GeneratorFunction"===F(e)?"generatorfunction":"function";if(function(e){return Array.isArray?Array.isArray(e):e instanceof Array}(e))return"array";if(function(e){return!(!e.constructor||"function"!=typeof e.constructor.isBuffer)&&e.constructor.isBuffer(e)}(e))return"buffer";if(function(e){try{if("number"==typeof e.length&&"function"==typeof e.callee)return!0}catch(t){if(-1!==t.message.indexOf("callee"))return!0}return!1}(e))return"arguments";if(function(e){return e instanceof Date||"function"==typeof e.toDateString&&"function"==typeof e.getDate&&"function"==typeof e.setDate}(e))return"date";if(function(e){return e instanceof Error||"string"==typeof e.message&&e.constructor&&"number"==typeof e.constructor.stackTraceLimit}(e))return"error";if(function(e){return e instanceof RegExp||"string"==typeof e.flags&&"boolean"==typeof e.ignoreCase&&"boolean"==typeof e.multiline&&"boolean"==typeof e.global}(e))return"regexp";switch(F(e)){case"Symbol":return"symbol";case"Promise":return"promise";case"WeakMap":return"weakmap";case"WeakSet":return"weakset";case"Map":return"map";case"Set":return"set";case"Int8Array":return"int8array";case"Uint8Array":return"uint8array";case"Uint8ClampedArray":return"uint8clampedarray";case"Int16Array":return"int16array";case"Uint16Array":return"uint16array";case"Int32Array":return"int32array";case"Uint32Array":return"uint32array";case"Float32Array":return"float32array";case"Float64Array":return"float64array"}if(function(e){return"function"==typeof e.throw&&"function"==typeof e.return&&"function"==typeof e.next}(e))return"generator";switch(t=M.call(e)){case"[object Object]":return"object";case"[object Map Iterator]":return"mapiterator";case"[object Set Iterator]":return"setiterator";case"[object String Iterator]":return"stringiterator";case"[object Array Iterator]":return"arrayiterator"}return t.slice(8,-1).toLowerCase().replace(/\s/g,"")}(t)){case"boolean":case"date":case"function":case"null":case"number":return!0;case"undefined":return!1;case"regexp":return"(?:)"!==t.source&&""!==t.source;case"buffer":return""!==t.toString();case"error":return""!==t.message;case"string":case"arguments":return 0!==t.length;case"file":case"map":case"set":return 0!==t.size;case"array":case"object":for(const r of Object.keys(t))if(e(t[r]))return!0;return!1;default:return!0}},D=function(e,t,r){return!(null==(n=e)||"object"!=typeof n&&"function"!=typeof n&&!Array.isArray(n)||"string"!=typeof t&&!Array.isArray(t))&&N(function(e,t,r){if(k(r)||(r={default:r}),!L(e))return void 0!==r.default?r.default:e;"number"==typeof t&&(t=String(t));const n=Array.isArray(t),o="string"==typeof t,i=r.separator||".",s=r.joinChar||("string"==typeof i?i:".");if(!o&&!n)return e;if(o&&t in e)return I(t,e,r)?e[t]:r.default;let c=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),f=c.length,a=0;do{let t=c[a];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),c[++a]||""],s,r);if(t in e){if(!I(t,e,r))return r.default;e=e[t]}else{let n=!1,o=a+1;for(;o<f;)if(n=(t=x([t,c[o++]],s,r))in e){if(!I(t,e,r))return r.default;e=e[t],a=o-1;break}if(!n)return r.default}}while(++a<f&&L(e));return a===f?e:r.default}(e,t,r));var n};const C=e=>{if((e=>"__proto__"===e||"constructor"===e||"prototype"===e)(e))throw new Error(`Cannot set unsafe key: "${e}"`)};var B=function(e,t){if(null==(r=e)||"object"!=typeof r||!1!==Array.isArray(r))throw new TypeError("expected an object.");var r,n=Array.isArray(t);if(!n&&e.hasOwnProperty(t))return delete e[t],!0;if(D(e,t)){for(var o=n?t.slice():t.split("."),i=o.pop();o.length&&"\\"===o[o.length-1].slice(-1);)i=o.pop().slice(0,-1)+"."+i;for(;o.length;)t=o.shift(),C(t),e=e[t];return delete e[i]}return!0},X={};Object.defineProperty(X,"__esModule",{value:!0}),X.boolean=void 0,X.boolean=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1"].includes(e.trim().toLowerCase());case"[object Number]":return 1===e.valueOf();case"[object Boolean]":return e.valueOf();default:return!1}};var H={};Object.defineProperty(H,"__esModule",{value:!0}),H.isBooleanable=void 0,H.isBooleanable=function(e){switch(Object.prototype.toString.call(e)){case"[object String]":return["true","t","yes","y","on","1","false","f","no","n","off","0"].includes(e.trim().toLowerCase());case"[object Number]":return[0,1].includes(e.valueOf());case"[object Boolean]":return!0;default:return!1}};var R={};Object.defineProperty(R,"__esModule",{value:!0}),R.boolean=void 0,Object.defineProperty(R,"boolean",{enumerable:!0,get:function(){return X.boolean}}),Object.defineProperty(R,"isBooleanable",{enumerable:!0,get:function(){return H.isBooleanable}});var U,K,W,z="12.2.0",$=U={};function V(){throw new Error("setTimeout has not been defined")}function G(){throw new Error("clearTimeout has not been defined")}function J(e){if(K===setTimeout)return setTimeout(e,0);if((K===V||!K)&&setTimeout)return K=setTimeout,setTimeout(e,0);try{return K(e,0)}catch(t){try{return K.call(null,e,0)}catch(t){return K.call(this,e,0)}}}!function(){try{K="function"==typeof setTimeout?setTimeout:V}catch(e){K=V}try{W="function"==typeof clearTimeout?clearTimeout:G}catch(e){W=G}}();var q,Q=[],Y=!1,Z=-1;function ee(){Y&&q&&(Y=!1,q.length?Q=q.concat(Q):Z=-1,Q.length&&te())}function te(){if(!Y){var e=J(ee);Y=!0;for(var t=Q.length;t;){for(q=Q,Q=[];++Z<t;)q&&q[Z].run();Z=-1,t=Q.length}q=null,Y=!1,function(e){if(W===clearTimeout)return clearTimeout(e);if((W===G||!W)&&clearTimeout)return W=clearTimeout,clearTimeout(e);try{W(e)}catch(t){try{return W.call(null,e)}catch(t){return W.call(this,e)}}}(e)}}function re(e,t){this.fun=e,this.array=t}function ne(){}$.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];Q.push(new re(e,t)),1!==Q.length||Y||J(te)},re.prototype.run=function(){this.fun.apply(null,this.array)},$.title="browser",$.browser=!0,$.env={},$.argv=[],$.version="",$.versions={},$.on=ne,$.addListener=ne,$.once=ne,$.off=ne,$.removeListener=ne,$.removeAllListeners=ne,$.emit=ne,$.prependListener=ne,$.prependOnceListener=ne,$.listeners=function(e){return[]},$.binding=function(e){throw new Error("process.binding is not supported")},$.cwd=function(){return"/"},$.chdir=function(e){throw new Error("process.chdir is not supported")},$.umask=function(){return 0};var oe={};return function(i){(function(){const{boolean:c}=R,f=Symbol.for("axe.silent"),a=new Set(["config","log"]),u=["trace","debug","info","warn","error","fatal"],p={warning:"warn",err:"error"},y="`level` invalid, must be: "+u.join(", "),m=i.env.HOSTNAME||e.hostname();function b(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e||s(e))}function A(e){return null==e||"object"==typeof e&&0===Reflect.ownKeys(e).length||"string"==typeof e&&0===e.trim().length}function w(e){return void 0===e}function S(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function _(e){return"string"==typeof e}oe=class{constructor(){var e=this;let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const r={};if(i.env.AXE_REMAPPED_META_FIELDS){const e=i.env.AXE_REMAPPED_META_FIELDS.split(",").map(e=>e.split(":"));for(const[t,n]of e)r[t]=n}let n=i.env.AXE_OMIT_META_FIELDS;"string"==typeof n&&(n=n.split(",").map(e=>e.trim())),Array.isArray(n)||(n=[]);let o=i.env.AXE_PICK_META_FIELDS;"string"==typeof o&&(o=o.split(",").map(e=>e.trim())),Array.isArray(o)||(o=[]),this.config=function(){const e=v(d(h),this!==g&&this||{},h);let t={_:{}};for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];for(const i of n)if(void 0!==i){if(!l(i))throw new TypeError("`"+i+"` is not an Option Object");t=v(t,{_:i},e)}return t._}({showStack:!i.env.AXE_SHOW_STACK||c(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||c(i.env.AXE_SHOW_META),remappedFields:r,omittedFields:n,pickedFields:o,cleanupRemapping:!0,hideHTTP:"is_http",hideMeta:"hide_meta"},"object"==typeof t.meta?t.meta:{}),version:z,silent:!1,logger:console,name:m,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||c(i.env.AXE_APP_INFO),hooks:Object.assign({pre:[],post:[]},"object"==typeof t.hooks?t.hooks:{})},t),this.appInfo=!!this.config.appInfo&&"function"==typeof j&&j(),this.log=this.log.bind(this);const s=Object.keys(this.config.logger).filter(e=>!a.has(e));for(const i of s)this[i]=this.config.logger[i];for(const i of u)"function"!=typeof this.config.logger[i]&&("fatal"===i?this.config.logger.fatal=this.config.logger.error||this.config.logger.info||this.config.logger.log:this.config.logger[i]=this.config.logger.info||this.config.logger.log),this[i]=function(){for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return e.log(i,...Array.prototype.slice.call(r))};this.setLevel=this.setLevel.bind(this),this.getNormalizedLevel=this.getNormalizedLevel.bind(this),this.setName=this.setName.bind(this),this.config.name&&this.setName(this.config.name),this.setLevel(this.config.level),this.err=this.error,this.warning=this.warn,this.pre=function(e,t){this.config.hooks.pre.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))},this.post=function(e,t){this.config.hooks.post.push((function(r){for(var n=arguments.length,o=new Array(n>1?n-1:0),i=1;i<n;i++)o[i-1]=arguments[i];return e!==r?[...o]:t(...o)}))}}setLevel(e){if(!_(e)||-1===u.indexOf(e))throw new Error(y);_(this.config.logger.logLevel)?this.config.logger.logLevel=e:this.config.logger.level=e,this.config.levels=u.slice(u.indexOf(e))}getNormalizedLevel(e){return _(e)?_(p[e])?p[e]:-1===u.indexOf(e)?"info":e:"info"}setName(e){if(!_(e))throw new Error("`name` must be a String");_(this.config.logger.scope)?this.config.logger.scope=e:this.config.logger.name=e}log(e,i,a){const l=[],y=[];w(e)||l.push(e),w(i)||l.push(i),w(a)||l.push(a);for(var g=arguments.length,h=new Array(g>3?g-3:0),m=3;m<g;m++)h[m-3]=arguments[m];for(const t of Array.prototype.slice.call(h))l.push(t);let d=0;if(_(e)&&_(p[e])?e=p[e]:o(e)?(a=i,i=e,e="error"):_(e)&&-1!==u.indexOf(e)||(a=i,i=e,e=this.getNormalizedLevel(e),d=-1),-1===this.config.levels.indexOf(e))return;let v,j=!1;if((S(i)||Array.isArray(i))&&_(a)){j=!0;const e=a;a=i,i=_(e)&&l.length>=3+d?t(...l.slice(2+d)):e}if(w(i)&&(i=e),1!==l.slice(1+d).length||_(i)||o(i))if(!j&&l.length>=4+d){i=void 0,a={};const r=[];for(const e of l)o(e)?y.push(e):_(e)&&r.push(e);0===y.length&&r.length>0?i=t(...r):y.length>0&&"log"===e&&(e="error")}else if(!j&&l.length===3+d&&_(i)&&r.some(e=>-1!==i.indexOf(e)))i=t(i,a),a={};else if(o(i)){if(o(a)){y.push(a);for(const e of l.slice(2+d))a!==e&&o(e)&&y.push(e);a={}}}else o(a)?(y.push(a),a={}):S(a)||w(a)||null===a?_(i)||(i=t(i)):(i=t(i,a),a={});else a={message:i},i=e;w(a)||S(a)?S(a)||(a={}):a={original_meta:a},o(i)&&(y.unshift(i),i=void 0),S(a.err)&&(o(a.err)&&y.push(a.err),a.original_err=o(a.err)?E(a.err):a.err),y.length>0&&(1===y.length?v=y[0]:((v=new Error([...new Set(y.map(e=>e.message).filter(Boolean))].join("; "))).stack=[...new Set(y.map(e=>e.stack).filter(Boolean))].join("\n\n"),v.errors=y),a.err=E(v),_(i)||(i=v.message)),a.level=e,this.appInfo&&(a.app=this.appInfo);const T=-1===d?"log":e;for(const t of this.config.hooks.pre)[v,i,a]=t(T,v,i,a);const k=c(a[f]);if(!A(this.config.meta.remappedFields))for(const t of Reflect.ownKeys(this.config.meta.remappedFields))if(P(a,this.config.meta.remappedFields[t],n(a,t)),B(a,t),this.config.meta.cleanupRemapping){const e=t.lastIndexOf(".");if(-1===e)continue;const r=t.slice(0,e);A(n(a,r))&&B(a,r)}if(!A(this.config.meta.omittedFields)||!A(this.config.meta.pickedFields)){const e=function(e){const t=[];return function e(r,n){for(const o of Reflect.ownKeys(r)){const i=r[o],c=s(o)?Symbol.keyFor(o)||o.description:o,f=n?n+"."+c:c;b(i)?(t.push(c),e(i,f)):t.push(f)}}(e),t}(a);if(!A(this.config.meta.omittedFields))for(const r of this.config.meta.omittedFields){let t=e.length;for(;t--;)(e[t]===r||!s(e[t])&&0===e[t].indexOf(r+"."))&&e.splice(t,1)}const t=[];if(!A(this.config.meta.pickedFields))for(const r of this.config.meta.pickedFields){if(s(r))a[r]&&t.push([r,a[r]]);else{const t=r.indexOf("."),n=r.slice(0,t+1);if(-1!==t){let t=e.length;for(;t--;)(e[t]===n.slice(0,-1)||0===e[t].indexOf(n))&&e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)s(r)?void 0!==a[r]&&t.push([r,a[r]]):void 0!==a[Symbol.for(r)]&&t.push([Symbol.for(r),a[Symbol.for(r)]]);if(a=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:".";if(o=e,"[object Object]"!==Object.prototype.toString.call(o)||!t||!Array.isArray(t)&&"string"!=typeof t)return{};var o;const{length:i}=t;if("string"==typeof t||i<2){const o="string"==typeof t?t:t[0],i=n(e,o,r);return void 0!==i?P({},o,i,r):{}}return((e,t,r,o)=>{const i={};for(let s=0;s<r;s++){const r=t[s],c=n(e,r,o);void 0!==c&&P(i,r,c,o)}return i})(e,t,i,r)}(a,e),t.length>0)for(const[r,n]of t)a[r]=n}return this.config.silent||k||(o(v)&&this.config.showStack?!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]?this.config.logger[T](v):this.config.logger[T](v,a):!this.config.meta.show||A(a)||this.config.meta.hideMeta&&a[this.config.meta.hideMeta]||this.config.meta.hideHTTP&&a[this.config.meta.hideHTTP]?this.config.logger[T](i):this.config.logger[T](i,a)),0===this.config.hooks.post.length?{method:T,err:v,message:i,meta:a}:O(this.config.hooks.post,e=>e(T,v,i,a)).then().catch(e=>{this.config.logger.error(e)})}}}).call(this)}.call(this,U),oe}));
|
package/lib/index.js
CHANGED
|
@@ -50,6 +50,7 @@ function dotifyToArray(obj) {
|
|
|
50
50
|
const newKey = current ? current + '.' + convertedKey : convertedKey; // joined key with dot
|
|
51
51
|
// if (value && typeof value === 'object' && !(value instanceof Date) && !ObjectID.isValid(value)) {
|
|
52
52
|
if (isPlainObject(value)) {
|
|
53
|
+
res.push(convertedKey);
|
|
53
54
|
recurse(value, newKey); // it's a nested object, so do it again
|
|
54
55
|
} else {
|
|
55
56
|
res.push(newKey);
|
|
@@ -68,7 +69,7 @@ function isNull(value) {
|
|
|
68
69
|
return value === null;
|
|
69
70
|
}
|
|
70
71
|
function isUndefined(value) {
|
|
71
|
-
return
|
|
72
|
+
return value === undefined;
|
|
72
73
|
}
|
|
73
74
|
function isObject(value) {
|
|
74
75
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
@@ -422,7 +423,7 @@ class Axe {
|
|
|
422
423
|
if (index !== -1) {
|
|
423
424
|
let i = dotified.length;
|
|
424
425
|
while (i--) {
|
|
425
|
-
if (
|
|
426
|
+
if (dotified[i] === key.slice(0, -1)) dotified.splice(i, 1);else if (dotified[i].indexOf(key) === 0) dotified.splice(i, 1);
|
|
426
427
|
}
|
|
427
428
|
}
|
|
428
429
|
}
|
|
@@ -439,7 +440,11 @@ class Axe {
|
|
|
439
440
|
// (and it doesn't also do bigints yet)
|
|
440
441
|
//
|
|
441
442
|
for (const prop of dotified) {
|
|
442
|
-
if (isSymbol(prop)
|
|
443
|
+
if (isSymbol(prop)) {
|
|
444
|
+
if (meta[prop] !== undefined) pickedSymbols.push([prop, meta[prop]]);
|
|
445
|
+
} else if (meta[Symbol.for(prop)] !== undefined) {
|
|
446
|
+
pickedSymbols.push([Symbol.for(prop), meta[Symbol.for(prop)]]);
|
|
447
|
+
}
|
|
443
448
|
}
|
|
444
449
|
|
|
445
450
|
//
|
|
@@ -495,4 +500,4 @@ class Axe {
|
|
|
495
500
|
}
|
|
496
501
|
}
|
|
497
502
|
module.exports = Axe;
|
|
498
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiY29udmVydGVkS2V5Iiwia2V5Rm9yIiwiZGVzY3JpcHRpb24iLCJuZXdLZXkiLCJwdXNoIiwiaXNFbXB0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInRyaW0iLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiQXhlIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsIl9sZW4iLCJhcmdzIiwiX2tleSIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsIl9sZW4yIiwiX2tleTIiLCJfbGVuMyIsIl9rZXkzIiwiaW5kZXhPZiIsIkVycm9yIiwibG9nTGV2ZWwiLCJzY29wZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbEFyZ3MiLCJlcnJvcnMiLCJfbGVuNCIsIl9rZXk0IiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcblxuY29uc3QgZm9ybWF0ID0gcmVxdWlyZSgnQGxhZGpzL2Zvcm1hdC11dGlsJyk7XG5jb25zdCBmb3JtYXRTcGVjaWZpZXJzID0gcmVxdWlyZSgnZm9ybWF0LXNwZWNpZmllcnMnKTtcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9nZXQnKTtcbmNvbnN0IGlzRXJyb3IgPSByZXF1aXJlKCdpc2Vycm9yJyk7XG5jb25zdCBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuY29uc3QgbWVyZ2VPcHRpb25zID0gcmVxdWlyZSgnbWVyZ2Utb3B0aW9ucycpO1xuY29uc3QgcE1hcFNlcmllcyA9IHJlcXVpcmUoJ3AtbWFwLXNlcmllcycpO1xuY29uc3QgcGFyc2VBcHBJbmZvID0gcmVxdWlyZSgncGFyc2UtYXBwLWluZm8nKTtcbmNvbnN0IHBhcnNlRXJyID0gcmVxdWlyZSgncGFyc2UtZXJyJyk7XG5jb25zdCBwaWNrRGVlcCA9IHJlcXVpcmUoJ3BpY2stZGVlcCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnQHN0cmlrZWVudGNvL3NldCcpO1xuY29uc3QgdW5zZXQgPSByZXF1aXJlKCd1bnNldC12YWx1ZScpO1xuY29uc3QgeyBib29sZWFuIH0gPSByZXF1aXJlKCdib29sZWFuJyk7XG5cbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBzaWxlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKCdheGUuc2lsZW50Jyk7XG5jb25zdCBvbWl0dGVkTG9nZ2VyS2V5cyA9IG5ldyBTZXQoWydjb25maWcnLCAnbG9nJ10pO1xuY29uc3QgbGV2ZWxzID0gWyd0cmFjZScsICdkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXTtcbmNvbnN0IGFsaWFzZXMgPSB7IHdhcm5pbmc6ICd3YXJuJywgZXJyOiAnZXJyb3InIH07XG5jb25zdCBsZXZlbEVycm9yID0gYFxcYGxldmVsXFxgIGludmFsaWQsIG11c3QgYmU6ICR7bGV2ZWxzLmpvaW4oJywgJyl9YDtcbmNvbnN0IG5hbWUgPVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgID8gZmFsc2VcbiAgICA6IHByb2Nlc3MuZW52LkhPU1ROQU1FIHx8IG9zLmhvc3RuYW1lKCk7XG5cbi8vIDxodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanM+XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJlxuICAgICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSAmJlxuICAgICFpc1N5bWJvbCh2YWx1ZSlcbiAgKTtcbn1cblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9HZWVuZW5UaWpkL2RvdGlmeS9ibG9iL21hc3Rlci9kb3RpZnkuanM+XG5mdW5jdGlvbiBkb3RpZnlUb0FycmF5KG9iaikge1xuICBjb25zdCByZXMgPSBbXTtcbiAgZnVuY3Rpb24gcmVjdXJzZShvYmosIGN1cnJlbnQpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMob2JqKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGNvbnN0IGNvbnZlcnRlZEtleSA9IGlzU3ltYm9sKGtleSlcbiAgICAgICAgPyBTeW1ib2wua2V5Rm9yKGtleSkgfHwga2V5LmRlc2NyaXB0aW9uXG4gICAgICAgIDoga2V5O1xuICAgICAgY29uc3QgbmV3S2V5ID0gY3VycmVudCA/IGN1cnJlbnQgKyAnLicgKyBjb252ZXJ0ZWRLZXkgOiBjb252ZXJ0ZWRLZXk7IC8vIGpvaW5lZCBrZXkgd2l0aCBkb3RcbiAgICAgIC8vIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSAmJiAhT2JqZWN0SUQuaXNWYWxpZCh2YWx1ZSkpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICByZWN1cnNlKHZhbHVlLCBuZXdLZXkpOyAvLyBpdCdzIGEgbmVzdGVkIG9iamVjdCwgc28gZG8gaXQgYWdhaW5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5wdXNoKG5ld0tleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVjdXJzZShvYmopO1xuICByZXR1cm4gcmVzO1xufVxuXG4vLyA8aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQzMjMzMTYzPlxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gKFxuICAgIHZhbHVlID09PSB1bmRlZmluZWQgfHxcbiAgICB2YWx1ZSA9PT0gbnVsbCB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIFJlZmxlY3Qub3duS2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSB8fFxuICAgICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPT09IDApXG4gICk7XG59XG5cbmZ1bmN0aW9uIGlzTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmNsYXNzIEF4ZSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0cnVjdG9yKGNvbmZpZyA9IHt9KSB7XG4gICAgY29uc3QgcmVtYXBwZWRGaWVsZHMgPSB7fTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTKSB7XG4gICAgICBjb25zdCBmaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFM7XG4gICAgICBjb25zdCBhcnIgPSBmaWVsZHMuc3BsaXQoJywnKS5tYXAoKHYpID0+IHYuc3BsaXQoJzonKSk7XG4gICAgICBmb3IgKGNvbnN0IFtwcm9wLCB2YWx1ZV0gb2YgYXJyKSB7XG4gICAgICAgIHJlbWFwcGVkRmllbGRzW3Byb3BdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZW52aWZ5IGRvZXMgbm90IHN1cHBvcnQgY29uZGl0aW9uYWxzIHdlbGwgZW5vdWdoIHNvIHdlIGRlY2xhcmUgdmFycyBvdXRzaWRlXG4gICAgbGV0IG9taXR0ZWRGaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfT01JVF9NRVRBX0ZJRUxEUztcbiAgICBpZiAodHlwZW9mIG9taXR0ZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgb21pdHRlZEZpZWxkcyA9IG9taXR0ZWRGaWVsZHMuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkob21pdHRlZEZpZWxkcykpIG9taXR0ZWRGaWVsZHMgPSBbXTtcblxuICAgIGxldCBwaWNrZWRGaWVsZHMgPSBwcm9jZXNzLmVudi5BWEVfUElDS19NRVRBX0ZJRUxEUztcbiAgICBpZiAodHlwZW9mIHBpY2tlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBwaWNrZWRGaWVsZHMgPSBwaWNrZWRGaWVsZHMuc3BsaXQoJywnKS5tYXAoKHMpID0+IHMudHJpbSgpKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGlja2VkRmllbGRzKSkgcGlja2VkRmllbGRzID0gW107XG5cbiAgICB0aGlzLmNvbmZpZyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIHtcbiAgICAgICAgc2hvd1N0YWNrOiBwcm9jZXNzLmVudi5BWEVfU0hPV19TVEFDS1xuICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19TVEFDSylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIG1ldGE6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2hvdzogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfTUVUQVxuICAgICAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfTUVUQSlcbiAgICAgICAgICAgICAgOiB0cnVlLFxuICAgICAgICAgICAgcmVtYXBwZWRGaWVsZHMsXG4gICAgICAgICAgICBvbWl0dGVkRmllbGRzLFxuICAgICAgICAgICAgcGlja2VkRmllbGRzLFxuICAgICAgICAgICAgY2xlYW51cFJlbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhpZGVIVFRQOiAnaXNfaHR0cCcsXG4gICAgICAgICAgICAvLyBpbXBsZW1lbnRlZCBtYWlubHkgZm9yIEBsYWRqcy9ncmFjZWZ1bCB0b1xuICAgICAgICAgICAgLy8gc3VwcHJlc3MgdW5uZWNlc3NhcnkgbWV0YSBvdXRwdXQgdG8gY29uc29sZVxuICAgICAgICAgICAgaGlkZU1ldGE6ICdoaWRlX21ldGEnXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLm1ldGEgPT09ICdvYmplY3QnID8gY29uZmlnLm1ldGEgOiB7fVxuICAgICAgICApLFxuICAgICAgICB2ZXJzaW9uOiBwa2cudmVyc2lvbixcbiAgICAgICAgc2lsZW50OiBmYWxzZSxcbiAgICAgICAgbG9nZ2VyOiBjb25zb2xlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBsZXZlbDogJ2luZm8nLFxuICAgICAgICBsZXZlbHM6IFsnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2ZhdGFsJ10sXG4gICAgICAgIGFwcEluZm86IHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GT1xuICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfQVBQX0lORk8pXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBob29rczogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBwcmU6IFtdLFxuICAgICAgICAgICAgcG9zdDogW11cbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcuaG9va3MgPT09ICdvYmplY3QnID8gY29uZmlnLmhvb2tzIDoge31cbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICB0aGlzLmFwcEluZm8gPSB0aGlzLmNvbmZpZy5hcHBJbmZvXG4gICAgICA/IGlzRnVuY3Rpb24ocGFyc2VBcHBJbmZvKVxuICAgICAgICA/IHBhcnNlQXBwSW5mbygpXG4gICAgICAgIDogZmFsc2VcbiAgICAgIDogZmFsc2U7XG5cbiAgICB0aGlzLmxvZyA9IHRoaXMubG9nLmJpbmQodGhpcyk7XG5cbiAgICAvLyBJbmhlcml0IG1ldGhvZHMgZnJvbSBwYXJlbnQgbG9nZ2VyXG4gICAgY29uc3QgbWV0aG9kcyA9IE9iamVjdC5rZXlzKHRoaXMuY29uZmlnLmxvZ2dlcikuZmlsdGVyKFxuICAgICAgKGtleSkgPT4gIW9taXR0ZWRMb2dnZXJLZXlzLmhhcyhrZXkpXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbWV0aG9kcykge1xuICAgICAgdGhpc1tlbGVtZW50XSA9IHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XTtcbiAgICB9XG5cbiAgICAvLyBCaW5kIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2ggbG9nIGxldmVsXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGxldmVscykge1xuICAgICAgLy8gRW5zdXJlIGZ1bmN0aW9uIGV4aXN0cyBpbiBsb2dnZXIgcGFzc2VkXG4gICAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoZWxlbWVudCA9PT0gJ2ZhdGFsJykge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5mYXRhbCA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IgfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlcltlbGVtZW50XSA9XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fCB0aGlzLmNvbmZpZy5sb2dnZXIubG9nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEJpbmQgbG9nIGhhbmRsZXIgd2hpY2ggbm9ybWFsaXplcyBhcmdzIGFuZCBwb3B1bGF0ZXMgbWV0YVxuICAgICAgdGhpc1tlbGVtZW50XSA9ICguLi5hcmdzKSA9PlxuICAgICAgICB0aGlzLmxvZyhlbGVtZW50LCAuLi5BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRMZXZlbCA9IHRoaXMuc2V0TGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zZXROYW1lID0gdGhpcy5zZXROYW1lLmJpbmQodGhpcyk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBuYW1lXG4gICAgaWYgKHRoaXMuY29uZmlnLm5hbWUpIHRoaXMuc2V0TmFtZSh0aGlzLmNvbmZpZy5uYW1lKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIGxldmVsXG4gICAgdGhpcy5zZXRMZXZlbCh0aGlzLmNvbmZpZy5sZXZlbCk7XG5cbiAgICAvLyBBbGlhc2VzXG4gICAgdGhpcy5lcnIgPSB0aGlzLmVycm9yO1xuICAgIHRoaXMud2FybmluZyA9IHRoaXMud2FybjtcblxuICAgIC8vIFByZSBhbmQgUG9zdCBIb29rc1xuICAgIHRoaXMucHJlID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucHJlLnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHRoaXMucG9zdCA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnBvc3QucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgc2V0TGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGxldmVsRXJyb3IpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYGxvZ0xldmVsYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwpKVxuICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsID0gbGV2ZWw7XG4gICAgZWxzZSB0aGlzLmNvbmZpZy5sb2dnZXIubGV2ZWwgPSBsZXZlbDtcbiAgICAvLyBBZGp1c3RzIGB0aGlzLmNvbmZpZy5sZXZlbHNgIGFycmF5XG4gICAgLy8gc28gdGhhdCBpdCBoYXMgYWxsIHByb2NlZWRpbmcgKGluY2x1c2l2ZSlcbiAgICB0aGlzLmNvbmZpZy5sZXZlbHMgPSBsZXZlbHMuc2xpY2UobGV2ZWxzLmluZGV4T2YobGV2ZWwpKTtcbiAgfVxuXG4gIGdldE5vcm1hbGl6ZWRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpKSByZXR1cm4gJ2luZm8nO1xuICAgIGlmIChpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHJldHVybiBhbGlhc2VzW2xldmVsXTtcbiAgICBpZiAobGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuICdpbmZvJztcbiAgICByZXR1cm4gbGV2ZWw7XG4gIH1cblxuICBzZXROYW1lKG5hbWUpIHtcbiAgICBpZiAoIWlzU3RyaW5nKG5hbWUpKSB0aHJvdyBuZXcgRXJyb3IoJ2BuYW1lYCBtdXN0IGJlIGEgU3RyaW5nJyk7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgc2NvcGVgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5zY29wZSkpIHRoaXMuY29uZmlnLmxvZ2dlci5zY29wZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLmNvbmZpZy5sb2dnZXIubmFtZSA9IG5hbWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBsb2cobGV2ZWwsIG1lc3NhZ2UsIG1ldGEsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCBvcmlnaW5hbEFyZ3MgPSBbXTtcbiAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKGxldmVsKSkgb3JpZ2luYWxBcmdzLnB1c2gobGV2ZWwpO1xuICAgIGlmICghaXNVbmRlZmluZWQobWVzc2FnZSkpIG9yaWdpbmFsQXJncy5wdXNoKG1lc3NhZ2UpO1xuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkpIG9yaWdpbmFsQXJncy5wdXNoKG1ldGEpO1xuICAgIGZvciAoY29uc3QgYXJnIG9mIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKSB7XG4gICAgICBvcmlnaW5hbEFyZ3MucHVzaChhcmcpO1xuICAgIH1cblxuICAgIGxldCBtb2RpZmllciA9IDA7XG5cbiAgICBpZiAoaXNTdHJpbmcobGV2ZWwpICYmIGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkge1xuICAgICAgbGV2ZWwgPSBhbGlhc2VzW2xldmVsXTtcbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobGV2ZWwpKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkge1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9IHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKTtcbiAgICAgIG1vZGlmaWVyID0gLTE7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGVhcmx5IGlmIGl0IGlzIG5vdCBhIHZhbGlkIGxvZ2dpbmcgbGV2ZWxcbiAgICBpZiAodGhpcy5jb25maWcubGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSkgcmV0dXJuO1xuXG4gICAgLy8gQnVueWFuIHN1cHBvcnQgKG1ldGEsIG1lc3NhZ2UsIC4uLmFyZ3MpXG4gICAgbGV0IGlzQnVueWFuID0gZmFsc2U7XG4gICAgaWYgKChpc09iamVjdChtZXNzYWdlKSB8fCBBcnJheS5pc0FycmF5KG1lc3NhZ2UpKSAmJiBpc1N0cmluZyhtZXRhKSkge1xuICAgICAgaXNCdW55YW4gPSB0cnVlO1xuICAgICAgY29uc3QgX21ldGEgPSBtZXRhO1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID1cbiAgICAgICAgaXNTdHJpbmcoX21ldGEpICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gMyArIG1vZGlmaWVyXG4gICAgICAgICAgPyBmb3JtYXQoLi4ub3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpXG4gICAgICAgICAgOiBfbWV0YTtcbiAgICB9XG5cbiAgICAvLyBJZiBtZXNzYWdlIHdhcyB1bmRlZmluZWQgdGhlbiBzZXQgaXQgdG8gbGV2ZWxcbiAgICBpZiAoaXNVbmRlZmluZWQobWVzc2FnZSkpIG1lc3NhZ2UgPSBsZXZlbDtcblxuICAgIC8vIElmIG9ubHkgYG1lc3NhZ2VgIHdhcyBwYXNzZWQgdGhlbiBpZiBpdCB3YXMgYW4gT2JqZWN0XG4gICAgLy8gcHJlc2VydmUgaXQgYXMgYW4gT2JqZWN0IGJ5IHNldHRpbmcgaXQgYXMgbWV0YVxuICAgIGlmIChcbiAgICAgIG9yaWdpbmFsQXJncy5zbGljZSgxICsgbW9kaWZpZXIpLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgIWlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICAhaXNFcnJvcihtZXNzYWdlKVxuICAgICkge1xuICAgICAgbWV0YSA9IHsgbWVzc2FnZSB9O1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgIH0gZWxzZSBpZiAoIWlzQnVueWFuICYmIG9yaWdpbmFsQXJncy5sZW5ndGggPj0gNCArIG1vZGlmaWVyKSB7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICBtZXRhID0ge307XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzKSB7XG4gICAgICAgIGlmIChpc0Vycm9yKGFyZykpIGVycm9ycy5wdXNoKGFyZyk7XG4gICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGFyZykpIG1lc3NhZ2VzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDAgJiYgbWVzc2FnZXMubGVuZ3RoID4gMClcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdCguLi5tZXNzYWdlcyk7XG4gICAgICBlbHNlIGlmIChlcnJvcnMubGVuZ3RoID4gMCAmJiBsZXZlbCA9PT0gJ2xvZycpIGxldmVsID0gJ2Vycm9yJztcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIWlzQnVueWFuICYmXG4gICAgICBvcmlnaW5hbEFyZ3MubGVuZ3RoID09PSAzICsgbW9kaWZpZXIgJiZcbiAgICAgIGlzU3RyaW5nKG1lc3NhZ2UpICYmXG4gICAgICBmb3JtYXRTcGVjaWZpZXJzLnNvbWUoKHQpID0+IG1lc3NhZ2UuaW5kZXhPZih0KSAhPT0gLTEpXG4gICAgKSB7XG4gICAgICAvLyBPdGhlcndpc2UgaWYgdGhlcmUgYXJlIHRocmVlIGFyZ3MgYW5kIGlmIHRoZSBgbWVzc2FnZWAgY29udGFpbnNcbiAgICAgIC8vIGEgcGxhY2Vob2xkZXIgdG9rZW4gKGUuZy4gJyVzJyBvciAnJWQnIC0gc2VlIGFib3ZlIGBmb3JtYXRTcGVjaWZpZXJzYCB2YXJpYWJsZSlcbiAgICAgIC8vIHRoZW4gd2UgY2FuIGluZmVyIHRoYXQgdGhlIGBtZXRhYCBhcmcgcGFzc2VkIGlzIHVzZWQgZm9yIGZvcm1hdHRpbmdcbiAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICBtZXRhID0ge307XG4gICAgfSBlbHNlIGlmICghaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpICYmICFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNOdWxsKG1ldGEpKSB7XG4gICAgICAgIC8vIElmIHRoZSBgbWV0YWAgdmFyaWFibGUgcGFzc2VkIHdhcyBub3QgYW4gT2JqZWN0IHRoZW4gY29udmVydCBpdFxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkge1xuICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBpcyBub3QgYSBzdHJpbmcgdGhlbiB3ZSBzaG91bGQgcnVuIGB1dGlsLmZvcm1hdGAgb24gaXRcbiAgICAgICAgLy8gYXNzdW1pbmcgd2UncmUgZm9ybWF0dGluZyBpdCBsaWtlIGl0IHdhcyBhbm90aGVyIGFyZ3VtZW50XG4gICAgICAgIC8vIChhcyBvcHBvc2VkIHRvIHVzaW5nIHNvbWV0aGluZyBsaWtlIGZhc3QtanNvbi1zdHJpbmdpZnkpXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgIC8vIGhhbmRsZSBhZGRpdGlvbmFsIGFyZ3NcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncy5zbGljZSgyICsgbW9kaWZpZXIpKSB7XG4gICAgICAgIC8vIHNob3VsZCBza2lwIHRoaXMgYmV0dGVyIHdpdGggc2xpY2UgYW5kIG1vZGlmaWVyIGFkanVzdG1lbnRcbiAgICAgICAgaWYgKG1ldGEgPT09IGFyZykgY29udGludWU7XG4gICAgICAgIGlmIChpc0Vycm9yKGFyZykpIGVycm9ycy5wdXNoKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc09iamVjdChtZXRhKSkgbWV0YSA9IHsgb3JpZ2luYWxfbWV0YTogbWV0YSB9O1xuICAgIGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSkgbWV0YSA9IHt9O1xuXG4gICAgaWYgKGlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGVycm9ycy51bnNoaWZ0KG1lc3NhZ2UpO1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIHJld3JpdGUgYG1ldGEuZXJyYCB0byBgbWV0YS5vcmlnaW5hbF9lcnJgIGZvciBjb25zaXN0ZW5jeVxuICAgIC8vIChpbiBjYXNlIHNvbWVvbmUgaGFzIGFuIG9iamVjdCB3aXRoIGAuZXJyYCBwcm9wZXJ0eSBvbiBpdCB3aXRoIGFuIGVycm9yKVxuICAgIC8vXG4gICAgaWYgKGlzT2JqZWN0KG1ldGEuZXJyKSkge1xuICAgICAgaWYgKGlzRXJyb3IobWV0YS5lcnIpKSBlcnJvcnMucHVzaChtZXRhLmVycik7XG4gICAgICBtZXRhLm9yaWdpbmFsX2VyciA9IGlzRXJyb3IobWV0YS5lcnIpID8gcGFyc2VFcnIobWV0YS5lcnIpIDogbWV0YS5lcnI7XG4gICAgfVxuXG4gICAgbGV0IGVycjtcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGVyciA9IGVycm9yc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICBbLi4ubmV3IFNldChlcnJvcnMubWFwKChlKSA9PiBlLm1lc3NhZ2UpLmZpbHRlcihCb29sZWFuKSldLmpvaW4oJzsgJylcbiAgICAgICAgKTtcbiAgICAgICAgZXJyLnN0YWNrID0gW1xuICAgICAgICAgIC4uLm5ldyBTZXQoZXJyb3JzLm1hcCgoZSkgPT4gZS5zdGFjaykuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgICBdLmpvaW4oJ1xcblxcbicpO1xuICAgICAgICBlcnIuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgfVxuXG4gICAgICBtZXRhLmVyciA9IHBhcnNlRXJyKGVycik7XG4gICAgICBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSBtZXNzYWdlID0gZXJyLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBOT1RFOiB0aGlzIHdhcyByZW1vdmVkIGluIHYxMC4yLjIgZHVlIHRvIGNpcmN1bGFyIHJlZmVyZW5jZSBpc3N1ZXNcbiAgICAvLyAgICAgICAodGhlIHdvcmthcm91bmQgd291bGQgaW52b2x2ZSBzYWZlU3RyaW5naWZ5IGFuZCB0aGVuIEpTT04ucGFyc2Ugd2hpY2ggd291bGQgYmUgcGVyZiBibG9hdClcbiAgICAvLyAgICAgICAodGhlcmUgc3RpbGwgbWlnaHQgYmUgYW5vdGhlciB3b3JrYXJvdW5kIG9yIHBlcmhhcHMgd2UgZG9uJ3QgYWRkIGFsbCB0aGUgYXJncyBoZXJlIGV4Y2VwdCBhZGRpdGlvbmFsKVxuICAgIC8vXG4gICAgLy8gU2V0IGBhcmdzYCBwcm9wIHdpdGggb3JpZ2luYWwgYXJndW1lbnRzIHBhc3NlZFxuICAgIC8vIG1ldGEuYXJncyA9IG9yaWdpbmFsQXJncztcblxuICAgIC8vIFNldCBkZWZhdWx0IGxldmVsIG9uIG1ldGFcbiAgICBtZXRhLmxldmVsID0gbGV2ZWw7XG5cbiAgICAvLyBBZGQgYGFwcGAgb2JqZWN0IHRvIG1ldGFkYXRhXG4gICAgaWYgKHRoaXMuYXBwSW5mbykgbWV0YS5hcHAgPSB0aGlzLmFwcEluZm87XG5cbiAgICAvL1xuICAgIC8vIGRldGVybWluZSBsb2cgbWV0aG9kIHRvIHVzZVxuICAgIC8vXG4gICAgLy8gaWYgd2UgZGlkbid0IHBhc3MgYSBsZXZlbCBhcyBhIG1ldGhvZFxuICAgIC8vIChlLmcuIGNvbnNvbGUuaW5mbyksIHRoZW4gd2Ugc2hvdWxkIHN0aWxsXG4gICAgLy8gdXNlIHRoZSBsb2dnZXIncyBgbG9nYCBtZXRob2QgdG8gb3V0cHV0XG4gICAgLy9cbiAgICAvLyBhbmQgZmF0YWwgc2hvdWxkIHVzZSBlcnJvciAoZS5nLiBpbiBicm93c2VyKVxuICAgIC8vXG4gICAgY29uc3QgbWV0aG9kID0gbW9kaWZpZXIgPT09IC0xID8gJ2xvZycgOiBsZXZlbDtcblxuICAgIC8vIHByZS1ob29rc1xuICAgIGZvciAoY29uc3QgaG9vayBvZiB0aGlzLmNvbmZpZy5ob29rcy5wcmUpIHtcbiAgICAgIFtlcnIsIG1lc3NhZ2UsIG1ldGFdID0gaG9vayhtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSk7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBOT1RFOiB1c2luZyBsb2Rhc2ggXy5vbWl0IGFuZCBfLnBpY2sgd291bGQgaGF2ZSBiZWVuIF92ZXJ5IHNsb3dfXG4gICAgLy9cbiAgICAvLyBjb25zdCBvbWl0dGVkQW5kUGlja2VkRmllbGRzID0ge1xuICAgIC8vICAgLi4uXy5vbWl0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcyksXG4gICAgLy8gICAuLi5fLnBpY2sobWV0YSwgdGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgLy8gfTtcbiAgICAvL1xuICAgIC8vIGFsc28gd2UgZG9uJ3Qgd2FudCB0byBtdXRhdGUgYW55dGhpbmcgaW4gYG1ldGFgXG4gICAgLy8gYW5kIGlkZWFsbHkgd2Ugb25seSB3YW50IHRvIHBpY2sgZXhhY3RseSB3aGF0IHdlIG5lZWRcbiAgICAvLyAoYW5kIG5vdCBoYXZlIHR3byBvcGVyYXRpb25zLCBvbmUgZm9yIG9taXQsIGFuZCBvbmUgZm9yIHBpY2spXG4gICAgLy9cblxuICAgIC8vIHNldCBhIGJvb2xlYW4gZmxhZyBpZiB3ZSBoYWQgdGhlIHNpbGVudCBzeW1ib2wgb3Igbm90XG4gICAgY29uc3QgaGFkVHJ1ZVNpbGVudFN5bWJvbCA9IGJvb2xlYW4obWV0YVtzaWxlbnRTeW1ib2xdKTtcblxuICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzKSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICAgIHNldChtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzW2tleV0sIGdldChtZXRhLCBrZXkpKTtcbiAgICAgICAgdW5zZXQobWV0YSwga2V5KTtcbiAgICAgICAgLy8gY2xlYW51cCBlbXB0eSBvYmplY3RzIGFmdGVyIHJlbWFwcGluZ1xuICAgICAgICBpZiAodGhpcy5jb25maWcubWV0YS5jbGVhbnVwUmVtYXBwaW5nKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXggPSBrZXkubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBwYXJlbnRLZXkgPSBrZXkuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgICAgIGlmIChpc0VtcHR5KGdldChtZXRhLCBwYXJlbnRLZXkpKSkgdW5zZXQobWV0YSwgcGFyZW50S2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcykgfHxcbiAgICAgICFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKVxuICAgICkge1xuICAgICAgY29uc3QgZG90aWZpZWQgPSBkb3RpZnlUb0FycmF5KG1ldGEpO1xuICAgICAgLy8gZG90aWZpZWQgPSBbXG4gICAgICAvLyAgICdlcnIubmFtZScsXG4gICAgICAvLyAgICdlcnIubWVzc2FnZScsXG4gICAgICAvLyAgICdlcnIuc3RhY2snLFxuICAgICAgLy8gICAnbGV2ZWwnLFxuICAgICAgLy8gICAnYXBwLm5hbWUnLFxuICAgICAgLy8gICAnYXBwLnZlcnNpb24nLFxuICAgICAgLy8gICAnYXBwLm5vZGUnLFxuICAgICAgLy8gICAnYXBwLmhhc2gnLFxuICAgICAgLy8gICAvLyAuLi5cbiAgICAgIC8vIF1cblxuICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEub21pdHRlZEZpZWxkcykge1xuICAgICAgICAgIC8vIDxodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvOTg4MjM0OT5cbiAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRvdGlmaWVkW2ldID09PSBwcm9wIHx8XG4gICAgICAgICAgICAgICghaXNTeW1ib2woZG90aWZpZWRbaV0pICYmIGRvdGlmaWVkW2ldLmluZGV4T2YoYCR7cHJvcH0uYCkgPT09IDApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIGRvdGlmaWVkLnNwbGljZShpLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGlja2VkU3ltYm9scyA9IFtdO1xuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykge1xuICAgICAgICAgIC8vIHJlc3BvbnNlLmhlYWRlcnMuYm9vcFxuICAgICAgICAgIC8vIHJlc3BvbnNlLmhlYWRlcnMuYmVlcFxuICAgICAgICAgIC8vIHJlc3BvbnNlLmJvZHlcbiAgICAgICAgICAvLyByZXNwb25zZS50ZXh0XG4gICAgICAgICAgLy8gcmVzcG9uc2VcbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gc3BsaXQgYnkgdGhlIGZpcnN0IHBlcmlvZCBhbmQgb21pdCBhbnkga2V5cyBmcm9tIGRvdGlmaWVkIHN0YXJ0aW5nIHdpdGggaXRcbiAgICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkpIHtcbiAgICAgICAgICAgIGlmIChtZXRhW3Byb3BdKSBwaWNrZWRTeW1ib2xzLnB1c2goW3Byb3AsIG1ldGFbcHJvcF1dKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBwcm9wLmluZGV4T2YoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHByb3Auc2xpY2UoMCwgaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgbGV0IGkgPSBkb3RpZmllZC5sZW5ndGg7XG4gICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3ltYm9sKGRvdGlmaWVkW2ldKSAmJiBkb3RpZmllZFtpXS5pbmRleE9mKGtleSkgPT09IDApXG4gICAgICAgICAgICAgICAgICBkb3RpZmllZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBmaW5hbGx5IGFkZCBpdCBpZiBpdCBkaWQgbm90IGFscmVhZHkgZXhpc3RcbiAgICAgICAgICBpZiAoZG90aWZpZWQuaW5kZXhPZihwcm9wKSA9PT0gLTEpIGRvdGlmaWVkLnB1c2gocHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciBhbGwgZG90aWZpZWQgdmFsdWVzIHRvIGNoZWNrIGZvciBzeW1ib2xzXG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBkb2VzIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGF0IHRoZXkgY291bGQgYWxyZWFkeSBiZSBpbiBgcGlja2VkU3ltYm9sc2BcbiAgICAgIC8vICAgICAgIChhbmQgaXQgZG9lc24ndCBhbHNvIGRvIGJpZ2ludHMgeWV0KVxuICAgICAgLy9cbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBkb3RpZmllZCkge1xuICAgICAgICBpZiAoaXNTeW1ib2wocHJvcCkgJiYgbWV0YVtwcm9wXSlcbiAgICAgICAgICBwaWNrZWRTeW1ib2xzLnB1c2goW3Byb3AsIG1ldGFbcHJvcF1dKTtcbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIG5vdyB3ZSBjYWxsIHBpY2stZGVlcCB1c2luZyB0aGUgZmluYWwgYXJyYXlcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHBpY2sgc3ltYm9scyBub3IgYmlnaW50c1xuICAgICAgLy9cbiAgICAgIG1ldGEgPSBwaWNrRGVlcChtZXRhLCBkb3RpZmllZCk7XG5cbiAgICAgIC8vXG4gICAgICAvLyBpZiB0aGVyZSB3ZXJlIGFueSB0b3AtbGV2ZWwgc3ltYm9scyB0byBiZVxuICAgICAgLy8gcGlja2VkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlbSBiYWNrIGhlcmUgdG8gdGhlIGxpc3RcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB3ZSdkIHByb2JhYmx5IHdhbnQgdG8gZG8gdGhlIHNhbWUgZm9yIGJpZ2ludHMgYXMgc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIGlmIChwaWNrZWRTeW1ib2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGlja2VkU3ltYm9scykge1xuICAgICAgICAgIG1ldGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb25seSBpbnZva2UgbG9nZ2VyIG1ldGhvZHMgaWYgaXQgd2FzIG5vdCBzaWxlbnRcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNpbGVudCAmJiAhaGFkVHJ1ZVNpbGVudFN5bWJvbCkge1xuICAgICAgLy8gU2hvdyBzdGFjayB0cmFjZSBpZiBuZWNlc3NhcnkgKGFsb25nIHdpdGggYW55IG1ldGFkYXRhKVxuICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiB0aGlzLmNvbmZpZy5zaG93U3RhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5tZXRhLnNob3cgfHwgaXNFbXB0eShtZXRhKSkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJlxuICAgICAgICAgIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YV1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbmZpZy5tZXRhLnNob3cgfHwgaXNFbXB0eShtZXRhKSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhICYmIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YV0pIHx8XG4gICAgICAgICh0aGlzLmNvbmZpZy5tZXRhLmhpZGVIVFRQICYmIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlSFRUUF0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlLCBtZXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwb3N0LWhvb2tzXG4gICAgaWYgKHRoaXMuY29uZmlnLmhvb2tzLnBvc3QubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHsgbWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEgfTtcbiAgICByZXR1cm4gcE1hcFNlcmllcyh0aGlzLmNvbmZpZy5ob29rcy5wb3N0LCAoaG9vaykgPT5cbiAgICAgIGhvb2sobWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEpXG4gICAgKVxuICAgICAgLnRoZW4oKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yKGVycik7XG4gICAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF4ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSxPQUFPLENBQUMsa0JBQWtCLENBQUM7O0FBRTNCO0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBSSxDQUFDO0FBRXhCLE1BQU1FLE1BQU0sR0FBR0YsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0FBQzVDLE1BQU1HLGdCQUFnQixHQUFHSCxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDckQsTUFBTUksR0FBRyxHQUFHSixPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDdkMsTUFBTUssT0FBTyxHQUFHTCxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1NLFFBQVEsR0FBR04sT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNyQyxNQUFNTyxZQUFZLEdBQUdQLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDN0MsTUFBTVEsVUFBVSxHQUFHUixPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFDLE1BQU1TLFlBQVksR0FBR1QsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzlDLE1BQU1VLFFBQVEsR0FBR1YsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNyQyxNQUFNVyxRQUFRLEdBQUdYLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDckMsTUFBTVksR0FBRyxHQUFHWixPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDdkMsTUFBTWEsS0FBSyxHQUFHYixPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3BDLE1B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
|
|
503
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwiY29udmVydGVkS2V5Iiwia2V5Rm9yIiwiZGVzY3JpcHRpb24iLCJuZXdLZXkiLCJwdXNoIiwiaXNFbXB0eSIsInVuZGVmaW5lZCIsImxlbmd0aCIsInRyaW0iLCJpc051bGwiLCJpc1VuZGVmaW5lZCIsImlzT2JqZWN0IiwiQXJyYXkiLCJpc0FycmF5IiwiaXNTdHJpbmciLCJpc0Z1bmN0aW9uIiwiQXhlIiwiY29uc3RydWN0b3IiLCJfdGhpcyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInJlbWFwcGVkRmllbGRzIiwiQVhFX1JFTUFQUEVEX01FVEFfRklFTERTIiwiZmllbGRzIiwiYXJyIiwic3BsaXQiLCJtYXAiLCJ2IiwicHJvcCIsIm9taXR0ZWRGaWVsZHMiLCJBWEVfT01JVF9NRVRBX0ZJRUxEUyIsInMiLCJwaWNrZWRGaWVsZHMiLCJBWEVfUElDS19NRVRBX0ZJRUxEUyIsInNob3dTdGFjayIsIkFYRV9TSE9XX1NUQUNLIiwibWV0YSIsImFzc2lnbiIsInNob3ciLCJBWEVfU0hPV19NRVRBIiwiY2xlYW51cFJlbWFwcGluZyIsImhpZGVIVFRQIiwiaGlkZU1ldGEiLCJ2ZXJzaW9uIiwic2lsZW50IiwibG9nZ2VyIiwiY29uc29sZSIsImxldmVsIiwiYXBwSW5mbyIsIkFYRV9BUFBfSU5GTyIsImhvb2tzIiwicHJlIiwicG9zdCIsImxvZyIsImJpbmQiLCJtZXRob2RzIiwia2V5cyIsImZpbHRlciIsImhhcyIsImVsZW1lbnQiLCJmYXRhbCIsImVycm9yIiwiaW5mbyIsIl9sZW4iLCJhcmdzIiwiX2tleSIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsIl9sZW4yIiwiX2tleTIiLCJfbGVuMyIsIl9rZXkzIiwiaW5kZXhPZiIsIkVycm9yIiwibG9nTGV2ZWwiLCJzY29wZSIsIm1lc3NhZ2UiLCJvcmlnaW5hbEFyZ3MiLCJlcnJvcnMiLCJfbGVuNCIsIl9rZXk0IiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IGZvcm1hdCA9IHJlcXVpcmUoJ0BsYWRqcy9mb3JtYXQtdXRpbCcpO1xuY29uc3QgZm9ybWF0U3BlY2lmaWVycyA9IHJlcXVpcmUoJ2Zvcm1hdC1zcGVjaWZpZXJzJyk7XG5jb25zdCBnZXQgPSByZXF1aXJlKCdAc3RyaWtlZW50Y28vZ2V0Jyk7XG5jb25zdCBpc0Vycm9yID0gcmVxdWlyZSgnaXNlcnJvcicpO1xuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcbmNvbnN0IG1lcmdlT3B0aW9ucyA9IHJlcXVpcmUoJ21lcmdlLW9wdGlvbnMnKTtcbmNvbnN0IHBNYXBTZXJpZXMgPSByZXF1aXJlKCdwLW1hcC1zZXJpZXMnKTtcbmNvbnN0IHBhcnNlQXBwSW5mbyA9IHJlcXVpcmUoJ3BhcnNlLWFwcC1pbmZvJyk7XG5jb25zdCBwYXJzZUVyciA9IHJlcXVpcmUoJ3BhcnNlLWVycicpO1xuY29uc3QgcGlja0RlZXAgPSByZXF1aXJlKCdwaWNrLWRlZXAnKTtcbmNvbnN0IHNldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9zZXQnKTtcbmNvbnN0IHVuc2V0ID0gcmVxdWlyZSgndW5zZXQtdmFsdWUnKTtcbmNvbnN0IHsgYm9vbGVhbiB9ID0gcmVxdWlyZSgnYm9vbGVhbicpO1xuY29uc3QgcGtnID0gcmVxdWlyZSgnLi4vcGFja2FnZS5qc29uJyk7XG5cbmNvbnN0IHNpbGVudFN5bWJvbCA9IFN5bWJvbC5mb3IoJ2F4ZS5zaWxlbnQnKTtcbmNvbnN0IG9taXR0ZWRMb2dnZXJLZXlzID0gbmV3IFNldChbJ2NvbmZpZycsICdsb2cnXSk7XG5jb25zdCBsZXZlbHMgPSBbJ3RyYWNlJywgJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddO1xuY29uc3QgYWxpYXNlcyA9IHsgd2FybmluZzogJ3dhcm4nLCBlcnI6ICdlcnJvcicgfTtcbmNvbnN0IGxldmVsRXJyb3IgPSBgXFxgbGV2ZWxcXGAgaW52YWxpZCwgbXVzdCBiZTogJHtsZXZlbHMuam9pbignLCAnKX1gO1xuY29uc3QgbmFtZSA9XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgPyBmYWxzZVxuICAgIDogcHJvY2Vzcy5lbnYuSE9TVE5BTUUgfHwgb3MuaG9zdG5hbWUoKTtcblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtcGxhaW4tb2JqL2Jsb2IvbWFpbi9pbmRleC5qcz5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICByZXR1cm4gKFxuICAgIChwcm90b3R5cGUgPT09IG51bGwgfHxcbiAgICAgIHByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fFxuICAgICAgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmXG4gICAgIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpICYmXG4gICAgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsdWUpICYmXG4gICAgIWlzU3ltYm9sKHZhbHVlKVxuICApO1xufVxuXG4vLyA8aHR0cHM6Ly9naXRodWIuY29tL0dlZW5lblRpamQvZG90aWZ5L2Jsb2IvbWFzdGVyL2RvdGlmeS5qcz5cbmZ1bmN0aW9uIGRvdGlmeVRvQXJyYXkob2JqKSB7XG4gIGNvbnN0IHJlcyA9IFtdO1xuICBmdW5jdGlvbiByZWN1cnNlKG9iaiwgY3VycmVudCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyhvYmopKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgICAgY29uc3QgY29udmVydGVkS2V5ID0gaXNTeW1ib2woa2V5KVxuICAgICAgICA/IFN5bWJvbC5rZXlGb3Ioa2V5KSB8fCBrZXkuZGVzY3JpcHRpb25cbiAgICAgICAgOiBrZXk7XG4gICAgICBjb25zdCBuZXdLZXkgPSBjdXJyZW50ID8gY3VycmVudCArICcuJyArIGNvbnZlcnRlZEtleSA6IGNvbnZlcnRlZEtleTsgLy8gam9pbmVkIGtleSB3aXRoIGRvdFxuICAgICAgLy8gaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpICYmICFPYmplY3RJRC5pc1ZhbGlkKHZhbHVlKSkge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHJlcy5wdXNoKGNvbnZlcnRlZEtleSk7XG4gICAgICAgIHJlY3Vyc2UodmFsdWUsIG5ld0tleSk7IC8vIGl0J3MgYSBuZXN0ZWQgb2JqZWN0LCBzbyBkbyBpdCBhZ2FpblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnB1c2gobmV3S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWN1cnNlKG9iaik7XG4gIHJldHVybiByZXM7XG59XG5cbi8vIDxodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDMyMzMxNjM+XG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgIHZhbHVlID09PSBudWxsIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5vd25LZXlzKHZhbHVlKS5sZW5ndGggPT09IDApIHx8XG4gICAgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA9PT0gMClcbiAgKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuY2xhc3MgQXhlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgY29uc3RydWN0b3IoY29uZmlnID0ge30pIHtcbiAgICBjb25zdCByZW1hcHBlZEZpZWxkcyA9IHt9O1xuICAgIGlmIChwcm9jZXNzLmVudi5BWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMpIHtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUztcbiAgICAgIGNvbnN0IGFyciA9IGZpZWxkcy5zcGxpdCgnLCcpLm1hcCgodikgPT4gdi5zcGxpdCgnOicpKTtcbiAgICAgIGZvciAoY29uc3QgW3Byb3AsIHZhbHVlXSBvZiBhcnIpIHtcbiAgICAgICAgcmVtYXBwZWRGaWVsZHNbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnZpZnkgZG9lcyBub3Qgc3VwcG9ydCBjb25kaXRpb25hbHMgd2VsbCBlbm91Z2ggc28gd2UgZGVjbGFyZSB2YXJzIG91dHNpZGVcbiAgICBsZXQgb21pdHRlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9PTUlUX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2Ygb21pdHRlZEZpZWxkcyA9PT0gJ3N0cmluZycpXG4gICAgICBvbWl0dGVkRmllbGRzID0gb21pdHRlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShvbWl0dGVkRmllbGRzKSkgb21pdHRlZEZpZWxkcyA9IFtdO1xuXG4gICAgbGV0IHBpY2tlZEZpZWxkcyA9IHByb2Nlc3MuZW52LkFYRV9QSUNLX01FVEFfRklFTERTO1xuICAgIGlmICh0eXBlb2YgcGlja2VkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIHBpY2tlZEZpZWxkcyA9IHBpY2tlZEZpZWxkcy5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaWNrZWRGaWVsZHMpKSBwaWNrZWRGaWVsZHMgPSBbXTtcblxuICAgIHRoaXMuY29uZmlnID0gbWVyZ2VPcHRpb25zKFxuICAgICAge1xuICAgICAgICBzaG93U3RhY2s6IHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX1NUQUNLKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgbWV0YTogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzaG93OiBwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBXG4gICAgICAgICAgICAgID8gYm9vbGVhbihwcm9jZXNzLmVudi5BWEVfU0hPV19NRVRBKVxuICAgICAgICAgICAgICA6IHRydWUsXG4gICAgICAgICAgICByZW1hcHBlZEZpZWxkcyxcbiAgICAgICAgICAgIG9taXR0ZWRGaWVsZHMsXG4gICAgICAgICAgICBwaWNrZWRGaWVsZHMsXG4gICAgICAgICAgICBjbGVhbnVwUmVtYXBwaW5nOiB0cnVlLFxuICAgICAgICAgICAgaGlkZUhUVFA6ICdpc19odHRwJyxcbiAgICAgICAgICAgIC8vIGltcGxlbWVudGVkIG1haW5seSBmb3IgQGxhZGpzL2dyYWNlZnVsIHRvXG4gICAgICAgICAgICAvLyBzdXBwcmVzcyB1bm5lY2Vzc2FyeSBtZXRhIG91dHB1dCB0byBjb25zb2xlXG4gICAgICAgICAgICBoaWRlTWV0YTogJ2hpZGVfbWV0YSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIHR5cGVvZiBjb25maWcubWV0YSA9PT0gJ29iamVjdCcgPyBjb25maWcubWV0YSA6IHt9XG4gICAgICAgICksXG4gICAgICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICAgICAgICBzaWxlbnQ6IGZhbHNlLFxuICAgICAgICBsb2dnZXI6IGNvbnNvbGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGxldmVsOiAnaW5mbycsXG4gICAgICAgIGxldmVsczogWydpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXSxcbiAgICAgICAgYXBwSW5mbzogcHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPXG4gICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9BUFBfSU5GTylcbiAgICAgICAgICA6IHRydWUsXG4gICAgICAgIGhvb2tzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZTogW10sXG4gICAgICAgICAgICBwb3N0OiBbXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5ob29rcyA9PT0gJ29iamVjdCcgPyBjb25maWcuaG9va3MgOiB7fVxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgY29uZmlnXG4gICAgKTtcblxuICAgIHRoaXMuYXBwSW5mbyA9IHRoaXMuY29uZmlnLmFwcEluZm9cbiAgICAgID8gaXNGdW5jdGlvbihwYXJzZUFwcEluZm8pXG4gICAgICAgID8gcGFyc2VBcHBJbmZvKClcbiAgICAgICAgOiBmYWxzZVxuICAgICAgOiBmYWxzZTtcblxuICAgIHRoaXMubG9nID0gdGhpcy5sb2cuYmluZCh0aGlzKTtcblxuICAgIC8vIEluaGVyaXQgbWV0aG9kcyBmcm9tIHBhcmVudCBsb2dnZXJcbiAgICBjb25zdCBtZXRob2RzID0gT2JqZWN0LmtleXModGhpcy5jb25maWcubG9nZ2VyKS5maWx0ZXIoXG4gICAgICAoa2V5KSA9PiAhb21pdHRlZExvZ2dlcktleXMuaGFzKGtleSlcbiAgICApO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBtZXRob2RzKSB7XG4gICAgICB0aGlzW2VsZW1lbnRdID0gdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdO1xuICAgIH1cblxuICAgIC8vIEJpbmQgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaCBsb2cgbGV2ZWxcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgbGV2ZWxzKSB7XG4gICAgICAvLyBFbnN1cmUgZnVuY3Rpb24gZXhpc3RzIGluIGxvZ2dlciBwYXNzZWRcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSAnZmF0YWwnKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmZhdGFsID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvciB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHxcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW2VsZW1lbnRdID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5pbmZvIHx8IHRoaXMuY29uZmlnLmxvZ2dlci5sb2c7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQmluZCBsb2cgaGFuZGxlciB3aGljaCBub3JtYWxpemVzIGFyZ3MgYW5kIHBvcHVsYXRlcyBtZXRhXG4gICAgICB0aGlzW2VsZW1lbnRdID0gKC4uLmFyZ3MpID0+XG4gICAgICAgIHRoaXMubG9nKGVsZW1lbnQsIC4uLkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldExldmVsID0gdGhpcy5zZXRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0Tm9ybWFsaXplZExldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwuYmluZCh0aGlzKTtcbiAgICB0aGlzLnNldE5hbWUgPSB0aGlzLnNldE5hbWUuYmluZCh0aGlzKTtcblxuICAgIC8vIFNldCB0aGUgbG9nZ2VyIG5hbWVcbiAgICBpZiAodGhpcy5jb25maWcubmFtZSkgdGhpcy5zZXROYW1lKHRoaXMuY29uZmlnLm5hbWUpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbGV2ZWxcbiAgICB0aGlzLnNldExldmVsKHRoaXMuY29uZmlnLmxldmVsKTtcblxuICAgIC8vIEFsaWFzZXNcbiAgICB0aGlzLmVyciA9IHRoaXMuZXJyb3I7XG4gICAgdGhpcy53YXJuaW5nID0gdGhpcy53YXJuO1xuXG4gICAgLy8gUHJlIGFuZCBQb3N0IEhvb2tzXG4gICAgdGhpcy5wcmUgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wcmUucHVzaChmdW5jdGlvbiAoX2xldmVsLCAuLi5hcmdzKSB7XG4gICAgICAgIGlmIChsZXZlbCAhPT0gX2xldmVsKSByZXR1cm4gWy4uLmFyZ3NdO1xuICAgICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgdGhpcy5wb3N0ID0gZnVuY3Rpb24gKGxldmVsLCBmbikge1xuICAgICAgdGhpcy5jb25maWcuaG9va3MucG9zdC5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzZXRMZXZlbChsZXZlbCkge1xuICAgIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobGV2ZWxFcnJvcik7XG4gICAgLy8gU3VwcG9ydCBzaWduYWxlIGxvZ2dlciBhbmQgb3RoZXIgbG9nZ2VycyB0aGF0IHVzZSBgbG9nTGV2ZWxgXG4gICAgaWYgKGlzU3RyaW5nKHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCkpXG4gICAgICB0aGlzLmNvbmZpZy5sb2dnZXIubG9nTGV2ZWwgPSBsZXZlbDtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5sZXZlbCA9IGxldmVsO1xuICAgIC8vIEFkanVzdHMgYHRoaXMuY29uZmlnLmxldmVsc2AgYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0IGhhcyBhbGwgcHJvY2VlZGluZyAoaW5jbHVzaXZlKVxuICAgIHRoaXMuY29uZmlnLmxldmVscyA9IGxldmVscy5zbGljZShsZXZlbHMuaW5kZXhPZihsZXZlbCkpO1xuICB9XG5cbiAgZ2V0Tm9ybWFsaXplZExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkpIHJldHVybiAnaW5mbyc7XG4gICAgaWYgKGlzU3RyaW5nKGFsaWFzZXNbbGV2ZWxdKSkgcmV0dXJuIGFsaWFzZXNbbGV2ZWxdO1xuICAgIGlmIChsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm4gJ2luZm8nO1xuICAgIHJldHVybiBsZXZlbDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIGlmICghaXNTdHJpbmcobmFtZSkpIHRocm93IG5ldyBFcnJvcignYG5hbWVgIG11c3QgYmUgYSBTdHJpbmcnKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBzY29wZWBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLnNjb3BlKSkgdGhpcy5jb25maWcubG9nZ2VyLnNjb3BlID0gbmFtZTtcbiAgICBlbHNlIHRoaXMuY29uZmlnLmxvZ2dlci5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGxvZyhsZXZlbCwgbWVzc2FnZSwgbWV0YSwgLi4uYXJncykge1xuICAgIGNvbnN0IG9yaWdpbmFsQXJncyA9IFtdO1xuICAgIGNvbnN0IGVycm9ycyA9IFtdO1xuICAgIGlmICghaXNVbmRlZmluZWQobGV2ZWwpKSBvcmlnaW5hbEFyZ3MucHVzaChsZXZlbCk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXNzYWdlKSkgb3JpZ2luYWxBcmdzLnB1c2gobWVzc2FnZSk7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSkgb3JpZ2luYWxBcmdzLnB1c2gobWV0YSk7XG4gICAgZm9yIChjb25zdCBhcmcgb2YgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpIHtcbiAgICAgIG9yaWdpbmFsQXJncy5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgbGV0IG1vZGlmaWVyID0gMDtcblxuICAgIGlmIChpc1N0cmluZyhsZXZlbCkgJiYgaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSB7XG4gICAgICBsZXZlbCA9IGFsaWFzZXNbbGV2ZWxdO1xuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihsZXZlbCkpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKGxldmVsKSB8fCBsZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSB7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICAgIGxldmVsID0gdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpO1xuICAgICAgbW9kaWZpZXIgPSAtMTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gZWFybHkgaWYgaXQgaXMgbm90IGEgdmFsaWQgbG9nZ2luZyBsZXZlbFxuICAgIGlmICh0aGlzLmNvbmZpZy5sZXZlbHMuaW5kZXhPZihsZXZlbCkgPT09IC0xKSByZXR1cm47XG5cbiAgICAvLyBCdW55YW4gc3VwcG9ydCAobWV0YSwgbWVzc2FnZSwgLi4uYXJncylcbiAgICBsZXQgaXNCdW55YW4gPSBmYWxzZTtcbiAgICBpZiAoKGlzT2JqZWN0KG1lc3NhZ2UpIHx8IEFycmF5LmlzQXJyYXkobWVzc2FnZSkpICYmIGlzU3RyaW5nKG1ldGEpKSB7XG4gICAgICBpc0J1bnlhbiA9IHRydWU7XG4gICAgICBjb25zdCBfbWV0YSA9IG1ldGE7XG4gICAgICBtZXRhID0gbWVzc2FnZTtcbiAgICAgIG1lc3NhZ2UgPVxuICAgICAgICBpc1N0cmluZyhfbWV0YSkgJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSAzICsgbW9kaWZpZXJcbiAgICAgICAgICA/IGZvcm1hdCguLi5vcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSlcbiAgICAgICAgICA6IF9tZXRhO1xuICAgIH1cblxuICAgIC8vIElmIG1lc3NhZ2Ugd2FzIHVuZGVmaW5lZCB0aGVuIHNldCBpdCB0byBsZXZlbFxuICAgIGlmIChpc1VuZGVmaW5lZChtZXNzYWdlKSkgbWVzc2FnZSA9IGxldmVsO1xuXG4gICAgLy8gSWYgb25seSBgbWVzc2FnZWAgd2FzIHBhc3NlZCB0aGVuIGlmIGl0IHdhcyBhbiBPYmplY3RcbiAgICAvLyBwcmVzZXJ2ZSBpdCBhcyBhbiBPYmplY3QgYnkgc2V0dGluZyBpdCBhcyBtZXRhXG4gICAgaWYgKFxuICAgICAgb3JpZ2luYWxBcmdzLnNsaWNlKDEgKyBtb2RpZmllcikubGVuZ3RoID09PSAxICYmXG4gICAgICAhaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgICFpc0Vycm9yKG1lc3NhZ2UpXG4gICAgKSB7XG4gICAgICBtZXRhID0geyBtZXNzYWdlIH07XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgfSBlbHNlIGlmICghaXNCdW55YW4gJiYgb3JpZ2luYWxBcmdzLmxlbmd0aCA+PSA0ICsgbW9kaWZpZXIpIHtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgIG1ldGEgPSB7fTtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3MpIHtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoYXJnKSkgbWVzc2FnZXMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCAmJiBtZXNzYWdlcy5sZW5ndGggPiAwKVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KC4uLm1lc3NhZ2VzKTtcbiAgICAgIGVsc2UgaWYgKGVycm9ycy5sZW5ndGggPiAwICYmIGxldmVsID09PSAnbG9nJykgbGV2ZWwgPSAnZXJyb3InO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhaXNCdW55YW4gJiZcbiAgICAgIG9yaWdpbmFsQXJncy5sZW5ndGggPT09IDMgKyBtb2RpZmllciAmJlxuICAgICAgaXNTdHJpbmcobWVzc2FnZSkgJiZcbiAgICAgIGZvcm1hdFNwZWNpZmllcnMuc29tZSgodCkgPT4gbWVzc2FnZS5pbmRleE9mKHQpICE9PSAtMSlcbiAgICApIHtcbiAgICAgIC8vIE90aGVyd2lzZSBpZiB0aGVyZSBhcmUgdGhyZWUgYXJncyBhbmQgaWYgdGhlIGBtZXNzYWdlYCBjb250YWluc1xuICAgICAgLy8gYSBwbGFjZWhvbGRlciB0b2tlbiAoZS5nLiAnJXMnIG9yICclZCcgLSBzZWUgYWJvdmUgYGZvcm1hdFNwZWNpZmllcnNgIHZhcmlhYmxlKVxuICAgICAgLy8gdGhlbiB3ZSBjYW4gaW5mZXIgdGhhdCB0aGUgYG1ldGFgIGFyZyBwYXNzZWQgaXMgdXNlZCBmb3IgZm9ybWF0dGluZ1xuICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgIG1ldGEgPSB7fTtcbiAgICB9IGVsc2UgaWYgKCFpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgICBlcnJvcnMucHVzaChtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNPYmplY3QobWV0YSkgJiYgIWlzVW5kZWZpbmVkKG1ldGEpICYmICFpc051bGwobWV0YSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIGBtZXRhYCB2YXJpYWJsZSBwYXNzZWQgd2FzIG5vdCBhbiBPYmplY3QgdGhlbiBjb252ZXJ0IGl0XG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQobWVzc2FnZSwgbWV0YSk7XG4gICAgICAgIG1ldGEgPSB7fTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG1lc3NhZ2UpKSB7XG4gICAgICAgIC8vIElmIHRoZSBtZXNzYWdlIGlzIG5vdCBhIHN0cmluZyB0aGVuIHdlIHNob3VsZCBydW4gYHV0aWwuZm9ybWF0YCBvbiBpdFxuICAgICAgICAvLyBhc3N1bWluZyB3ZSdyZSBmb3JtYXR0aW5nIGl0IGxpa2UgaXQgd2FzIGFub3RoZXIgYXJndW1lbnRcbiAgICAgICAgLy8gKGFzIG9wcG9zZWQgdG8gdXNpbmcgc29tZXRoaW5nIGxpa2UgZmFzdC1qc29uLXN0cmluZ2lmeSlcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXJyb3IobWV0YSkpIHtcbiAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgLy8gaGFuZGxlIGFkZGl0aW9uYWwgYXJnc1xuICAgICAgZm9yIChjb25zdCBhcmcgb2Ygb3JpZ2luYWxBcmdzLnNsaWNlKDIgKyBtb2RpZmllcikpIHtcbiAgICAgICAgLy8gc2hvdWxkIHNraXAgdGhpcyBiZXR0ZXIgd2l0aCBzbGljZSBhbmQgbW9kaWZpZXIgYWRqdXN0bWVudFxuICAgICAgICBpZiAobWV0YSA9PT0gYXJnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzRXJyb3IoYXJnKSkgZXJyb3JzLnB1c2goYXJnKTtcbiAgICAgIH1cblxuICAgICAgbWV0YSA9IHt9O1xuICAgIH1cblxuICAgIGlmICghaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0geyBvcmlnaW5hbF9tZXRhOiBtZXRhIH07XG4gICAgZWxzZSBpZiAoIWlzT2JqZWN0KG1ldGEpKSBtZXRhID0ge307XG5cbiAgICBpZiAoaXNFcnJvcihtZXNzYWdlKSkge1xuICAgICAgZXJyb3JzLnVuc2hpZnQobWVzc2FnZSk7XG4gICAgICBtZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gcmV3cml0ZSBgbWV0YS5lcnJgIHRvIGBtZXRhLm9yaWdpbmFsX2VycmAgZm9yIGNvbnNpc3RlbmN5XG4gICAgLy8gKGluIGNhc2Ugc29tZW9uZSBoYXMgYW4gb2JqZWN0IHdpdGggYC5lcnJgIHByb3BlcnR5IG9uIGl0IHdpdGggYW4gZXJyb3IpXG4gICAgLy9cbiAgICBpZiAoaXNPYmplY3QobWV0YS5lcnIpKSB7XG4gICAgICBpZiAoaXNFcnJvcihtZXRhLmVycikpIGVycm9ycy5wdXNoKG1ldGEuZXJyKTtcbiAgICAgIG1ldGEub3JpZ2luYWxfZXJyID0gaXNFcnJvcihtZXRhLmVycikgPyBwYXJzZUVycihtZXRhLmVycikgOiBtZXRhLmVycjtcbiAgICB9XG5cbiAgICBsZXQgZXJyO1xuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZXJyID0gZXJyb3JzWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyID0gbmV3IEVycm9yKFxuICAgICAgICAgIFsuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUubWVzc2FnZSkuZmlsdGVyKEJvb2xlYW4pKV0uam9pbignOyAnKVxuICAgICAgICApO1xuICAgICAgICBlcnIuc3RhY2sgPSBbXG4gICAgICAgICAgLi4ubmV3IFNldChlcnJvcnMubWFwKChlKSA9PiBlLnN0YWNrKS5maWx0ZXIoQm9vbGVhbikpXG4gICAgICAgIF0uam9pbignXFxuXFxuJyk7XG4gICAgICAgIGVyci5lcnJvcnMgPSBlcnJvcnM7XG4gICAgICB9XG5cbiAgICAgIG1ldGEuZXJyID0gcGFyc2VFcnIoZXJyKTtcbiAgICAgIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIG1lc3NhZ2UgPSBlcnIubWVzc2FnZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHRoaXMgd2FzIHJlbW92ZWQgaW4gdjEwLjIuMiBkdWUgdG8gY2lyY3VsYXIgcmVmZXJlbmNlIGlzc3Vlc1xuICAgIC8vICAgICAgICh0aGUgd29ya2Fyb3VuZCB3b3VsZCBpbnZvbHZlIHNhZmVTdHJpbmdpZnkgYW5kIHRoZW4gSlNPTi5wYXJzZSB3aGljaCB3b3VsZCBiZSBwZXJmIGJsb2F0KVxuICAgIC8vICAgICAgICh0aGVyZSBzdGlsbCBtaWdodCBiZSBhbm90aGVyIHdvcmthcm91bmQgb3IgcGVyaGFwcyB3ZSBkb24ndCBhZGQgYWxsIHRoZSBhcmdzIGhlcmUgZXhjZXB0IGFkZGl0aW9uYWwpXG4gICAgLy9cbiAgICAvLyBTZXQgYGFyZ3NgIHByb3Agd2l0aCBvcmlnaW5hbCBhcmd1bWVudHMgcGFzc2VkXG4gICAgLy8gbWV0YS5hcmdzID0gb3JpZ2luYWxBcmdzO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgbGV2ZWwgb24gbWV0YVxuICAgIG1ldGEubGV2ZWwgPSBsZXZlbDtcblxuICAgIC8vIEFkZCBgYXBwYCBvYmplY3QgdG8gbWV0YWRhdGFcbiAgICBpZiAodGhpcy5hcHBJbmZvKSBtZXRhLmFwcCA9IHRoaXMuYXBwSW5mbztcblxuICAgIC8vXG4gICAgLy8gZGV0ZXJtaW5lIGxvZyBtZXRob2QgdG8gdXNlXG4gICAgLy9cbiAgICAvLyBpZiB3ZSBkaWRuJ3QgcGFzcyBhIGxldmVsIGFzIGEgbWV0aG9kXG4gICAgLy8gKGUuZy4gY29uc29sZS5pbmZvKSwgdGhlbiB3ZSBzaG91bGQgc3RpbGxcbiAgICAvLyB1c2UgdGhlIGxvZ2dlcidzIGBsb2dgIG1ldGhvZCB0byBvdXRwdXRcbiAgICAvL1xuICAgIC8vIGFuZCBmYXRhbCBzaG91bGQgdXNlIGVycm9yIChlLmcuIGluIGJyb3dzZXIpXG4gICAgLy9cbiAgICBjb25zdCBtZXRob2QgPSBtb2RpZmllciA9PT0gLTEgPyAnbG9nJyA6IGxldmVsO1xuXG4gICAgLy8gcHJlLWhvb2tzXG4gICAgZm9yIChjb25zdCBob29rIG9mIHRoaXMuY29uZmlnLmhvb2tzLnByZSkge1xuICAgICAgW2VyciwgbWVzc2FnZSwgbWV0YV0gPSBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIE5PVEU6IHVzaW5nIGxvZGFzaCBfLm9taXQgYW5kIF8ucGljayB3b3VsZCBoYXZlIGJlZW4gX3Zlcnkgc2xvd19cbiAgICAvL1xuICAgIC8vIGNvbnN0IG9taXR0ZWRBbmRQaWNrZWRGaWVsZHMgPSB7XG4gICAgLy8gICAuLi5fLm9taXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSxcbiAgICAvLyAgIC4uLl8ucGljayhtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICAvLyB9O1xuICAgIC8vXG4gICAgLy8gYWxzbyB3ZSBkb24ndCB3YW50IHRvIG11dGF0ZSBhbnl0aGluZyBpbiBgbWV0YWBcbiAgICAvLyBhbmQgaWRlYWxseSB3ZSBvbmx5IHdhbnQgdG8gcGljayBleGFjdGx5IHdoYXQgd2UgbmVlZFxuICAgIC8vIChhbmQgbm90IGhhdmUgdHdvIG9wZXJhdGlvbnMsIG9uZSBmb3Igb21pdCwgYW5kIG9uZSBmb3IgcGljaylcbiAgICAvL1xuXG4gICAgLy8gc2V0IGEgYm9vbGVhbiBmbGFnIGlmIHdlIGhhZCB0aGUgc2lsZW50IHN5bWJvbCBvciBub3RcbiAgICBjb25zdCBoYWRUcnVlU2lsZW50U3ltYm9sID0gYm9vbGVhbihtZXRhW3NpbGVudFN5bWJvbF0pO1xuXG4gICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHMpKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXModGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgICAgc2V0KG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucmVtYXBwZWRGaWVsZHNba2V5XSwgZ2V0KG1ldGEsIGtleSkpO1xuICAgICAgICB1bnNldChtZXRhLCBrZXkpO1xuICAgICAgICAvLyBjbGVhbnVwIGVtcHR5IG9iamVjdHMgYWZ0ZXIgcmVtYXBwaW5nXG4gICAgICAgIGlmICh0aGlzLmNvbmZpZy5tZXRhLmNsZWFudXBSZW1hcHBpbmcpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGtleS5zbGljZSgwLCBpbmRleCk7XG4gICAgICAgICAgaWYgKGlzRW1wdHkoZ2V0KG1ldGEsIHBhcmVudEtleSkpKSB1bnNldChtZXRhLCBwYXJlbnRLZXkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB8fFxuICAgICAgIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpXG4gICAgKSB7XG4gICAgICBjb25zdCBkb3RpZmllZCA9IGRvdGlmeVRvQXJyYXkobWV0YSk7XG4gICAgICAvLyBkb3RpZmllZCA9IFtcbiAgICAgIC8vICAgJ2Vyci5uYW1lJyxcbiAgICAgIC8vICAgJ2Vyci5tZXNzYWdlJyxcbiAgICAgIC8vICAgJ2Vyci5zdGFjaycsXG4gICAgICAvLyAgICdsZXZlbCcsXG4gICAgICAvLyAgICdhcHAubmFtZScsXG4gICAgICAvLyAgICdhcHAudmVyc2lvbicsXG4gICAgICAvLyAgICdhcHAubm9kZScsXG4gICAgICAvLyAgICdhcHAuaGFzaCcsXG4gICAgICAvLyAgIC8vIC4uLlxuICAgICAgLy8gXVxuXG4gICAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5vbWl0dGVkRmllbGRzKSB7XG4gICAgICAgICAgLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS85ODgyMzQ5PlxuICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZG90aWZpZWRbaV0gPT09IHByb3AgfHxcbiAgICAgICAgICAgICAgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihgJHtwcm9wfS5gKSA9PT0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaWNrZWRTeW1ib2xzID0gW107XG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcykpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSB7XG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5ib29wXG4gICAgICAgICAgLy8gcmVzcG9uc2UuaGVhZGVycy5iZWVwXG4gICAgICAgICAgLy8gcmVzcG9uc2UuYm9keVxuICAgICAgICAgIC8vIHJlc3BvbnNlLnRleHRcbiAgICAgICAgICAvLyByZXNwb25zZVxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gc28gd2UgbmVlZCB0byBzcGxpdCBieSB0aGUgZmlyc3QgcGVyaW9kIGFuZCBvbWl0IGFueSBrZXlzIGZyb20gZG90aWZpZWQgc3RhcnRpbmcgd2l0aCBpdFxuICAgICAgICAgIGlmIChpc1N5bWJvbChwcm9wKSkge1xuICAgICAgICAgICAgaWYgKG1ldGFbcHJvcF0pIHBpY2tlZFN5bWJvbHMucHVzaChbcHJvcCwgbWV0YVtwcm9wXV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHByb3AuaW5kZXhPZignLicpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gcHJvcC5zbGljZSgwLCBpbmRleCArIDEpO1xuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICBsZXQgaSA9IGRvdGlmaWVkLmxlbmd0aDtcbiAgICAgICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgICAgIGlmIChkb3RpZmllZFtpXSA9PT0ga2V5LnNsaWNlKDAsIC0xKSkgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRvdGlmaWVkW2ldLmluZGV4T2Yoa2V5KSA9PT0gMCkgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluYWxseSBhZGQgaXQgaWYgaXQgZGlkIG5vdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgaWYgKGRvdGlmaWVkLmluZGV4T2YocHJvcCkgPT09IC0xKSBkb3RpZmllZC5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIGRvdGlmaWVkIHZhbHVlcyB0byBjaGVjayBmb3Igc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGV5IGNvdWxkIGFscmVhZHkgYmUgaW4gYHBpY2tlZFN5bWJvbHNgXG4gICAgICAvLyAgICAgICAoYW5kIGl0IGRvZXNuJ3QgYWxzbyBkbyBiaWdpbnRzIHlldClcbiAgICAgIC8vXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZG90aWZpZWQpIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgaWYgKG1ldGFbcHJvcF0gIT09IHVuZGVmaW5lZCkgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICAgIH0gZWxzZSBpZiAobWV0YVtTeW1ib2wuZm9yKHByb3ApXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGlja2VkU3ltYm9scy5wdXNoKFtTeW1ib2wuZm9yKHByb3ApLCBtZXRhW1N5bWJvbC5mb3IocHJvcCldXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9cbiAgICAgIC8vIG5vdyB3ZSBjYWxsIHBpY2stZGVlcCB1c2luZyB0aGUgZmluYWwgYXJyYXlcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB0aGlzIGRvZXMgbm90IHBpY2sgc3ltYm9scyBub3IgYmlnaW50c1xuICAgICAgLy9cbiAgICAgIG1ldGEgPSBwaWNrRGVlcChtZXRhLCBkb3RpZmllZCk7XG5cbiAgICAgIC8vXG4gICAgICAvLyBpZiB0aGVyZSB3ZXJlIGFueSB0b3AtbGV2ZWwgc3ltYm9scyB0byBiZVxuICAgICAgLy8gcGlja2VkIHRoZW4gd2UgbmVlZCB0byBhZGQgdGhlbSBiYWNrIGhlcmUgdG8gdGhlIGxpc3RcbiAgICAgIC8vXG4gICAgICAvLyBOT1RFOiB3ZSdkIHByb2JhYmx5IHdhbnQgdG8gZG8gdGhlIHNhbWUgZm9yIGJpZ2ludHMgYXMgc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIGlmIChwaWNrZWRTeW1ib2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcGlja2VkU3ltYm9scykge1xuICAgICAgICAgIG1ldGFba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gb25seSBpbnZva2UgbG9nZ2VyIG1ldGhvZHMgaWYgaXQgd2FzIG5vdCBzaWxlbnRcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNpbGVudCAmJiAhaGFkVHJ1ZVNpbGVudFN5bWJvbCkge1xuICAgICAgLy8gU2hvdyBzdGFjayB0cmFjZSBpZiBuZWNlc3NhcnkgKGFsb25nIHdpdGggYW55IG1ldGFkYXRhKVxuICAgICAgaWYgKGlzRXJyb3IoZXJyKSAmJiB0aGlzLmNvbmZpZy5zaG93U3RhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5tZXRhLnNob3cgfHwgaXNFbXB0eShtZXRhKSkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJlxuICAgICAgICAgIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YV1cbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIsIG1ldGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmNvbmZpZy5tZXRhLnNob3cgfHwgaXNFbXB0eShtZXRhKSkge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh0aGlzLmNvbmZpZy5tZXRhLmhpZGVNZXRhICYmIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlTWV0YV0pIHx8XG4gICAgICAgICh0aGlzLmNvbmZpZy5tZXRhLmhpZGVIVFRQICYmIG1ldGFbdGhpcy5jb25maWcubWV0YS5oaWRlSFRUUF0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShtZXNzYWdlLCBtZXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBwb3N0LWhvb2tzXG4gICAgaWYgKHRoaXMuY29uZmlnLmhvb2tzLnBvc3QubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIHsgbWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEgfTtcbiAgICByZXR1cm4gcE1hcFNlcmllcyh0aGlzLmNvbmZpZy5ob29rcy5wb3N0LCAoaG9vaykgPT5cbiAgICAgIGhvb2sobWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEpXG4gICAgKVxuICAgICAgLnRoZW4oKVxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yKGVycik7XG4gICAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF4ZTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBQSxPQUFPLENBQUMsa0JBQWtCLENBQUM7O0FBRTNCO0FBQ0EsTUFBTUMsRUFBRSxHQUFHRCxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLE1BQU1FLE1BQU0sR0FBR0YsT0FBTyxDQUFDLG9CQUFvQixDQUFDO0FBQzVDLE1BQU1HLGdCQUFnQixHQUFHSCxPQUFPLENBQUMsbUJBQW1CLENBQUM7QUFDckQsTUFBTUksR0FBRyxHQUFHSixPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDdkMsTUFBTUssT0FBTyxHQUFHTCxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ2xDLE1BQU1NLFFBQVEsR0FBR04sT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNyQyxNQUFNTyxZQUFZLEdBQUdQLE9BQU8sQ0FBQyxlQUFlLENBQUM7QUFDN0MsTUFBTVEsVUFBVSxHQUFHUixPQUFPLENBQUMsY0FBYyxDQUFDO0FBQzFD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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "axe",
|
|
3
3
|
"description": "Axe is a logger-agnostic wrapper that normalizes logs regardless of argument style. Great for large development teams, old and new projects, and works with Pino, Bunyan, Winston, console, and more. It is lightweight, performant, highly-configurable, and automatically adds OS, CPU, and Git information to your logs. It supports hooks (useful for masking sensitive data) and dot-notation remapping, omitting, and picking of log metadata properties. Made for Forward Email, Lad, and Cabin.",
|
|
4
|
-
"version": "12.
|
|
4
|
+
"version": "12.2.0",
|
|
5
5
|
"author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
|
|
6
6
|
"browser": {
|
|
7
7
|
"parse-app-info": false
|
|
@@ -26,42 +26,42 @@
|
|
|
26
26
|
"iserror": "0.0.2",
|
|
27
27
|
"merge-options": "3.0.4",
|
|
28
28
|
"p-map-series": "2",
|
|
29
|
-
"parse-app-info": "^
|
|
29
|
+
"parse-app-info": "^5.0.0",
|
|
30
30
|
"parse-err": "^1.0.0",
|
|
31
31
|
"pick-deep": "1.0.0",
|
|
32
32
|
"unset-value": "2.0.1"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@babel/cli": "^7.
|
|
36
|
-
"@babel/core": "^7.
|
|
37
|
-
"@babel/preset-env": "^7.
|
|
38
|
-
"@commitlint/cli": "^17.
|
|
39
|
-
"@commitlint/config-conventional": "^17.
|
|
40
|
-
"ava": "^5.
|
|
35
|
+
"@babel/cli": "^7.21.5",
|
|
36
|
+
"@babel/core": "^7.21.8",
|
|
37
|
+
"@babel/preset-env": "^7.21.5",
|
|
38
|
+
"@commitlint/cli": "^17.6.1",
|
|
39
|
+
"@commitlint/config-conventional": "^17.6.1",
|
|
40
|
+
"ava": "^5.2.0",
|
|
41
41
|
"babelify": "^10.0.0",
|
|
42
42
|
"browserify": "^17.0.0",
|
|
43
|
-
"consola": "^
|
|
43
|
+
"consola": "^3.1.0",
|
|
44
44
|
"cross-env": "^7.0.3",
|
|
45
|
-
"eslint": "^8.
|
|
45
|
+
"eslint": "^8.39.0",
|
|
46
46
|
"eslint-config-xo-lass": "^2.0.1",
|
|
47
|
-
"eslint-plugin-compat": "^4.
|
|
47
|
+
"eslint-plugin-compat": "^4.1.4",
|
|
48
48
|
"eslint-plugin-node": "^11.1.0",
|
|
49
49
|
"express": "^4.18.2",
|
|
50
50
|
"fixpack": "^4.0.0",
|
|
51
51
|
"husky": "^8.0.3",
|
|
52
52
|
"jsdom": "15.x",
|
|
53
|
-
"koa": "^2.14.
|
|
54
|
-
"lint-staged": "^13.
|
|
53
|
+
"koa": "^2.14.2",
|
|
54
|
+
"lint-staged": "^13.2.2",
|
|
55
55
|
"lodash": "^4.17.21",
|
|
56
56
|
"nyc": "^15.1.0",
|
|
57
|
-
"pino": "^8.
|
|
57
|
+
"pino": "^8.12.0",
|
|
58
58
|
"remark-cli": "^11.0.0",
|
|
59
59
|
"remark-preset-github": "^4.0.4",
|
|
60
|
-
"rimraf": "^
|
|
60
|
+
"rimraf": "^5.0.0",
|
|
61
61
|
"signale": "^1.4.0",
|
|
62
|
-
"sinon": "^15.0.
|
|
62
|
+
"sinon": "^15.0.4",
|
|
63
63
|
"tinyify": "3.0.0",
|
|
64
|
-
"xo": "^0.
|
|
64
|
+
"xo": "^0.54.2"
|
|
65
65
|
},
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=14"
|