axe 12.0.0 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -647,7 +647,7 @@ Pre hooks allow you to manipulate the arguments `err`, `message`, and `meta` tha
647
647
 
648
648
  Post hooks are useful if you want to send logging information to a third-party, store them into a database, or do any sort of custom processing.
649
649
 
650
- As of v12, logger invocation (e.g. `logger.info('hello')`) will return their post hooks as a Promise – which means you can `await logger.error(err);` if needed – which is useful if you have jobs that need to store logs to a database using post hooks before the job shuts down with `process.exit(0)`. Note that the resolved Promise returns an Array of the returned values from post hooks, executed serially via `p-map-series`.
650
+ As of v12, logger invocation (e.g. `logger.info('hello')`) will return their post hooks as a Promise – which means you can `await logger.error(err);` if needed – which is useful if you have jobs that need to store logs to a database using post hooks before the job shuts down with `process.exit(0)`. Note that the resolved Promise returns an Array of the returned values from post hooks, executed serially via `p-map-series`. If no post hooks exist, then logger invocations will return an Object consisting of `{ method, err, message, meta }`, whereas `method` is the logger method invoked with (e.g. `logger.error()` will have a `method: 'error'` value).
651
651
 
652
652
  You should properly handle any errors in your pre hooks, otherwise they will be thrown and logger methods will not be invoked.
653
653
 
@@ -712,7 +712,7 @@ logger.post('error', async (err, message, meta) {
712
712
  path.join(__dirname, 'logs.txt'),
713
713
  JSON.stringify({ err, message, meta }, null, 2) + '\n'
714
714
  );
715
- return { err, message, meta };
715
+ return { method: 'error', err, message, meta };
716
716
  });
717
717
 
718
718
  // wait until logger stores the log
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.0.0",
1290
+ "version": "12.0.1",
1291
1291
  "author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
1292
1292
  "browser": {
1293
1293
  "parse-app-info": false
@@ -1904,6 +1904,12 @@ class Axe {
1904
1904
  }
1905
1905
 
1906
1906
  // post-hooks
1907
+ if (this.config.hooks.post.length === 0) return {
1908
+ method,
1909
+ err,
1910
+ message,
1911
+ meta
1912
+ };
1907
1913
  return pMapSeries(this.config.hooks.post, hook => hook(method, err, message, meta)).then().catch(err => {
1908
1914
  this.config.logger.error(err);
1909
1915
  });
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"],c="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=c.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,c={},s=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\(.*\)$/;c=function(e){if("symbol"==typeof e)return!0;if("[object Symbol]"!==s.call(e))return!1;try{return function(e){return"symbol"==typeof e.valueOf()&&f.test(a.call(e))}(e)}catch(t){return!1}}}else c=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},d=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 b(e){return Array.isArray(e)?function(e){const t=e.slice(0,0);return d(e).forEach(r=>{g(t,r,b(e[r]))}),t}(e):l(e)?function(e){const t=null===Object.getPrototypeOf(e)?Object.create(null):{};return d(e).forEach(r=>{g(t,r,b(e[r]))}),t}(e):e}const m=(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,b(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]:b(t[r])));n=m(n,t,d(t).filter(e=>!i.includes(e)),r)}),n})(e,t,r):l(t)&&l(e)?m(e,t,d(t),r):b(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,c=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return c=e.done,e},e:function(e){s=!0,i=e},f:function(){try{c||null==r.return||r.return()}finally{if(s)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,c=w(new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(t)),...Object.getOwnPropertyNames(t)]));try{for(c.s();!(i=c.n()).done;){const e=i.value;"function"!=typeof t[e]&&(n[e]=t[e])}}catch(t){c.e(t)}finally{c.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||".",c=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 s=n?t:function(e,t,r){return"function"==typeof r.split?r.split(e):e.split(t)}(t,i,r),a=s.length,f=0;do{let t=s[f];for("number"==typeof t&&(t=String(t));t&&"\\"===t.slice(-1);)t=x([t.slice(0,-1),s[++f]||""],c,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,s[o++]],c,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.0.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:s}=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(", "),d=i.env.HOSTNAME||e.hostname();function m(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||c(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(b(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||s(i.env.AXE_SHOW_STACK),meta:Object.assign({show:!i.env.AXE_SHOW_META||s(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:d,level:"info",levels:["info","warn","error","fatal"],appInfo:!i.env.AXE_APP_INFO||s(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 c=Object.keys(this.config.logger).filter(e=>!f.has(e));for(const i of c)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),d=3;d<y;d++)h[d-3]=arguments[d];for(const t of Array.prototype.slice.call(h))l.push(t);let b=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),b=-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+b?t(...l.slice(2+b)):e}if(w(i)&&(i=e),1!==l.slice(1+b).length||_(i)||o(i))if(!j&&l.length>=4+b){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+b&&_(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+b))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===b?"log":e;for(const t of this.config.hooks.pre)[v,i,f]=t(T,v,i,f);const k=s(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=n?n+"."+o:o;m(i)?e(i,c):t.push(c)}}(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||!c(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(c(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--;)c(e[t])||0!==e[t].indexOf(n)||e.splice(t,1)}}-1===e.indexOf(r)&&e.push(r)}for(const r of e)c(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 c=0;c<r;c++){const r=t[c],s=n(e,r,o);void 0!==s&&P(i,r,s,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)),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 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.0.1",$=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],s=n?n+"."+o:o;b(i)?e(i,s):t.push(s)}}(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}));
package/lib/index.js CHANGED
@@ -482,10 +482,16 @@ class Axe {
482
482
  }
483
483
 
484
484
  // post-hooks
485
+ if (this.config.hooks.post.length === 0) return {
486
+ method,
487
+ err,
488
+ message,
489
+ meta
490
+ };
485
491
  return pMapSeries(this.config.hooks.post, hook => hook(method, err, message, meta)).then().catch(err => {
486
492
  this.config.logger.error(err);
487
493
  });
488
494
  }
489
495
  }
490
496
  module.exports = Axe;
491
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwibmV3S2V5IiwicHVzaCIsImlzRW1wdHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJ0cmltIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJpc09iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsIkF4ZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVtYXBwZWRGaWVsZHMiLCJBWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMiLCJmaWVsZHMiLCJhcnIiLCJzcGxpdCIsIm1hcCIsInYiLCJwcm9wIiwib21pdHRlZEZpZWxkcyIsIkFYRV9PTUlUX01FVEFfRklFTERTIiwicyIsInBpY2tlZEZpZWxkcyIsIkFYRV9QSUNLX01FVEFfRklFTERTIiwic2hvd1N0YWNrIiwiQVhFX1NIT1dfU1RBQ0siLCJtZXRhIiwiYXNzaWduIiwic2hvdyIsIkFYRV9TSE9XX01FVEEiLCJjbGVhbnVwUmVtYXBwaW5nIiwiaGlkZUhUVFAiLCJoaWRlTWV0YSIsInZlcnNpb24iLCJzaWxlbnQiLCJsb2dnZXIiLCJjb25zb2xlIiwibGV2ZWwiLCJhcHBJbmZvIiwiQVhFX0FQUF9JTkZPIiwiaG9va3MiLCJwcmUiLCJwb3N0IiwibG9nIiwiYmluZCIsIm1ldGhvZHMiLCJrZXlzIiwiZmlsdGVyIiwiaGFzIiwiZWxlbWVudCIsImZhdGFsIiwiZXJyb3IiLCJpbmZvIiwiYXJncyIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsImluZGV4T2YiLCJFcnJvciIsImxvZ0xldmVsIiwic2NvcGUiLCJtZXNzYWdlIiwib3JpZ2luYWxBcmdzIiwiZXJyb3JzIiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcblxuY29uc3QgZm9ybWF0ID0gcmVxdWlyZSgnQGxhZGpzL2Zvcm1hdC11dGlsJyk7XG5jb25zdCBmb3JtYXRTcGVjaWZpZXJzID0gcmVxdWlyZSgnZm9ybWF0LXNwZWNpZmllcnMnKTtcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9nZXQnKTtcbmNvbnN0IGlzRXJyb3IgPSByZXF1aXJlKCdpc2Vycm9yJyk7XG5jb25zdCBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuY29uc3QgbWVyZ2VPcHRpb25zID0gcmVxdWlyZSgnbWVyZ2Utb3B0aW9ucycpO1xuY29uc3QgcE1hcFNlcmllcyA9IHJlcXVpcmUoJ3AtbWFwLXNlcmllcycpO1xuY29uc3QgcGFyc2VBcHBJbmZvID0gcmVxdWlyZSgncGFyc2UtYXBwLWluZm8nKTtcbmNvbnN0IHBhcnNlRXJyID0gcmVxdWlyZSgncGFyc2UtZXJyJyk7XG5jb25zdCBwaWNrRGVlcCA9IHJlcXVpcmUoJ3BpY2stZGVlcCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnQHN0cmlrZWVudGNvL3NldCcpO1xuY29uc3QgdW5zZXQgPSByZXF1aXJlKCd1bnNldC12YWx1ZScpO1xuY29uc3QgeyBib29sZWFuIH0gPSByZXF1aXJlKCdib29sZWFuJyk7XG5cbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBzaWxlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKCdheGUuc2lsZW50Jyk7XG5jb25zdCBvbWl0dGVkTG9nZ2VyS2V5cyA9IG5ldyBTZXQoWydjb25maWcnLCAnbG9nJ10pO1xuY29uc3QgbGV2ZWxzID0gWyd0cmFjZScsICdkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXTtcbmNvbnN0IGFsaWFzZXMgPSB7IHdhcm5pbmc6ICd3YXJuJywgZXJyOiAnZXJyb3InIH07XG5jb25zdCBsZXZlbEVycm9yID0gYFxcYGxldmVsXFxgIGludmFsaWQsIG11c3QgYmU6ICR7bGV2ZWxzLmpvaW4oJywgJyl9YDtcbmNvbnN0IG5hbWUgPVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgID8gZmFsc2VcbiAgICA6IHByb2Nlc3MuZW52LkhPU1ROQU1FIHx8IG9zLmhvc3RuYW1lKCk7XG5cbi8vIDxodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanM+XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJlxuICAgICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSAmJlxuICAgICFpc1N5bWJvbCh2YWx1ZSlcbiAgKTtcbn1cblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9HZWVuZW5UaWpkL2RvdGlmeS9ibG9iL21hc3Rlci9kb3RpZnkuanM+XG5mdW5jdGlvbiBkb3RpZnlUb0FycmF5KG9iaikge1xuICBjb25zdCByZXMgPSBbXTtcbiAgZnVuY3Rpb24gcmVjdXJzZShvYmosIGN1cnJlbnQpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMob2JqKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGNvbnN0IG5ld0tleSA9IGN1cnJlbnQgPyBjdXJyZW50ICsgJy4nICsga2V5IDoga2V5OyAvLyBqb2luZWQga2V5IHdpdGggZG90XG4gICAgICAvLyBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiYgIU9iamVjdElELmlzVmFsaWQodmFsdWUpKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmVjdXJzZSh2YWx1ZSwgbmV3S2V5KTsgLy8gaXQncyBhIG5lc3RlZCBvYmplY3QsIHNvIGRvIGl0IGFnYWluXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMucHVzaChuZXdLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlY3Vyc2Uob2JqKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzIzMzE2Mz5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0Lm93bktleXModmFsdWUpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5jbGFzcyBBeGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzID0ge307XG4gICAgaWYgKHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUykge1xuICAgICAgY29uc3QgZmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTO1xuICAgICAgY29uc3QgYXJyID0gZmllbGRzLnNwbGl0KCcsJykubWFwKCh2KSA9PiB2LnNwbGl0KCc6JykpO1xuICAgICAgZm9yIChjb25zdCBbcHJvcCwgdmFsdWVdIG9mIGFycikge1xuICAgICAgICByZW1hcHBlZEZpZWxkc1twcm9wXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVudmlmeSBkb2VzIG5vdCBzdXBwb3J0IGNvbmRpdGlvbmFscyB3ZWxsIGVub3VnaCBzbyB3ZSBkZWNsYXJlIHZhcnMgb3V0c2lkZVxuICAgIGxldCBvbWl0dGVkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX09NSVRfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBvbWl0dGVkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIG9taXR0ZWRGaWVsZHMgPSBvbWl0dGVkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9taXR0ZWRGaWVsZHMpKSBvbWl0dGVkRmllbGRzID0gW107XG5cbiAgICBsZXQgcGlja2VkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1BJQ0tfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBwaWNrZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgcGlja2VkRmllbGRzID0gcGlja2VkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpY2tlZEZpZWxkcykpIHBpY2tlZEZpZWxkcyA9IFtdO1xuXG4gICAgdGhpcy5jb25maWcgPSBtZXJnZU9wdGlvbnMoXG4gICAgICB7XG4gICAgICAgIHNob3dTdGFjazogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0tcbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0spXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBtZXRhOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNob3c6IHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEFcbiAgICAgICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEEpXG4gICAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbWFwcGVkRmllbGRzLFxuICAgICAgICAgICAgb21pdHRlZEZpZWxkcyxcbiAgICAgICAgICAgIHBpY2tlZEZpZWxkcyxcbiAgICAgICAgICAgIGNsZWFudXBSZW1hcHBpbmc6IHRydWUsXG4gICAgICAgICAgICBoaWRlSFRUUDogJ2lzX2h0dHAnLFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50ZWQgbWFpbmx5IGZvciBAbGFkanMvZ3JhY2VmdWwgdG9cbiAgICAgICAgICAgIC8vIHN1cHByZXNzIHVubmVjZXNzYXJ5IG1ldGEgb3V0cHV0IHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGhpZGVNZXRhOiAnaGlkZV9tZXRhJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5tZXRhID09PSAnb2JqZWN0JyA/IGNvbmZpZy5tZXRhIDoge31cbiAgICAgICAgKSxcbiAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAgIGxvZ2dlcjogY29uc29sZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbGV2ZWxzOiBbJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddLFxuICAgICAgICBhcHBJbmZvOiBwcm9jZXNzLmVudi5BWEVfQVBQX0lORk9cbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgaG9va3M6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlOiBbXSxcbiAgICAgICAgICAgIHBvc3Q6IFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLmhvb2tzID09PSAnb2JqZWN0JyA/IGNvbmZpZy5ob29rcyA6IHt9XG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgdGhpcy5hcHBJbmZvID0gdGhpcy5jb25maWcuYXBwSW5mb1xuICAgICAgPyBpc0Z1bmN0aW9uKHBhcnNlQXBwSW5mbylcbiAgICAgICAgPyBwYXJzZUFwcEluZm8oKVxuICAgICAgICA6IGZhbHNlXG4gICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5sb2cgPSB0aGlzLmxvZy5iaW5kKHRoaXMpO1xuXG4gICAgLy8gSW5oZXJpdCBtZXRob2RzIGZyb20gcGFyZW50IGxvZ2dlclxuICAgIGNvbnN0IG1ldGhvZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5sb2dnZXIpLmZpbHRlcihcbiAgICAgIChrZXkpID0+ICFvbWl0dGVkTG9nZ2VyS2V5cy5oYXMoa2V5KVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG1ldGhvZHMpIHtcbiAgICAgIHRoaXNbZWxlbWVudF0gPSB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF07XG4gICAgfVxuXG4gICAgLy8gQmluZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoIGxvZyBsZXZlbFxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBsZXZlbHMpIHtcbiAgICAgIC8vIEVuc3VyZSBmdW5jdGlvbiBleGlzdHMgaW4gbG9nZ2VyIHBhc3NlZFxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09ICdmYXRhbCcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZmF0YWwgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHwgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCaW5kIGxvZyBoYW5kbGVyIHdoaWNoIG5vcm1hbGl6ZXMgYXJncyBhbmQgcG9wdWxhdGVzIG1ldGFcbiAgICAgIHRoaXNbZWxlbWVudF0gPSAoLi4uYXJncykgPT5cbiAgICAgICAgdGhpcy5sb2coZWxlbWVudCwgLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0TGV2ZWwgPSB0aGlzLnNldExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0TmFtZSA9IHRoaXMuc2V0TmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbmFtZVxuICAgIGlmICh0aGlzLmNvbmZpZy5uYW1lKSB0aGlzLnNldE5hbWUodGhpcy5jb25maWcubmFtZSk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBsZXZlbFxuICAgIHRoaXMuc2V0TGV2ZWwodGhpcy5jb25maWcubGV2ZWwpO1xuXG4gICAgLy8gQWxpYXNlc1xuICAgIHRoaXMuZXJyID0gdGhpcy5lcnJvcjtcbiAgICB0aGlzLndhcm5pbmcgPSB0aGlzLndhcm47XG5cbiAgICAvLyBQcmUgYW5kIFBvc3QgSG9va3NcbiAgICB0aGlzLnByZSA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnByZS5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnBvc3QgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wb3N0LnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHNldExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihsZXZlbEVycm9yKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBsb2dMZXZlbGBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsKSlcbiAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCA9IGxldmVsO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLmxldmVsID0gbGV2ZWw7XG4gICAgLy8gQWRqdXN0cyBgdGhpcy5jb25maWcubGV2ZWxzYCBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQgaGFzIGFsbCBwcm9jZWVkaW5nIChpbmNsdXNpdmUpXG4gICAgdGhpcy5jb25maWcubGV2ZWxzID0gbGV2ZWxzLnNsaWNlKGxldmVscy5pbmRleE9mKGxldmVsKSk7XG4gIH1cblxuICBnZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSkgcmV0dXJuICdpbmZvJztcbiAgICBpZiAoaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSByZXR1cm4gYWxpYXNlc1tsZXZlbF07XG4gICAgaWYgKGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybiAnaW5mbyc7XG4gICAgcmV0dXJuIGxldmVsO1xuICB9XG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFpc1N0cmluZyhuYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYHNjb3BlYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUpKSB0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUgPSBuYW1lO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgbG9nKGxldmVsLCBtZXNzYWdlLCBtZXRhLCAuLi5hcmdzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcmdzID0gW107XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgaWYgKCFpc1VuZGVmaW5lZChsZXZlbCkpIG9yaWdpbmFsQXJncy5wdXNoKGxldmVsKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXNzYWdlKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXRhKTtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSkge1xuICAgICAgb3JpZ2luYWxBcmdzLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICBsZXQgbW9kaWZpZXIgPSAwO1xuXG4gICAgaWYgKGlzU3RyaW5nKGxldmVsKSAmJiBpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHtcbiAgICAgIGxldmVsID0gYWxpYXNlc1tsZXZlbF07XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKGxldmVsKSkge1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbChsZXZlbCk7XG4gICAgICBtb2RpZmllciA9IC0xO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBlYXJseSBpZiBpdCBpcyBub3QgYSB2YWxpZCBsb2dnaW5nIGxldmVsXG4gICAgaWYgKHRoaXMuY29uZmlnLmxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybjtcblxuICAgIC8vIEJ1bnlhbiBzdXBwb3J0IChtZXRhLCBtZXNzYWdlLCAuLi5hcmdzKVxuICAgIGxldCBpc0J1bnlhbiA9IGZhbHNlO1xuICAgIGlmICgoaXNPYmplY3QobWVzc2FnZSkgfHwgQXJyYXkuaXNBcnJheShtZXNzYWdlKSkgJiYgaXNTdHJpbmcobWV0YSkpIHtcbiAgICAgIGlzQnVueWFuID0gdHJ1ZTtcbiAgICAgIGNvbnN0IF9tZXRhID0gbWV0YTtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9XG4gICAgICAgIGlzU3RyaW5nKF9tZXRhKSAmJiBvcmlnaW5hbEFyZ3MubGVuZ3RoID49IDMgKyBtb2RpZmllclxuICAgICAgICAgID8gZm9ybWF0KC4uLm9yaWdpbmFsQXJncy5zbGljZSgyICsgbW9kaWZpZXIpKVxuICAgICAgICAgIDogX21ldGE7XG4gICAgfVxuXG4gICAgLy8gSWYgbWVzc2FnZSB3YXMgdW5kZWZpbmVkIHRoZW4gc2V0IGl0IHRvIGxldmVsXG4gICAgaWYgKGlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBtZXNzYWdlID0gbGV2ZWw7XG5cbiAgICAvLyBJZiBvbmx5IGBtZXNzYWdlYCB3YXMgcGFzc2VkIHRoZW4gaWYgaXQgd2FzIGFuIE9iamVjdFxuICAgIC8vIHByZXNlcnZlIGl0IGFzIGFuIE9iamVjdCBieSBzZXR0aW5nIGl0IGFzIG1ldGFcbiAgICBpZiAoXG4gICAgICBvcmlnaW5hbEFyZ3Muc2xpY2UoMSArIG1vZGlmaWVyKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICFpc1N0cmluZyhtZXNzYWdlKSAmJlxuICAgICAgIWlzRXJyb3IobWVzc2FnZSlcbiAgICApIHtcbiAgICAgIG1ldGEgPSB7IG1lc3NhZ2UgfTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICB9IGVsc2UgaWYgKCFpc0J1bnlhbiAmJiBvcmlnaW5hbEFyZ3MubGVuZ3RoID49IDQgKyBtb2RpZmllcikge1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgbWV0YSA9IHt9O1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncykge1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgICBlbHNlIGlmIChpc1N0cmluZyhhcmcpKSBtZXNzYWdlcy5wdXNoKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQoLi4ubWVzc2FnZXMpO1xuICAgICAgZWxzZSBpZiAoZXJyb3JzLmxlbmd0aCA+IDAgJiYgbGV2ZWwgPT09ICdsb2cnKSBsZXZlbCA9ICdlcnJvcic7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFpc0J1bnlhbiAmJlxuICAgICAgb3JpZ2luYWxBcmdzLmxlbmd0aCA9PT0gMyArIG1vZGlmaWVyICYmXG4gICAgICBpc1N0cmluZyhtZXNzYWdlKSAmJlxuICAgICAgZm9ybWF0U3BlY2lmaWVycy5zb21lKCh0KSA9PiBtZXNzYWdlLmluZGV4T2YodCkgIT09IC0xKVxuICAgICkge1xuICAgICAgLy8gT3RoZXJ3aXNlIGlmIHRoZXJlIGFyZSB0aHJlZSBhcmdzIGFuZCBpZiB0aGUgYG1lc3NhZ2VgIGNvbnRhaW5zXG4gICAgICAvLyBhIHBsYWNlaG9sZGVyIHRva2VuIChlLmcuICclcycgb3IgJyVkJyAtIHNlZSBhYm92ZSBgZm9ybWF0U3BlY2lmaWVyc2AgdmFyaWFibGUpXG4gICAgICAvLyB0aGVuIHdlIGNhbiBpbmZlciB0aGF0IHRoZSBgbWV0YWAgYXJnIHBhc3NlZCBpcyB1c2VkIGZvciBmb3JtYXR0aW5nXG4gICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgbWV0YSA9IHt9O1xuICAgIH0gZWxzZSBpZiAoIWlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSAmJiAhaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzTnVsbChtZXRhKSkge1xuICAgICAgICAvLyBJZiB0aGUgYG1ldGFgIHZhcmlhYmxlIHBhc3NlZCB3YXMgbm90IGFuIE9iamVjdCB0aGVuIGNvbnZlcnQgaXRcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGEgc3RyaW5nIHRoZW4gd2Ugc2hvdWxkIHJ1biBgdXRpbC5mb3JtYXRgIG9uIGl0XG4gICAgICAgIC8vIGFzc3VtaW5nIHdlJ3JlIGZvcm1hdHRpbmcgaXQgbGlrZSBpdCB3YXMgYW5vdGhlciBhcmd1bWVudFxuICAgICAgICAvLyAoYXMgb3Bwb3NlZCB0byB1c2luZyBzb21ldGhpbmcgbGlrZSBmYXN0LWpzb24tc3RyaW5naWZ5KVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAvLyBoYW5kbGUgYWRkaXRpb25hbCBhcmdzXG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSkge1xuICAgICAgICAvLyBzaG91bGQgc2tpcCB0aGlzIGJldHRlciB3aXRoIHNsaWNlIGFuZCBtb2RpZmllciBhZGp1c3RtZW50XG4gICAgICAgIGlmIChtZXRhID09PSBhcmcpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBtZXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNPYmplY3QobWV0YSkpIG1ldGEgPSB7IG9yaWdpbmFsX21ldGE6IG1ldGEgfTtcbiAgICBlbHNlIGlmICghaXNPYmplY3QobWV0YSkpIG1ldGEgPSB7fTtcblxuICAgIGlmIChpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBlcnJvcnMudW5zaGlmdChtZXNzYWdlKTtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyByZXdyaXRlIGBtZXRhLmVycmAgdG8gYG1ldGEub3JpZ2luYWxfZXJyYCBmb3IgY29uc2lzdGVuY3lcbiAgICAvLyAoaW4gY2FzZSBzb21lb25lIGhhcyBhbiBvYmplY3Qgd2l0aCBgLmVycmAgcHJvcGVydHkgb24gaXQgd2l0aCBhbiBlcnJvcilcbiAgICAvL1xuICAgIGlmIChpc09iamVjdChtZXRhLmVycikpIHtcbiAgICAgIGlmIChpc0Vycm9yKG1ldGEuZXJyKSkgZXJyb3JzLnB1c2gobWV0YS5lcnIpO1xuICAgICAgbWV0YS5vcmlnaW5hbF9lcnIgPSBpc0Vycm9yKG1ldGEuZXJyKSA/IHBhcnNlRXJyKG1ldGEuZXJyKSA6IG1ldGEuZXJyO1xuICAgIH1cblxuICAgIGxldCBlcnI7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlcnIgPSBlcnJvcnNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgWy4uLm5ldyBTZXQoZXJyb3JzLm1hcCgoZSkgPT4gZS5tZXNzYWdlKS5maWx0ZXIoQm9vbGVhbikpXS5qb2luKCc7ICcpXG4gICAgICAgICk7XG4gICAgICAgIGVyci5zdGFjayA9IFtcbiAgICAgICAgICAuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUuc3RhY2spLmZpbHRlcihCb29sZWFuKSlcbiAgICAgICAgXS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgZXJyLmVycm9ycyA9IGVycm9ycztcbiAgICAgIH1cblxuICAgICAgbWV0YS5lcnIgPSBwYXJzZUVycihlcnIpO1xuICAgICAgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gTk9URTogdGhpcyB3YXMgcmVtb3ZlZCBpbiB2MTAuMi4yIGR1ZSB0byBjaXJjdWxhciByZWZlcmVuY2UgaXNzdWVzXG4gICAgLy8gICAgICAgKHRoZSB3b3JrYXJvdW5kIHdvdWxkIGludm9sdmUgc2FmZVN0cmluZ2lmeSBhbmQgdGhlbiBKU09OLnBhcnNlIHdoaWNoIHdvdWxkIGJlIHBlcmYgYmxvYXQpXG4gICAgLy8gICAgICAgKHRoZXJlIHN0aWxsIG1pZ2h0IGJlIGFub3RoZXIgd29ya2Fyb3VuZCBvciBwZXJoYXBzIHdlIGRvbid0IGFkZCBhbGwgdGhlIGFyZ3MgaGVyZSBleGNlcHQgYWRkaXRpb25hbClcbiAgICAvL1xuICAgIC8vIFNldCBgYXJnc2AgcHJvcCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyBwYXNzZWRcbiAgICAvLyBtZXRhLmFyZ3MgPSBvcmlnaW5hbEFyZ3M7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsZXZlbCBvbiBtZXRhXG4gICAgbWV0YS5sZXZlbCA9IGxldmVsO1xuXG4gICAgLy8gQWRkIGBhcHBgIG9iamVjdCB0byBtZXRhZGF0YVxuICAgIGlmICh0aGlzLmFwcEluZm8pIG1ldGEuYXBwID0gdGhpcy5hcHBJbmZvO1xuXG4gICAgLy9cbiAgICAvLyBkZXRlcm1pbmUgbG9nIG1ldGhvZCB0byB1c2VcbiAgICAvL1xuICAgIC8vIGlmIHdlIGRpZG4ndCBwYXNzIGEgbGV2ZWwgYXMgYSBtZXRob2RcbiAgICAvLyAoZS5nLiBjb25zb2xlLmluZm8pLCB0aGVuIHdlIHNob3VsZCBzdGlsbFxuICAgIC8vIHVzZSB0aGUgbG9nZ2VyJ3MgYGxvZ2AgbWV0aG9kIHRvIG91dHB1dFxuICAgIC8vXG4gICAgLy8gYW5kIGZhdGFsIHNob3VsZCB1c2UgZXJyb3IgKGUuZy4gaW4gYnJvd3NlcilcbiAgICAvL1xuICAgIGNvbnN0IG1ldGhvZCA9IG1vZGlmaWVyID09PSAtMSA/ICdsb2cnIDogbGV2ZWw7XG5cbiAgICAvLyBwcmUtaG9va3NcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgdGhpcy5jb25maWcuaG9va3MucHJlKSB7XG4gICAgICBbZXJyLCBtZXNzYWdlLCBtZXRhXSA9IGhvb2sobWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gTk9URTogdXNpbmcgbG9kYXNoIF8ub21pdCBhbmQgXy5waWNrIHdvdWxkIGhhdmUgYmVlbiBfdmVyeSBzbG93X1xuICAgIC8vXG4gICAgLy8gY29uc3Qgb21pdHRlZEFuZFBpY2tlZEZpZWxkcyA9IHtcbiAgICAvLyAgIC4uLl8ub21pdChtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpLFxuICAgIC8vICAgLi4uXy5waWNrKG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKVxuICAgIC8vIH07XG4gICAgLy9cbiAgICAvLyBhbHNvIHdlIGRvbid0IHdhbnQgdG8gbXV0YXRlIGFueXRoaW5nIGluIGBtZXRhYFxuICAgIC8vIGFuZCBpZGVhbGx5IHdlIG9ubHkgd2FudCB0byBwaWNrIGV4YWN0bHkgd2hhdCB3ZSBuZWVkXG4gICAgLy8gKGFuZCBub3QgaGF2ZSB0d28gb3BlcmF0aW9ucywgb25lIGZvciBvbWl0LCBhbmQgb25lIGZvciBwaWNrKVxuICAgIC8vXG5cbiAgICAvLyBzZXQgYSBib29sZWFuIGZsYWcgaWYgd2UgaGFkIHRoZSBzaWxlbnQgc3ltYm9sIG9yIG5vdFxuICAgIGNvbnN0IGhhZFRydWVTaWxlbnRTeW1ib2wgPSBib29sZWFuKG1ldGFbc2lsZW50U3ltYm9sXSk7XG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyh0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzKSkge1xuICAgICAgICBzZXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkc1trZXldLCBnZXQobWV0YSwga2V5KSk7XG4gICAgICAgIHVuc2V0KG1ldGEsIGtleSk7XG4gICAgICAgIC8vIGNsZWFudXAgZW1wdHkgb2JqZWN0cyBhZnRlciByZW1hcHBpbmdcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1ldGEuY2xlYW51cFJlbWFwcGluZykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0ga2V5Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgcGFyZW50S2V5ID0ga2V5LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBpZiAoaXNFbXB0eShnZXQobWV0YSwgcGFyZW50S2V5KSkpIHVuc2V0KG1ldGEsIHBhcmVudEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpIHx8XG4gICAgICAhaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICApIHtcbiAgICAgIGNvbnN0IGRvdGlmaWVkID0gZG90aWZ5VG9BcnJheShtZXRhKTtcbiAgICAgIC8vIGRvdGlmaWVkID0gW1xuICAgICAgLy8gICAnZXJyLm5hbWUnLFxuICAgICAgLy8gICAnZXJyLm1lc3NhZ2UnLFxuICAgICAgLy8gICAnZXJyLnN0YWNrJyxcbiAgICAgIC8vICAgJ2xldmVsJyxcbiAgICAgIC8vICAgJ2FwcC5uYW1lJyxcbiAgICAgIC8vICAgJ2FwcC52ZXJzaW9uJyxcbiAgICAgIC8vICAgJ2FwcC5ub2RlJyxcbiAgICAgIC8vICAgJ2FwcC5oYXNoJyxcbiAgICAgIC8vICAgLy8gLi4uXG4gICAgICAvLyBdXG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAvLyA8aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk4ODIzNDk+XG4gICAgICAgICAgbGV0IGkgPSBkb3RpZmllZC5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkb3RpZmllZFtpXSA9PT0gcHJvcCB8fFxuICAgICAgICAgICAgICAoIWlzU3ltYm9sKGRvdGlmaWVkW2ldKSAmJiBkb3RpZmllZFtpXS5pbmRleE9mKGAke3Byb3B9LmApID09PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBkb3RpZmllZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpY2tlZFN5bWJvbHMgPSBbXTtcblxuICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpIHtcbiAgICAgICAgICAvLyByZXNwb25zZS5oZWFkZXJzLmJvb3BcbiAgICAgICAgICAvLyByZXNwb25zZS5oZWFkZXJzLmJlZXBcbiAgICAgICAgICAvLyByZXNwb25zZS5ib2R5XG4gICAgICAgICAgLy8gcmVzcG9uc2UudGV4dFxuICAgICAgICAgIC8vIHJlc3BvbnNlXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNwbGl0IGJ5IHRoZSBmaXJzdCBwZXJpb2QgYW5kIG9taXQgYW55IGtleXMgZnJvbSBkb3RpZmllZCBzdGFydGluZyB3aXRoIGl0XG4gICAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgICBpZiAobWV0YVtwcm9wXSkgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcHJvcC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwcm9wLnNsaWNlKDAsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihrZXkpID09PSAwKVxuICAgICAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluYWxseSBhZGQgaXQgaWYgaXQgZGlkIG5vdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgaWYgKGRvdGlmaWVkLmluZGV4T2YocHJvcCkgPT09IC0xKSBkb3RpZmllZC5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIGRvdGlmaWVkIHZhbHVlcyB0byBjaGVjayBmb3Igc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGV5IGNvdWxkIGFscmVhZHkgYmUgaW4gYHBpY2tlZFN5bWJvbHNgXG4gICAgICAvLyAgICAgICAoYW5kIGl0IGRvZXNuJ3QgYWxzbyBkbyBiaWdpbnRzIHlldClcbiAgICAgIC8vXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZG90aWZpZWQpIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApICYmIG1ldGFbcHJvcF0pXG4gICAgICAgICAgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBub3cgd2UgY2FsbCBwaWNrLWRlZXAgdXNpbmcgdGhlIGZpbmFsIGFycmF5XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBkb2VzIG5vdCBwaWNrIHN5bWJvbHMgbm9yIGJpZ2ludHNcbiAgICAgIC8vXG4gICAgICBtZXRhID0gcGlja0RlZXAobWV0YSwgZG90aWZpZWQpO1xuXG4gICAgICAvL1xuICAgICAgLy8gaWYgdGhlcmUgd2VyZSBhbnkgdG9wLWxldmVsIHN5bWJvbHMgdG8gYmVcbiAgICAgIC8vIHBpY2tlZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0gYmFjayBoZXJlIHRvIHRoZSBsaXN0XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogd2UnZCBwcm9iYWJseSB3YW50IHRvIGRvIHRoZSBzYW1lIGZvciBiaWdpbnRzIGFzIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICBpZiAocGlja2VkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBpY2tlZFN5bWJvbHMpIHtcbiAgICAgICAgICBtZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9ubHkgaW52b2tlIGxvZ2dlciBtZXRob2RzIGlmIGl0IHdhcyBub3Qgc2lsZW50XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zaWxlbnQgJiYgIWhhZFRydWVTaWxlbnRTeW1ib2wpIHtcbiAgICAgIC8vIFNob3cgc3RhY2sgdHJhY2UgaWYgbmVjZXNzYXJ5IChhbG9uZyB3aXRoIGFueSBtZXRhZGF0YSlcbiAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgdGhpcy5jb25maWcuc2hvd1N0YWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiZcbiAgICAgICAgICBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdKSB8fFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlSFRUUCAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFBdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSwgbWV0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcG9zdC1ob29rc1xuICAgIHJldHVybiBwTWFwU2VyaWVzKHRoaXMuY29uZmlnLmhvb2tzLnBvc3QsIChob29rKSA9PlxuICAgICAgaG9vayhtZXRob2QsIGVyciwgbWVzc2FnZSwgbWV0YSlcbiAgICApXG4gICAgICAudGhlbigpXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZXJyb3IoZXJyKTtcbiAgICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXhlO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0FBLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzs7QUFFM0I7QUFDQSxNQUFNQyxFQUFF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
497
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZXF1aXJlIiwib3MiLCJmb3JtYXQiLCJmb3JtYXRTcGVjaWZpZXJzIiwiZ2V0IiwiaXNFcnJvciIsImlzU3ltYm9sIiwibWVyZ2VPcHRpb25zIiwicE1hcFNlcmllcyIsInBhcnNlQXBwSW5mbyIsInBhcnNlRXJyIiwicGlja0RlZXAiLCJzZXQiLCJ1bnNldCIsImJvb2xlYW4iLCJwa2ciLCJzaWxlbnRTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJvbWl0dGVkTG9nZ2VyS2V5cyIsIlNldCIsImxldmVscyIsImFsaWFzZXMiLCJ3YXJuaW5nIiwiZXJyIiwibGV2ZWxFcnJvciIsImpvaW4iLCJuYW1lIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiSE9TVE5BTUUiLCJob3N0bmFtZSIsImlzUGxhaW5PYmplY3QiLCJ2YWx1ZSIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwidG9TdHJpbmdUYWciLCJpdGVyYXRvciIsImRvdGlmeVRvQXJyYXkiLCJvYmoiLCJyZXMiLCJyZWN1cnNlIiwiY3VycmVudCIsImtleSIsIlJlZmxlY3QiLCJvd25LZXlzIiwibmV3S2V5IiwicHVzaCIsImlzRW1wdHkiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJ0cmltIiwiaXNOdWxsIiwiaXNVbmRlZmluZWQiLCJpc09iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsIkF4ZSIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwicmVtYXBwZWRGaWVsZHMiLCJBWEVfUkVNQVBQRURfTUVUQV9GSUVMRFMiLCJmaWVsZHMiLCJhcnIiLCJzcGxpdCIsIm1hcCIsInYiLCJwcm9wIiwib21pdHRlZEZpZWxkcyIsIkFYRV9PTUlUX01FVEFfRklFTERTIiwicyIsInBpY2tlZEZpZWxkcyIsIkFYRV9QSUNLX01FVEFfRklFTERTIiwic2hvd1N0YWNrIiwiQVhFX1NIT1dfU1RBQ0siLCJtZXRhIiwiYXNzaWduIiwic2hvdyIsIkFYRV9TSE9XX01FVEEiLCJjbGVhbnVwUmVtYXBwaW5nIiwiaGlkZUhUVFAiLCJoaWRlTWV0YSIsInZlcnNpb24iLCJzaWxlbnQiLCJsb2dnZXIiLCJjb25zb2xlIiwibGV2ZWwiLCJhcHBJbmZvIiwiQVhFX0FQUF9JTkZPIiwiaG9va3MiLCJwcmUiLCJwb3N0IiwibG9nIiwiYmluZCIsIm1ldGhvZHMiLCJrZXlzIiwiZmlsdGVyIiwiaGFzIiwiZWxlbWVudCIsImZhdGFsIiwiZXJyb3IiLCJpbmZvIiwiYXJncyIsInNsaWNlIiwiY2FsbCIsInNldExldmVsIiwiZ2V0Tm9ybWFsaXplZExldmVsIiwic2V0TmFtZSIsIndhcm4iLCJmbiIsIl9sZXZlbCIsImluZGV4T2YiLCJFcnJvciIsImxvZ0xldmVsIiwic2NvcGUiLCJtZXNzYWdlIiwib3JpZ2luYWxBcmdzIiwiZXJyb3JzIiwiYXJnIiwibW9kaWZpZXIiLCJpc0J1bnlhbiIsIl9tZXRhIiwibWVzc2FnZXMiLCJzb21lIiwidCIsIm9yaWdpbmFsX21ldGEiLCJ1bnNoaWZ0Iiwib3JpZ2luYWxfZXJyIiwiZSIsIkJvb2xlYW4iLCJzdGFjayIsImFwcCIsIm1ldGhvZCIsImhvb2siLCJoYWRUcnVlU2lsZW50U3ltYm9sIiwiaW5kZXgiLCJsYXN0SW5kZXhPZiIsInBhcmVudEtleSIsImRvdGlmaWVkIiwiaSIsInNwbGljZSIsInBpY2tlZFN5bWJvbHMiLCJ0aGVuIiwiY2F0Y2giLCJtb2R1bGUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5hc3NpZ25lZC1pbXBvcnRcbnJlcXVpcmUoJ2NvbnNvbGUtcG9seWZpbGwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLW5vZGUtcHJvdG9jb2xcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcblxuY29uc3QgZm9ybWF0ID0gcmVxdWlyZSgnQGxhZGpzL2Zvcm1hdC11dGlsJyk7XG5jb25zdCBmb3JtYXRTcGVjaWZpZXJzID0gcmVxdWlyZSgnZm9ybWF0LXNwZWNpZmllcnMnKTtcbmNvbnN0IGdldCA9IHJlcXVpcmUoJ0BzdHJpa2VlbnRjby9nZXQnKTtcbmNvbnN0IGlzRXJyb3IgPSByZXF1aXJlKCdpc2Vycm9yJyk7XG5jb25zdCBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuY29uc3QgbWVyZ2VPcHRpb25zID0gcmVxdWlyZSgnbWVyZ2Utb3B0aW9ucycpO1xuY29uc3QgcE1hcFNlcmllcyA9IHJlcXVpcmUoJ3AtbWFwLXNlcmllcycpO1xuY29uc3QgcGFyc2VBcHBJbmZvID0gcmVxdWlyZSgncGFyc2UtYXBwLWluZm8nKTtcbmNvbnN0IHBhcnNlRXJyID0gcmVxdWlyZSgncGFyc2UtZXJyJyk7XG5jb25zdCBwaWNrRGVlcCA9IHJlcXVpcmUoJ3BpY2stZGVlcCcpO1xuY29uc3Qgc2V0ID0gcmVxdWlyZSgnQHN0cmlrZWVudGNvL3NldCcpO1xuY29uc3QgdW5zZXQgPSByZXF1aXJlKCd1bnNldC12YWx1ZScpO1xuY29uc3QgeyBib29sZWFuIH0gPSByZXF1aXJlKCdib29sZWFuJyk7XG5cbmNvbnN0IHBrZyA9IHJlcXVpcmUoJy4uL3BhY2thZ2UuanNvbicpO1xuXG5jb25zdCBzaWxlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKCdheGUuc2lsZW50Jyk7XG5jb25zdCBvbWl0dGVkTG9nZ2VyS2V5cyA9IG5ldyBTZXQoWydjb25maWcnLCAnbG9nJ10pO1xuY29uc3QgbGV2ZWxzID0gWyd0cmFjZScsICdkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZmF0YWwnXTtcbmNvbnN0IGFsaWFzZXMgPSB7IHdhcm5pbmc6ICd3YXJuJywgZXJyOiAnZXJyb3InIH07XG5jb25zdCBsZXZlbEVycm9yID0gYFxcYGxldmVsXFxgIGludmFsaWQsIG11c3QgYmU6ICR7bGV2ZWxzLmpvaW4oJywgJyl9YDtcbmNvbnN0IG5hbWUgPVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50J1xuICAgID8gZmFsc2VcbiAgICA6IHByb2Nlc3MuZW52LkhPU1ROQU1FIHx8IG9zLmhvc3RuYW1lKCk7XG5cbi8vIDxodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9iai9ibG9iL21haW4vaW5kZXguanM+XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgcmV0dXJuIChcbiAgICAocHJvdG90eXBlID09PSBudWxsIHx8XG4gICAgICBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHxcbiAgICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJlxuICAgICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJlxuICAgICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlKSAmJlxuICAgICFpc1N5bWJvbCh2YWx1ZSlcbiAgKTtcbn1cblxuLy8gPGh0dHBzOi8vZ2l0aHViLmNvbS9HZWVuZW5UaWpkL2RvdGlmeS9ibG9iL21hc3Rlci9kb3RpZnkuanM+XG5mdW5jdGlvbiBkb3RpZnlUb0FycmF5KG9iaikge1xuICBjb25zdCByZXMgPSBbXTtcbiAgZnVuY3Rpb24gcmVjdXJzZShvYmosIGN1cnJlbnQpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBSZWZsZWN0Lm93bktleXMob2JqKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICAgIGNvbnN0IG5ld0tleSA9IGN1cnJlbnQgPyBjdXJyZW50ICsgJy4nICsga2V5IDoga2V5OyAvLyBqb2luZWQga2V5IHdpdGggZG90XG4gICAgICAvLyBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkgJiYgIU9iamVjdElELmlzVmFsaWQodmFsdWUpKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgcmVjdXJzZSh2YWx1ZSwgbmV3S2V5KTsgLy8gaXQncyBhIG5lc3RlZCBvYmplY3QsIHNvIGRvIGl0IGFnYWluXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMucHVzaChuZXdLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlY3Vyc2Uob2JqKTtcbiAgcmV0dXJuIHJlcztcbn1cblxuLy8gPGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80MzIzMzE2Mz5cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdmFsdWUgPT09IG51bGwgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0Lm93bktleXModmFsdWUpLmxlbmd0aCA9PT0gMCkgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID09PSAwKVxuICApO1xufVxuXG5mdW5jdGlvbiBpc051bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuXG5jbGFzcyBBeGUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdHJ1Y3Rvcihjb25maWcgPSB7fSkge1xuICAgIGNvbnN0IHJlbWFwcGVkRmllbGRzID0ge307XG4gICAgaWYgKHByb2Nlc3MuZW52LkFYRV9SRU1BUFBFRF9NRVRBX0ZJRUxEUykge1xuICAgICAgY29uc3QgZmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1JFTUFQUEVEX01FVEFfRklFTERTO1xuICAgICAgY29uc3QgYXJyID0gZmllbGRzLnNwbGl0KCcsJykubWFwKCh2KSA9PiB2LnNwbGl0KCc6JykpO1xuICAgICAgZm9yIChjb25zdCBbcHJvcCwgdmFsdWVdIG9mIGFycikge1xuICAgICAgICByZW1hcHBlZEZpZWxkc1twcm9wXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVudmlmeSBkb2VzIG5vdCBzdXBwb3J0IGNvbmRpdGlvbmFscyB3ZWxsIGVub3VnaCBzbyB3ZSBkZWNsYXJlIHZhcnMgb3V0c2lkZVxuICAgIGxldCBvbWl0dGVkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX09NSVRfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBvbWl0dGVkRmllbGRzID09PSAnc3RyaW5nJylcbiAgICAgIG9taXR0ZWRGaWVsZHMgPSBvbWl0dGVkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG9taXR0ZWRGaWVsZHMpKSBvbWl0dGVkRmllbGRzID0gW107XG5cbiAgICBsZXQgcGlja2VkRmllbGRzID0gcHJvY2Vzcy5lbnYuQVhFX1BJQ0tfTUVUQV9GSUVMRFM7XG4gICAgaWYgKHR5cGVvZiBwaWNrZWRGaWVsZHMgPT09ICdzdHJpbmcnKVxuICAgICAgcGlja2VkRmllbGRzID0gcGlja2VkRmllbGRzLnNwbGl0KCcsJykubWFwKChzKSA9PiBzLnRyaW0oKSk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBpY2tlZEZpZWxkcykpIHBpY2tlZEZpZWxkcyA9IFtdO1xuXG4gICAgdGhpcy5jb25maWcgPSBtZXJnZU9wdGlvbnMoXG4gICAgICB7XG4gICAgICAgIHNob3dTdGFjazogcHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0tcbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX1NIT1dfU1RBQ0spXG4gICAgICAgICAgOiB0cnVlLFxuICAgICAgICBtZXRhOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNob3c6IHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEFcbiAgICAgICAgICAgICAgPyBib29sZWFuKHByb2Nlc3MuZW52LkFYRV9TSE9XX01FVEEpXG4gICAgICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgICAgIHJlbWFwcGVkRmllbGRzLFxuICAgICAgICAgICAgb21pdHRlZEZpZWxkcyxcbiAgICAgICAgICAgIHBpY2tlZEZpZWxkcyxcbiAgICAgICAgICAgIGNsZWFudXBSZW1hcHBpbmc6IHRydWUsXG4gICAgICAgICAgICBoaWRlSFRUUDogJ2lzX2h0dHAnLFxuICAgICAgICAgICAgLy8gaW1wbGVtZW50ZWQgbWFpbmx5IGZvciBAbGFkanMvZ3JhY2VmdWwgdG9cbiAgICAgICAgICAgIC8vIHN1cHByZXNzIHVubmVjZXNzYXJ5IG1ldGEgb3V0cHV0IHRvIGNvbnNvbGVcbiAgICAgICAgICAgIGhpZGVNZXRhOiAnaGlkZV9tZXRhJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdHlwZW9mIGNvbmZpZy5tZXRhID09PSAnb2JqZWN0JyA/IGNvbmZpZy5tZXRhIDoge31cbiAgICAgICAgKSxcbiAgICAgICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgICAgIHNpbGVudDogZmFsc2UsXG4gICAgICAgIGxvZ2dlcjogY29uc29sZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbGV2ZWw6ICdpbmZvJyxcbiAgICAgICAgbGV2ZWxzOiBbJ2luZm8nLCAnd2FybicsICdlcnJvcicsICdmYXRhbCddLFxuICAgICAgICBhcHBJbmZvOiBwcm9jZXNzLmVudi5BWEVfQVBQX0lORk9cbiAgICAgICAgICA/IGJvb2xlYW4ocHJvY2Vzcy5lbnYuQVhFX0FQUF9JTkZPKVxuICAgICAgICAgIDogdHJ1ZSxcbiAgICAgICAgaG9va3M6IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJlOiBbXSxcbiAgICAgICAgICAgIHBvc3Q6IFtdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0eXBlb2YgY29uZmlnLmhvb2tzID09PSAnb2JqZWN0JyA/IGNvbmZpZy5ob29rcyA6IHt9XG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICBjb25maWdcbiAgICApO1xuXG4gICAgdGhpcy5hcHBJbmZvID0gdGhpcy5jb25maWcuYXBwSW5mb1xuICAgICAgPyBpc0Z1bmN0aW9uKHBhcnNlQXBwSW5mbylcbiAgICAgICAgPyBwYXJzZUFwcEluZm8oKVxuICAgICAgICA6IGZhbHNlXG4gICAgICA6IGZhbHNlO1xuXG4gICAgdGhpcy5sb2cgPSB0aGlzLmxvZy5iaW5kKHRoaXMpO1xuXG4gICAgLy8gSW5oZXJpdCBtZXRob2RzIGZyb20gcGFyZW50IGxvZ2dlclxuICAgIGNvbnN0IG1ldGhvZHMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZy5sb2dnZXIpLmZpbHRlcihcbiAgICAgIChrZXkpID0+ICFvbWl0dGVkTG9nZ2VyS2V5cy5oYXMoa2V5KVxuICAgICk7XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG1ldGhvZHMpIHtcbiAgICAgIHRoaXNbZWxlbWVudF0gPSB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF07XG4gICAgfVxuXG4gICAgLy8gQmluZCBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoIGxvZyBsZXZlbFxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBsZXZlbHMpIHtcbiAgICAgIC8vIEVuc3VyZSBmdW5jdGlvbiBleGlzdHMgaW4gbG9nZ2VyIHBhc3NlZFxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQgPT09ICdmYXRhbCcpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuZmF0YWwgPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmVycm9yIHx8XG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXIuaW5mbyB8fFxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbZWxlbWVudF0gPVxuICAgICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyLmluZm8gfHwgdGhpcy5jb25maWcubG9nZ2VyLmxvZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBCaW5kIGxvZyBoYW5kbGVyIHdoaWNoIG5vcm1hbGl6ZXMgYXJncyBhbmQgcG9wdWxhdGVzIG1ldGFcbiAgICAgIHRoaXNbZWxlbWVudF0gPSAoLi4uYXJncykgPT5cbiAgICAgICAgdGhpcy5sb2coZWxlbWVudCwgLi4uQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykpO1xuICAgIH1cblxuICAgIHRoaXMuc2V0TGV2ZWwgPSB0aGlzLnNldExldmVsLmJpbmQodGhpcyk7XG4gICAgdGhpcy5nZXROb3JtYWxpemVkTGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbC5iaW5kKHRoaXMpO1xuICAgIHRoaXMuc2V0TmFtZSA9IHRoaXMuc2V0TmFtZS5iaW5kKHRoaXMpO1xuXG4gICAgLy8gU2V0IHRoZSBsb2dnZXIgbmFtZVxuICAgIGlmICh0aGlzLmNvbmZpZy5uYW1lKSB0aGlzLnNldE5hbWUodGhpcy5jb25maWcubmFtZSk7XG5cbiAgICAvLyBTZXQgdGhlIGxvZ2dlciBsZXZlbFxuICAgIHRoaXMuc2V0TGV2ZWwodGhpcy5jb25maWcubGV2ZWwpO1xuXG4gICAgLy8gQWxpYXNlc1xuICAgIHRoaXMuZXJyID0gdGhpcy5lcnJvcjtcbiAgICB0aGlzLndhcm5pbmcgPSB0aGlzLndhcm47XG5cbiAgICAvLyBQcmUgYW5kIFBvc3QgSG9va3NcbiAgICB0aGlzLnByZSA9IGZ1bmN0aW9uIChsZXZlbCwgZm4pIHtcbiAgICAgIHRoaXMuY29uZmlnLmhvb2tzLnByZS5wdXNoKGZ1bmN0aW9uIChfbGV2ZWwsIC4uLmFyZ3MpIHtcbiAgICAgICAgaWYgKGxldmVsICE9PSBfbGV2ZWwpIHJldHVybiBbLi4uYXJnc107XG4gICAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB0aGlzLnBvc3QgPSBmdW5jdGlvbiAobGV2ZWwsIGZuKSB7XG4gICAgICB0aGlzLmNvbmZpZy5ob29rcy5wb3N0LnB1c2goZnVuY3Rpb24gKF9sZXZlbCwgLi4uYXJncykge1xuICAgICAgICBpZiAobGV2ZWwgIT09IF9sZXZlbCkgcmV0dXJuIFsuLi5hcmdzXTtcbiAgICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHNldExldmVsKGxldmVsKSB7XG4gICAgaWYgKCFpc1N0cmluZyhsZXZlbCkgfHwgbGV2ZWxzLmluZGV4T2YobGV2ZWwpID09PSAtMSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihsZXZlbEVycm9yKTtcbiAgICAvLyBTdXBwb3J0IHNpZ25hbGUgbG9nZ2VyIGFuZCBvdGhlciBsb2dnZXJzIHRoYXQgdXNlIGBsb2dMZXZlbGBcbiAgICBpZiAoaXNTdHJpbmcodGhpcy5jb25maWcubG9nZ2VyLmxvZ0xldmVsKSlcbiAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5sb2dMZXZlbCA9IGxldmVsO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLmxldmVsID0gbGV2ZWw7XG4gICAgLy8gQWRqdXN0cyBgdGhpcy5jb25maWcubGV2ZWxzYCBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQgaGFzIGFsbCBwcm9jZWVkaW5nIChpbmNsdXNpdmUpXG4gICAgdGhpcy5jb25maWcubGV2ZWxzID0gbGV2ZWxzLnNsaWNlKGxldmVscy5pbmRleE9mKGxldmVsKSk7XG4gIH1cblxuICBnZXROb3JtYWxpemVkTGV2ZWwobGV2ZWwpIHtcbiAgICBpZiAoIWlzU3RyaW5nKGxldmVsKSkgcmV0dXJuICdpbmZvJztcbiAgICBpZiAoaXNTdHJpbmcoYWxpYXNlc1tsZXZlbF0pKSByZXR1cm4gYWxpYXNlc1tsZXZlbF07XG4gICAgaWYgKGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybiAnaW5mbyc7XG4gICAgcmV0dXJuIGxldmVsO1xuICB9XG5cbiAgc2V0TmFtZShuYW1lKSB7XG4gICAgaWYgKCFpc1N0cmluZyhuYW1lKSkgdGhyb3cgbmV3IEVycm9yKCdgbmFtZWAgbXVzdCBiZSBhIFN0cmluZycpO1xuICAgIC8vIFN1cHBvcnQgc2lnbmFsZSBsb2dnZXIgYW5kIG90aGVyIGxvZ2dlcnMgdGhhdCB1c2UgYHNjb3BlYFxuICAgIGlmIChpc1N0cmluZyh0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUpKSB0aGlzLmNvbmZpZy5sb2dnZXIuc2NvcGUgPSBuYW1lO1xuICAgIGVsc2UgdGhpcy5jb25maWcubG9nZ2VyLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgbG9nKGxldmVsLCBtZXNzYWdlLCBtZXRhLCAuLi5hcmdzKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBcmdzID0gW107XG4gICAgY29uc3QgZXJyb3JzID0gW107XG4gICAgaWYgKCFpc1VuZGVmaW5lZChsZXZlbCkpIG9yaWdpbmFsQXJncy5wdXNoKGxldmVsKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXNzYWdlKTtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1ldGEpKSBvcmlnaW5hbEFyZ3MucHVzaChtZXRhKTtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKSkge1xuICAgICAgb3JpZ2luYWxBcmdzLnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICBsZXQgbW9kaWZpZXIgPSAwO1xuXG4gICAgaWYgKGlzU3RyaW5nKGxldmVsKSAmJiBpc1N0cmluZyhhbGlhc2VzW2xldmVsXSkpIHtcbiAgICAgIGxldmVsID0gYWxpYXNlc1tsZXZlbF07XG4gICAgfSBlbHNlIGlmIChpc0Vycm9yKGxldmVsKSkge1xuICAgICAgbWV0YSA9IG1lc3NhZ2U7XG4gICAgICBtZXNzYWdlID0gbGV2ZWw7XG4gICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgfSBlbHNlIGlmICghaXNTdHJpbmcobGV2ZWwpIHx8IGxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9IGxldmVsO1xuICAgICAgbGV2ZWwgPSB0aGlzLmdldE5vcm1hbGl6ZWRMZXZlbChsZXZlbCk7XG4gICAgICBtb2RpZmllciA9IC0xO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBlYXJseSBpZiBpdCBpcyBub3QgYSB2YWxpZCBsb2dnaW5nIGxldmVsXG4gICAgaWYgKHRoaXMuY29uZmlnLmxldmVscy5pbmRleE9mKGxldmVsKSA9PT0gLTEpIHJldHVybjtcblxuICAgIC8vIEJ1bnlhbiBzdXBwb3J0IChtZXRhLCBtZXNzYWdlLCAuLi5hcmdzKVxuICAgIGxldCBpc0J1bnlhbiA9IGZhbHNlO1xuICAgIGlmICgoaXNPYmplY3QobWVzc2FnZSkgfHwgQXJyYXkuaXNBcnJheShtZXNzYWdlKSkgJiYgaXNTdHJpbmcobWV0YSkpIHtcbiAgICAgIGlzQnVueWFuID0gdHJ1ZTtcbiAgICAgIGNvbnN0IF9tZXRhID0gbWV0YTtcbiAgICAgIG1ldGEgPSBtZXNzYWdlO1xuICAgICAgbWVzc2FnZSA9XG4gICAgICAgIGlzU3RyaW5nKF9tZXRhKSAmJiBvcmlnaW5hbEFyZ3MubGVuZ3RoID49IDMgKyBtb2RpZmllclxuICAgICAgICAgID8gZm9ybWF0KC4uLm9yaWdpbmFsQXJncy5zbGljZSgyICsgbW9kaWZpZXIpKVxuICAgICAgICAgIDogX21ldGE7XG4gICAgfVxuXG4gICAgLy8gSWYgbWVzc2FnZSB3YXMgdW5kZWZpbmVkIHRoZW4gc2V0IGl0IHRvIGxldmVsXG4gICAgaWYgKGlzVW5kZWZpbmVkKG1lc3NhZ2UpKSBtZXNzYWdlID0gbGV2ZWw7XG5cbiAgICAvLyBJZiBvbmx5IGBtZXNzYWdlYCB3YXMgcGFzc2VkIHRoZW4gaWYgaXQgd2FzIGFuIE9iamVjdFxuICAgIC8vIHByZXNlcnZlIGl0IGFzIGFuIE9iamVjdCBieSBzZXR0aW5nIGl0IGFzIG1ldGFcbiAgICBpZiAoXG4gICAgICBvcmlnaW5hbEFyZ3Muc2xpY2UoMSArIG1vZGlmaWVyKS5sZW5ndGggPT09IDEgJiZcbiAgICAgICFpc1N0cmluZyhtZXNzYWdlKSAmJlxuICAgICAgIWlzRXJyb3IobWVzc2FnZSlcbiAgICApIHtcbiAgICAgIG1ldGEgPSB7IG1lc3NhZ2UgfTtcbiAgICAgIG1lc3NhZ2UgPSBsZXZlbDtcbiAgICB9IGVsc2UgaWYgKCFpc0J1bnlhbiAmJiBvcmlnaW5hbEFyZ3MubGVuZ3RoID49IDQgKyBtb2RpZmllcikge1xuICAgICAgbWVzc2FnZSA9IHVuZGVmaW5lZDtcblxuICAgICAgbWV0YSA9IHt9O1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYXJnIG9mIG9yaWdpbmFsQXJncykge1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgICBlbHNlIGlmIChpc1N0cmluZyhhcmcpKSBtZXNzYWdlcy5wdXNoKGFyZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwICYmIG1lc3NhZ2VzLmxlbmd0aCA+IDApXG4gICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQoLi4ubWVzc2FnZXMpO1xuICAgICAgZWxzZSBpZiAoZXJyb3JzLmxlbmd0aCA+IDAgJiYgbGV2ZWwgPT09ICdsb2cnKSBsZXZlbCA9ICdlcnJvcic7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICFpc0J1bnlhbiAmJlxuICAgICAgb3JpZ2luYWxBcmdzLmxlbmd0aCA9PT0gMyArIG1vZGlmaWVyICYmXG4gICAgICBpc1N0cmluZyhtZXNzYWdlKSAmJlxuICAgICAgZm9ybWF0U3BlY2lmaWVycy5zb21lKCh0KSA9PiBtZXNzYWdlLmluZGV4T2YodCkgIT09IC0xKVxuICAgICkge1xuICAgICAgLy8gT3RoZXJ3aXNlIGlmIHRoZXJlIGFyZSB0aHJlZSBhcmdzIGFuZCBpZiB0aGUgYG1lc3NhZ2VgIGNvbnRhaW5zXG4gICAgICAvLyBhIHBsYWNlaG9sZGVyIHRva2VuIChlLmcuICclcycgb3IgJyVkJyAtIHNlZSBhYm92ZSBgZm9ybWF0U3BlY2lmaWVyc2AgdmFyaWFibGUpXG4gICAgICAvLyB0aGVuIHdlIGNhbiBpbmZlciB0aGF0IHRoZSBgbWV0YWAgYXJnIHBhc3NlZCBpcyB1c2VkIGZvciBmb3JtYXR0aW5nXG4gICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UsIG1ldGEpO1xuICAgICAgbWV0YSA9IHt9O1xuICAgIH0gZWxzZSBpZiAoIWlzRXJyb3IobWVzc2FnZSkpIHtcbiAgICAgIGlmIChpc0Vycm9yKG1ldGEpKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKG1ldGEpO1xuICAgICAgICBtZXRhID0ge307XG4gICAgICB9IGVsc2UgaWYgKCFpc09iamVjdChtZXRhKSAmJiAhaXNVbmRlZmluZWQobWV0YSkgJiYgIWlzTnVsbChtZXRhKSkge1xuICAgICAgICAvLyBJZiB0aGUgYG1ldGFgIHZhcmlhYmxlIHBhc3NlZCB3YXMgbm90IGFuIE9iamVjdCB0aGVuIGNvbnZlcnQgaXRcbiAgICAgICAgbWVzc2FnZSA9IGZvcm1hdChtZXNzYWdlLCBtZXRhKTtcbiAgICAgICAgbWV0YSA9IHt9O1xuICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobWVzc2FnZSkpIHtcbiAgICAgICAgLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IGEgc3RyaW5nIHRoZW4gd2Ugc2hvdWxkIHJ1biBgdXRpbC5mb3JtYXRgIG9uIGl0XG4gICAgICAgIC8vIGFzc3VtaW5nIHdlJ3JlIGZvcm1hdHRpbmcgaXQgbGlrZSBpdCB3YXMgYW5vdGhlciBhcmd1bWVudFxuICAgICAgICAvLyAoYXMgb3Bwb3NlZCB0byB1c2luZyBzb21ldGhpbmcgbGlrZSBmYXN0LWpzb24tc3RyaW5naWZ5KVxuICAgICAgICBtZXNzYWdlID0gZm9ybWF0KG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNFcnJvcihtZXRhKSkge1xuICAgICAgZXJyb3JzLnB1c2gobWV0YSk7XG4gICAgICAvLyBoYW5kbGUgYWRkaXRpb25hbCBhcmdzXG4gICAgICBmb3IgKGNvbnN0IGFyZyBvZiBvcmlnaW5hbEFyZ3Muc2xpY2UoMiArIG1vZGlmaWVyKSkge1xuICAgICAgICAvLyBzaG91bGQgc2tpcCB0aGlzIGJldHRlciB3aXRoIHNsaWNlIGFuZCBtb2RpZmllciBhZGp1c3RtZW50XG4gICAgICAgIGlmIChtZXRhID09PSBhcmcpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNFcnJvcihhcmcpKSBlcnJvcnMucHVzaChhcmcpO1xuICAgICAgfVxuXG4gICAgICBtZXRhID0ge307XG4gICAgfVxuXG4gICAgaWYgKCFpc1VuZGVmaW5lZChtZXRhKSAmJiAhaXNPYmplY3QobWV0YSkpIG1ldGEgPSB7IG9yaWdpbmFsX21ldGE6IG1ldGEgfTtcbiAgICBlbHNlIGlmICghaXNPYmplY3QobWV0YSkpIG1ldGEgPSB7fTtcblxuICAgIGlmIChpc0Vycm9yKG1lc3NhZ2UpKSB7XG4gICAgICBlcnJvcnMudW5zaGlmdChtZXNzYWdlKTtcbiAgICAgIG1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyByZXdyaXRlIGBtZXRhLmVycmAgdG8gYG1ldGEub3JpZ2luYWxfZXJyYCBmb3IgY29uc2lzdGVuY3lcbiAgICAvLyAoaW4gY2FzZSBzb21lb25lIGhhcyBhbiBvYmplY3Qgd2l0aCBgLmVycmAgcHJvcGVydHkgb24gaXQgd2l0aCBhbiBlcnJvcilcbiAgICAvL1xuICAgIGlmIChpc09iamVjdChtZXRhLmVycikpIHtcbiAgICAgIGlmIChpc0Vycm9yKG1ldGEuZXJyKSkgZXJyb3JzLnB1c2gobWV0YS5lcnIpO1xuICAgICAgbWV0YS5vcmlnaW5hbF9lcnIgPSBpc0Vycm9yKG1ldGEuZXJyKSA/IHBhcnNlRXJyKG1ldGEuZXJyKSA6IG1ldGEuZXJyO1xuICAgIH1cblxuICAgIGxldCBlcnI7XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBlcnIgPSBlcnJvcnNbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgWy4uLm5ldyBTZXQoZXJyb3JzLm1hcCgoZSkgPT4gZS5tZXNzYWdlKS5maWx0ZXIoQm9vbGVhbikpXS5qb2luKCc7ICcpXG4gICAgICAgICk7XG4gICAgICAgIGVyci5zdGFjayA9IFtcbiAgICAgICAgICAuLi5uZXcgU2V0KGVycm9ycy5tYXAoKGUpID0+IGUuc3RhY2spLmZpbHRlcihCb29sZWFuKSlcbiAgICAgICAgXS5qb2luKCdcXG5cXG4nKTtcbiAgICAgICAgZXJyLmVycm9ycyA9IGVycm9ycztcbiAgICAgIH1cblxuICAgICAgbWV0YS5lcnIgPSBwYXJzZUVycihlcnIpO1xuICAgICAgaWYgKCFpc1N0cmluZyhtZXNzYWdlKSkgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gTk9URTogdGhpcyB3YXMgcmVtb3ZlZCBpbiB2MTAuMi4yIGR1ZSB0byBjaXJjdWxhciByZWZlcmVuY2UgaXNzdWVzXG4gICAgLy8gICAgICAgKHRoZSB3b3JrYXJvdW5kIHdvdWxkIGludm9sdmUgc2FmZVN0cmluZ2lmeSBhbmQgdGhlbiBKU09OLnBhcnNlIHdoaWNoIHdvdWxkIGJlIHBlcmYgYmxvYXQpXG4gICAgLy8gICAgICAgKHRoZXJlIHN0aWxsIG1pZ2h0IGJlIGFub3RoZXIgd29ya2Fyb3VuZCBvciBwZXJoYXBzIHdlIGRvbid0IGFkZCBhbGwgdGhlIGFyZ3MgaGVyZSBleGNlcHQgYWRkaXRpb25hbClcbiAgICAvL1xuICAgIC8vIFNldCBgYXJnc2AgcHJvcCB3aXRoIG9yaWdpbmFsIGFyZ3VtZW50cyBwYXNzZWRcbiAgICAvLyBtZXRhLmFyZ3MgPSBvcmlnaW5hbEFyZ3M7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsZXZlbCBvbiBtZXRhXG4gICAgbWV0YS5sZXZlbCA9IGxldmVsO1xuXG4gICAgLy8gQWRkIGBhcHBgIG9iamVjdCB0byBtZXRhZGF0YVxuICAgIGlmICh0aGlzLmFwcEluZm8pIG1ldGEuYXBwID0gdGhpcy5hcHBJbmZvO1xuXG4gICAgLy9cbiAgICAvLyBkZXRlcm1pbmUgbG9nIG1ldGhvZCB0byB1c2VcbiAgICAvL1xuICAgIC8vIGlmIHdlIGRpZG4ndCBwYXNzIGEgbGV2ZWwgYXMgYSBtZXRob2RcbiAgICAvLyAoZS5nLiBjb25zb2xlLmluZm8pLCB0aGVuIHdlIHNob3VsZCBzdGlsbFxuICAgIC8vIHVzZSB0aGUgbG9nZ2VyJ3MgYGxvZ2AgbWV0aG9kIHRvIG91dHB1dFxuICAgIC8vXG4gICAgLy8gYW5kIGZhdGFsIHNob3VsZCB1c2UgZXJyb3IgKGUuZy4gaW4gYnJvd3NlcilcbiAgICAvL1xuICAgIGNvbnN0IG1ldGhvZCA9IG1vZGlmaWVyID09PSAtMSA/ICdsb2cnIDogbGV2ZWw7XG5cbiAgICAvLyBwcmUtaG9va3NcbiAgICBmb3IgKGNvbnN0IGhvb2sgb2YgdGhpcy5jb25maWcuaG9va3MucHJlKSB7XG4gICAgICBbZXJyLCBtZXNzYWdlLCBtZXRhXSA9IGhvb2sobWV0aG9kLCBlcnIsIG1lc3NhZ2UsIG1ldGEpO1xuICAgIH1cblxuICAgIC8vXG4gICAgLy8gTk9URTogdXNpbmcgbG9kYXNoIF8ub21pdCBhbmQgXy5waWNrIHdvdWxkIGhhdmUgYmVlbiBfdmVyeSBzbG93X1xuICAgIC8vXG4gICAgLy8gY29uc3Qgb21pdHRlZEFuZFBpY2tlZEZpZWxkcyA9IHtcbiAgICAvLyAgIC4uLl8ub21pdChtZXRhLCB0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpLFxuICAgIC8vICAgLi4uXy5waWNrKG1ldGEsIHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKVxuICAgIC8vIH07XG4gICAgLy9cbiAgICAvLyBhbHNvIHdlIGRvbid0IHdhbnQgdG8gbXV0YXRlIGFueXRoaW5nIGluIGBtZXRhYFxuICAgIC8vIGFuZCBpZGVhbGx5IHdlIG9ubHkgd2FudCB0byBwaWNrIGV4YWN0bHkgd2hhdCB3ZSBuZWVkXG4gICAgLy8gKGFuZCBub3QgaGF2ZSB0d28gb3BlcmF0aW9ucywgb25lIGZvciBvbWl0LCBhbmQgb25lIGZvciBwaWNrKVxuICAgIC8vXG5cbiAgICAvLyBzZXQgYSBib29sZWFuIGZsYWcgaWYgd2UgaGFkIHRoZSBzaWxlbnQgc3ltYm9sIG9yIG5vdFxuICAgIGNvbnN0IGhhZFRydWVTaWxlbnRTeW1ib2wgPSBib29sZWFuKG1ldGFbc2lsZW50U3ltYm9sXSk7XG5cbiAgICBpZiAoIWlzRW1wdHkodGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkcykpIHtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFJlZmxlY3Qub3duS2V5cyh0aGlzLmNvbmZpZy5tZXRhLnJlbWFwcGVkRmllbGRzKSkge1xuICAgICAgICBzZXQobWV0YSwgdGhpcy5jb25maWcubWV0YS5yZW1hcHBlZEZpZWxkc1trZXldLCBnZXQobWV0YSwga2V5KSk7XG4gICAgICAgIHVuc2V0KG1ldGEsIGtleSk7XG4gICAgICAgIC8vIGNsZWFudXAgZW1wdHkgb2JqZWN0cyBhZnRlciByZW1hcHBpbmdcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm1ldGEuY2xlYW51cFJlbWFwcGluZykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0ga2V5Lmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkgY29udGludWU7XG4gICAgICAgICAgY29uc3QgcGFyZW50S2V5ID0ga2V5LnNsaWNlKDAsIGluZGV4KTtcbiAgICAgICAgICBpZiAoaXNFbXB0eShnZXQobWV0YSwgcGFyZW50S2V5KSkpIHVuc2V0KG1ldGEsIHBhcmVudEtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAhaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpIHx8XG4gICAgICAhaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLnBpY2tlZEZpZWxkcylcbiAgICApIHtcbiAgICAgIGNvbnN0IGRvdGlmaWVkID0gZG90aWZ5VG9BcnJheShtZXRhKTtcbiAgICAgIC8vIGRvdGlmaWVkID0gW1xuICAgICAgLy8gICAnZXJyLm5hbWUnLFxuICAgICAgLy8gICAnZXJyLm1lc3NhZ2UnLFxuICAgICAgLy8gICAnZXJyLnN0YWNrJyxcbiAgICAgIC8vICAgJ2xldmVsJyxcbiAgICAgIC8vICAgJ2FwcC5uYW1lJyxcbiAgICAgIC8vICAgJ2FwcC52ZXJzaW9uJyxcbiAgICAgIC8vICAgJ2FwcC5ub2RlJyxcbiAgICAgIC8vICAgJ2FwcC5oYXNoJyxcbiAgICAgIC8vICAgLy8gLi4uXG4gICAgICAvLyBdXG5cbiAgICAgIGlmICghaXNFbXB0eSh0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiB0aGlzLmNvbmZpZy5tZXRhLm9taXR0ZWRGaWVsZHMpIHtcbiAgICAgICAgICAvLyA8aHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzk4ODIzNDk+XG4gICAgICAgICAgbGV0IGkgPSBkb3RpZmllZC5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKGktLSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkb3RpZmllZFtpXSA9PT0gcHJvcCB8fFxuICAgICAgICAgICAgICAoIWlzU3ltYm9sKGRvdGlmaWVkW2ldKSAmJiBkb3RpZmllZFtpXS5pbmRleE9mKGAke3Byb3B9LmApID09PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBkb3RpZmllZC5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpY2tlZFN5bWJvbHMgPSBbXTtcblxuICAgICAgaWYgKCFpc0VtcHR5KHRoaXMuY29uZmlnLm1ldGEucGlja2VkRmllbGRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgdGhpcy5jb25maWcubWV0YS5waWNrZWRGaWVsZHMpIHtcbiAgICAgICAgICAvLyByZXNwb25zZS5oZWFkZXJzLmJvb3BcbiAgICAgICAgICAvLyByZXNwb25zZS5oZWFkZXJzLmJlZXBcbiAgICAgICAgICAvLyByZXNwb25zZS5ib2R5XG4gICAgICAgICAgLy8gcmVzcG9uc2UudGV4dFxuICAgICAgICAgIC8vIHJlc3BvbnNlXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBzbyB3ZSBuZWVkIHRvIHNwbGl0IGJ5IHRoZSBmaXJzdCBwZXJpb2QgYW5kIG9taXQgYW55IGtleXMgZnJvbSBkb3RpZmllZCBzdGFydGluZyB3aXRoIGl0XG4gICAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApKSB7XG4gICAgICAgICAgICBpZiAobWV0YVtwcm9wXSkgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcHJvcC5pbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBwcm9wLnNsaWNlKDAsIGluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGxldCBpID0gZG90aWZpZWQubGVuZ3RoO1xuICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N5bWJvbChkb3RpZmllZFtpXSkgJiYgZG90aWZpZWRbaV0uaW5kZXhPZihrZXkpID09PSAwKVxuICAgICAgICAgICAgICAgICAgZG90aWZpZWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZmluYWxseSBhZGQgaXQgaWYgaXQgZGlkIG5vdCBhbHJlYWR5IGV4aXN0XG4gICAgICAgICAgaWYgKGRvdGlmaWVkLmluZGV4T2YocHJvcCkgPT09IC0xKSBkb3RpZmllZC5wdXNoKHByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBpdGVyYXRlIG92ZXIgYWxsIGRvdGlmaWVkIHZhbHVlcyB0byBjaGVjayBmb3Igc3ltYm9sc1xuICAgICAgLy9cbiAgICAgIC8vIE5PVEU6IHRoaXMgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhhdCB0aGV5IGNvdWxkIGFscmVhZHkgYmUgaW4gYHBpY2tlZFN5bWJvbHNgXG4gICAgICAvLyAgICAgICAoYW5kIGl0IGRvZXNuJ3QgYWxzbyBkbyBiaWdpbnRzIHlldClcbiAgICAgIC8vXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgZG90aWZpZWQpIHtcbiAgICAgICAgaWYgKGlzU3ltYm9sKHByb3ApICYmIG1ldGFbcHJvcF0pXG4gICAgICAgICAgcGlja2VkU3ltYm9scy5wdXNoKFtwcm9wLCBtZXRhW3Byb3BdXSk7XG4gICAgICB9XG5cbiAgICAgIC8vXG4gICAgICAvLyBub3cgd2UgY2FsbCBwaWNrLWRlZXAgdXNpbmcgdGhlIGZpbmFsIGFycmF5XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogdGhpcyBkb2VzIG5vdCBwaWNrIHN5bWJvbHMgbm9yIGJpZ2ludHNcbiAgICAgIC8vXG4gICAgICBtZXRhID0gcGlja0RlZXAobWV0YSwgZG90aWZpZWQpO1xuXG4gICAgICAvL1xuICAgICAgLy8gaWYgdGhlcmUgd2VyZSBhbnkgdG9wLWxldmVsIHN5bWJvbHMgdG8gYmVcbiAgICAgIC8vIHBpY2tlZCB0aGVuIHdlIG5lZWQgdG8gYWRkIHRoZW0gYmFjayBoZXJlIHRvIHRoZSBsaXN0XG4gICAgICAvL1xuICAgICAgLy8gTk9URTogd2UnZCBwcm9iYWJseSB3YW50IHRvIGRvIHRoZSBzYW1lIGZvciBiaWdpbnRzIGFzIHN5bWJvbHNcbiAgICAgIC8vXG4gICAgICBpZiAocGlja2VkU3ltYm9scy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHBpY2tlZFN5bWJvbHMpIHtcbiAgICAgICAgICBtZXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9ubHkgaW52b2tlIGxvZ2dlciBtZXRob2RzIGlmIGl0IHdhcyBub3Qgc2lsZW50XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5zaWxlbnQgJiYgIWhhZFRydWVTaWxlbnRTeW1ib2wpIHtcbiAgICAgIC8vIFNob3cgc3RhY2sgdHJhY2UgaWYgbmVjZXNzYXJ5IChhbG9uZyB3aXRoIGFueSBtZXRhZGF0YSlcbiAgICAgIGlmIChpc0Vycm9yKGVycikgJiYgdGhpcy5jb25maWcuc2hvd1N0YWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZy5sb2dnZXJbbWV0aG9kXShlcnIpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGEgJiZcbiAgICAgICAgICBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0oZXJyLCBtZXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5jb25maWcubWV0YS5zaG93IHx8IGlzRW1wdHkobWV0YSkpIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlTWV0YSAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZU1ldGFdKSB8fFxuICAgICAgICAodGhpcy5jb25maWcubWV0YS5oaWRlSFRUUCAmJiBtZXRhW3RoaXMuY29uZmlnLm1ldGEuaGlkZUhUVFBdKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlclttZXRob2RdKG1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb25maWcubG9nZ2VyW21ldGhvZF0obWVzc2FnZSwgbWV0YSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gcG9zdC1ob29rc1xuICAgIGlmICh0aGlzLmNvbmZpZy5ob29rcy5wb3N0Lmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB7IG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhIH07XG4gICAgcmV0dXJuIHBNYXBTZXJpZXModGhpcy5jb25maWcuaG9va3MucG9zdCwgKGhvb2spID0+XG4gICAgICBob29rKG1ldGhvZCwgZXJyLCBtZXNzYWdlLCBtZXRhKVxuICAgIClcbiAgICAgIC50aGVuKClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlnLmxvZ2dlci5lcnJvcihlcnIpO1xuICAgICAgfSk7XG4gIH1cbn1cblxubW9k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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.0.0",
4
+ "version": "12.0.1",
5
5
  "author": "Nick Baugh <niftylettuce@gmail.com> (http://niftylettuce.com)",
6
6
  "browser": {
7
7
  "parse-app-info": false